Merge remote-tracking branch 'origin/devel' into appveyor

This commit is contained in:
Aman Gupta 2015-10-13 15:25:40 -07:00
commit e2dbf222e6
59 changed files with 1127 additions and 324 deletions

View file

@ -24,4 +24,3 @@ var
"D": action4}.toTable
actionTable["C"]("arg")

View file

@ -1,5 +1,5 @@
import json, tables
import json, tables, sequtils
proc run(json_params: TTable) =
let json_elems = json_params["files"].elems

View file

@ -0,0 +1,11 @@
discard """
output: '''true'''
"""
import sequtils
var x = @[1, 2, 3]
x.apply(proc(x: var int) = x = x+10)
x.apply(proc(x: int): int = x+100)
x.applyIt(it+5000)
echo x == @[5111, 5112, 5113]

View file

@ -0,0 +1,33 @@
discard """
output: '''true
true'''
"""
import sequtils
var x = @[1, 2, 3]
# This mapIt call will run with preallocation because ``len`` is available.
var y = x.mapIt($(it+10))
echo y == @["11", "12", "13"]
type structureWithoutLen = object
a: array[5, int]
iterator items(s: structureWithoutLen): int {.inline.} =
yield s.a[0]
yield s.a[1]
yield s.a[2]
yield s.a[3]
yield s.a[4]
var st: structureWithoutLen
st.a[0] = 0
st.a[1] = 1
st.a[2] = 2
st.a[3] = 3
st.a[4] = 4
# this will run without preallocating the result
# since ``len`` is not available
var r = st.mapIt($(it+10))
echo r == @["10", "11", "12", "13", "14"]

View file

@ -60,8 +60,12 @@ block tableTest2:
t["123"] = 1.5 # test overwriting
assert t["123"] == 1.5
assert t["111"] == 0.0 # deleted
try:
echo t["111"] # deleted
except KeyError:
discard
assert(not hasKey(t, "111"))
assert "123" in t
assert("111" notin t)

View file

@ -60,8 +60,10 @@ block tableTest2:
t["123"] = 1.5 # test overwriting
assert t["123"] == 1.5
assert t["111"] == 0.0 # deleted
assert "123" in t
try:
echo t["111"] # deleted
except KeyError:
discard
assert(not hasKey(t, "111"))
assert "111" notin t

View file

@ -5,6 +5,7 @@ discard """
3'''
"""
import sequtils
# https://github.com/Araq/Nim/issues/797
proc foo[T](s:T):string = $s

View file

@ -1,4 +1,4 @@
import future
import future, sequtils
let x = map(@[1, 2, 3], x => x+10)
assert x == @[11, 12, 13]

View file

@ -18,7 +18,7 @@ proc on*(emitter: var EventEmitter, event: string,
if not hasKey(emitter.events, event):
var list: DoublyLinkedList[proc(e: EventArgs) {.nimcall.}]
add(emitter.events, event, list) #if not, add it.
append(emitter.events.mget(event), fn)
append(emitter.events[event], fn)
proc initEmitter(emitter: var EventEmitter) =
emitter.events = initTable[string,
@ -30,4 +30,3 @@ var
initEmitter(ee)
ee.on("print", proc(e: EventArgs) = echo("pie"))
ee.emit("print", args)

View file

@ -3,6 +3,9 @@ mode = ScriptMode.Whatif
exec "gcc -v"
# test that ospaths actually compiles:
import ospaths
--forceBuild
task listDirs, "lists every subdirectory":

View file

@ -5,7 +5,7 @@ yay'''
# Test overloading of procs when used as function pointers
import strutils
import strutils, sequtils
proc parseInt(x: float): int {.noSideEffect.} = discard
proc parseInt(x: bool): int {.noSideEffect.} = discard

View file

@ -5,6 +5,7 @@ discard """
77'''
"""
#import math
import sequtils
proc optarg(x:int, y:int = 0):int = x + 3 * y
proc singlearg(x:int):int = 20*x

141
tests/stdlib/tmget.nim Normal file
View file

@ -0,0 +1,141 @@
discard """
output: '''Can't access 6
10
11
Can't access 6
10
11
Can't access 6
10
11
Can't access 6
10
11
Can't access 6
10
11
Can't access 6
10
11
Can't access 6
5
Can't access 6
10
11
Can't access 6
10
11'''
"""
import tables
block:
var x = initTable[int, int]()
x[5] = 10
try:
echo x[6]
except KeyError:
echo "Can't access 6"
echo x[5]
x[5] += 1
var c = x[5]
echo c
block:
var x = newTable[int, int]()
x[5] = 10
try:
echo x[6]
except KeyError:
echo "Can't access 6"
echo x[5]
x[5] += 1
var c = x[5]
echo c
block:
var x = initOrderedTable[int, int]()
x[5] = 10
try:
echo x[6]
except KeyError:
echo "Can't access 6"
echo x[5]
x[5] += 1
var c = x[5]
echo c
block:
var x = newOrderedTable[int, int]()
x[5] = 10
try:
echo x[6]
except KeyError:
echo "Can't access 6"
echo x[5]
x[5] += 1
var c = x[5]
echo c
block:
var x = initCountTable[int]()
x[5] = 10
try:
echo x[6]
except KeyError:
echo "Can't access 6"
echo x[5]
x[5] += 1
var c = x[5]
echo c
block:
var x = newCountTable[int]()
x[5] = 10
try:
echo x[6]
except KeyError:
echo "Can't access 6"
echo x[5]
x[5] += 1
var c = x[5]
echo c
import sets
block:
var x = initSet[int]()
x.incl 5
try:
echo x[6]
except KeyError:
echo "Can't access 6"
echo x[5]
import critbits
block:
var x: CritBitTree[int]
x["5"] = 10
try:
echo x["6"]
except KeyError:
echo "Can't access 6"
echo x["5"]
x["5"] += 1
var c = x["5"]
echo c
import strtabs
block:
var x = newStringTable()
x["5"] = "10"
try:
echo x["6"]
except KeyError:
echo "Can't access 6"
echo x["5"]
x["5"][1] = '1'
var c = x["5"]
echo c

View file

@ -132,5 +132,5 @@ block:
</Students>""")
for x in d.mitems:
x = <>Student(Name=x.attrs["Name"] & "foo")
d.mget(1).attrs["Name"] = "bar"
d[1].attrs["Name"] = "bar"
echo d

View file

@ -1,4 +1,4 @@
import unittest
import unittest, sequtils
proc doThings(spuds: var int): int =

View file

@ -27,6 +27,6 @@ when ATTEMPT == 0:
# bug #1543
import sequtils
(var i = @[""];i).mapIt(it)
(var i = @[""];i).applyIt(it)
# now works:
echo "##", i[0], "##"

View file

@ -8,7 +8,7 @@
import strutils, db_sqlite, os, osproc
var db: TDbConn
var db: DbConn
proc createDb() =
db.exec(sql"""
@ -61,7 +61,7 @@ var
proc `()`(cmd: string{lit}): string = cmd.execProcess.string.strip
proc getMachine*(db: TDbConn): MachineId =
proc getMachine*(db: DbConn): MachineId =
var name = "hostname"()
if name.len == 0:
name = when defined(posix): getenv"HOSTNAME".string
@ -76,7 +76,7 @@ proc getMachine*(db: TDbConn): MachineId =
result = db.insertId(sql"insert into Machine(name, os, cpu) values (?,?,?)",
name, system.hostOS, system.hostCPU).MachineId
proc getCommit(db: TDbConn): CommitId =
proc getCommit(db: DbConn): CommitId =
const commLen = "commit ".len
let hash = "git log -n 1"()[commLen..commLen+10]
let branch = "git symbolic-ref --short HEAD"()

View file

@ -119,12 +119,21 @@ proc gcTests(r: var TResults, cat: Category, options: string) =
testSpec r, makeTest("tests/gc" / filename, options &
" -d:release -d:useRealtimeGC", cat, actionRun)
template test(filename: expr): stmt =
template testWithoutBoehm(filename: expr): stmt =
testWithoutMs filename
testSpec r, makeTest("tests/gc" / filename, options &
" --gc:markAndSweep", cat, actionRun)
testSpec r, makeTest("tests/gc" / filename, options &
" -d:release --gc:markAndSweep", cat, actionRun)
template test(filename: expr): stmt =
testWithoutBoehm filename
when not defined(windows):
# AR: cannot find any boehm.dll on the net, right now, so disabled
# for windows:
testSpec r, makeTest("tests/gc" / filename, options &
" --gc:boehm", cat, actionRun)
testSpec r, makeTest("tests/gc" / filename, options &
" -d:release --gc:boehm", cat, actionRun)
test "gcemscripten"
test "growobjcrash"
@ -136,9 +145,9 @@ proc gcTests(r: var TResults, cat: Category, options: string) =
test "gcleak4"
# Disabled because it works and takes too long to run:
#test "gcleak5"
test "weakrefs"
testWithoutBoehm "weakrefs"
test "cycleleak"
test "closureleak"
testWithoutBoehm "closureleak"
testWithoutMs "refarrayleak"
test "stackrefleak"

View file

@ -109,7 +109,7 @@ div.tabContent.hide { display: none; }
proc td(s: string): string =
result = "<td>" & s.substr(0, 200).xmlEncode & "</td>"
proc getCommit(db: TDbConn, c: int): string =
proc getCommit(db: DbConn, c: int): string =
var commit = c
for thisCommit in db.rows(sql"select id from [Commit] order by id desc"):
if commit == 0: result = thisCommit[0]

View file

@ -65,7 +65,7 @@ proc callCompiler(cmdTemplate, filename, options: string,
let c = parseCmdLine(cmdTemplate % ["target", targetToCmd[target],
"options", options, "file", filename.quoteShell])
var p = startProcess(command=c[0], args=c[1.. ^1],
options={poStdErrToStdOut, poUseShell})
options={poStdErrToStdOut, poUsePath})
let outp = p.outputStream
var suc = ""
var err = ""
@ -215,7 +215,7 @@ proc generatedFile(path, name: string, target: TTarget): string =
proc codegenCheck(test: TTest, check: string, given: var TSpec) =
try:
let (path, name, ext2) = test.name.splitFile
let (path, name, _) = test.name.splitFile
let genFile = generatedFile(path, name, test.target)
let contents = readFile(genFile).string
if check[0] == '\\':
@ -307,7 +307,7 @@ proc testSpec(r: var TResults, test: TTest) =
let isJsTarget = test.target == targetJS
var exeFile: string
if isJsTarget:
let (dir, file, ext) = splitFile(tname)
let (dir, file, _) = splitFile(tname)
exeFile = dir / "nimcache" / file & ".js" # *TODO* hardcoded "nimcache"
else:
exeFile = changeFileExt(tname, ExeExt)
@ -352,7 +352,7 @@ proc testSpec(r: var TResults, test: TTest) =
proc testNoSpec(r: var TResults, test: TTest) =
# does not extract the spec because the file is not supposed to have any
let tname = test.name.addFileExt(".nim")
#let tname = test.name.addFileExt(".nim")
inc(r.total)
let given = callCompiler(cmdTemplate, test.name, test.options, test.target)
r.addResult(test, "", given.msg, given.err)
@ -368,7 +368,7 @@ proc testC(r: var TResults, test: TTest) =
r.addResult(test, "", given.msg, given.err)
elif test.action == actionRun:
let exeFile = changeFileExt(test.name, ExeExt)
var (buf, exitCode) = execCmdEx(exeFile, options = {poStdErrToStdOut, poUseShell})
var (_, exitCode) = execCmdEx(exeFile, options = {poStdErrToStdOut, poUsePath})
if exitCode != 0: given.err = reExitCodesDiffer
if given.err == reSuccess: inc(r.passed)