some tests cleaned up; some bugfixes

This commit is contained in:
Araq
2011-04-11 00:25:24 +02:00
parent c96aaecfb4
commit fc6cc79273
18 changed files with 106 additions and 69 deletions

View File

@@ -83,6 +83,8 @@ proc genConstStmt(p: BProc, t: PNode) =
if t.sons[i].kind == nkCommentStmt: continue
if t.sons[i].kind != nkConstDef: InternalError(t.info, "genConstStmt")
var c = t.sons[i].sons[0].sym
assert c != nil
assert c.typ != nil
if c.typ.kind in ConstantDataTypes and not (lfNoDecl in c.loc.flags):
# generate the data:
fillLoc(c.loc, locData, c.typ, mangleName(c), OnUnknown)

View File

@@ -700,13 +700,12 @@ proc evalAppendStrCh(c: PEvalContext, n: PNode): PNode =
proc evalConStrStr(c: PEvalContext, n: PNode): PNode =
# we cannot use ``evalOp`` for this as we can here have more than 2 arguments
result = evalAux(c, n.sons[1], {})
if isSpecial(result): return
var a = result
for i in countup(2, sonsLen(n) - 1):
var a = newNodeIT(nkStrLit, n.info, n.typ)
a.strVal = ""
for i in countup(1, sonsLen(n) - 1):
result = evalAux(c, n.sons[i], {})
if isSpecial(result): return
a.strVal = getStrValue(a) & getStrValue(result)
a.strVal.add(getStrValue(result))
result = a
proc evalAppendStrStr(c: PEvalContext, n: PNode): PNode =

View File

@@ -174,12 +174,20 @@ proc semOrdinal(c: PContext, n: PNode, prev: PType): PType =
GlobalError(n.info, errXExpectsOneTypeParam, "ordinal")
proc semTypeIdent(c: PContext, n: PNode): PSym =
result = qualifiedLookup(c, n, {checkAmbiguity, checkUndeclared})
if result != nil:
markUsed(n, result)
if result.kind != skType: GlobalError(n.info, errTypeExpected)
if n.kind == nkSym:
result = n.sym
else:
GlobalError(n.info, errIdentifierExpected)
result = qualifiedLookup(c, n, {checkAmbiguity, checkUndeclared})
if result != nil:
markUsed(n, result)
if result.kind != skType: GlobalError(n.info, errTypeExpected)
if result.typ.kind != tyGenericParam:
# XXX get rid of this hack!
reset(n^)
n.kind = nkSym
n.sym = result
else:
GlobalError(n.info, errIdentifierExpected)
proc semTuple(c: PContext, n: PNode, prev: PType): PType =
var

View File

@@ -1,8 +1,3 @@
discard """
file: "tambsym2.nim"
line: 9
errormsg: "undeclared identifier: \'CreateRGBSurface\'"
"""
from sdl import PSurface

View File

@@ -0,0 +1,24 @@
type
TListItemType* = enum
RedisNil, RedisString
TListItem* = object
case kind*: TListItemType
of RedisString:
str*: string
else: nil
TRedisList* = seq[TListItem]
# Caused by this.
proc seq*() =
nil
proc lrange*(key: string): TRedisList =
var foo: TListItem
foo.kind = RedisNil
result = @[foo]
when isMainModule:
var p = lrange("mylist")
for i in items(p):
echo(i.str)

View File

@@ -1,5 +1,5 @@
discard """
output: "256 100"
output: "100 0"
"""
# A min-heap.

View File

@@ -1,6 +1,6 @@
discard """
file: "titer2.nim"
output: "123"
msg: "internal error: not implemented: pass to var parameter"
"""
# Try to break the transformation pass:
iterator iterAndZero(a: var openArray[int]): int =

View File

@@ -1,12 +1,12 @@
discard """
file: "tbind4.nim"
line: 9
file: "mbind4.nim"
line: 6
errormsg: "undeclared identifier: \'lastId\'"
"""
# Module B
import mbind4
echo genId() #ERROR_MSG instantiation from here
echo genId()

View File

@@ -1,7 +1,7 @@
discard """
file: "tnamedparams.nim"
line: 8
errormsg: "Error: type mismatch: got (input: string, filename: string, line: int, col: int)"
errormsg: "type mismatch: got (input: string, filename: string, line: int, col: int)"
"""
import pegs

View File

@@ -1,6 +1,6 @@
discard """
line: 6
errormsg: "Error: type mismatch: got (int) but expected 'bool'"
errormsg: "type mismatch: got (int) but expected 'bool'"
"""
if 1:

View File

@@ -1,6 +1,6 @@
discard """
file: "tnot.nim"
line: 14
file: "system.nim"
line: 599
errormsg: "type mismatch"
"""
# BUG: following compiles, but should not:

View File

@@ -1,13 +1,13 @@
discard """
file: "toverl.nim"
line: 11
errormsg: "attempt to redefine \'TNone\'"
errormsg: "redefinition of \'TNone\'"
"""
# Test for overloading
type
TNone {.exportc: "_NONE", final.} = object
proc TNone(a, b: int) = nil #ERROR_MSG attempt to redefine 'TNone'
# Test for overloading
type
TNone {.exportc: "_NONE", final.} = object
proc TNone(a, b: int) = nil #ERROR_MSG attempt to redefine 'TNone'

View File

@@ -1,6 +1,6 @@
discard """
file: "trecinca.nim"
line: 8
file: "trecincb.nim"
line: 9
errormsg: "recursive dependency: \'tests/reject/trecincb.nim\'"
"""
# Test recursive includes

View File

@@ -3,21 +3,21 @@ discard """
line: 25
errormsg: "internal error: cannot generate C type for: PA"
"""
# Test recursive type descriptions
# (mainly for the C code generator)
type
PA = ref TA
TA = array [0..2, PA]
PRec = ref TRec
TRec {.final.} = object
a, b: TA
P1 = ref T1
PB = ref TB
TB = array [0..3, P1]
T1 = array [0..6, PB]
# Test recursive type descriptions
# (mainly for the C code generator)
type
PA = ref TA
TA = array [0..2, PA]
PRec = ref TRec
TRec {.final.} = object
a, b: TA
P1 = ref T1
PB = ref TB
TB = array [0..3, P1]
T1 = array [0..6, PB]
var
x: PA

View File

@@ -1,7 +1,7 @@
discard """
file: "ttypelessemptyset.nim"
line: 5
errormsg: "Error: internal error: invalid kind for last(tyEmpty)"
errormsg: "internal error: invalid kind for last(tyEmpty)"
"""
var q = false
discard (if q: {} else: {})

View File

@@ -1,6 +1,6 @@
discard """
file: "ttypenoval.nim"
line: 36
line: 38
errormsg: "a type has no value"
"""

View File

@@ -27,6 +27,9 @@ type
TResults {.pure.} = object
total, passed, skipped: int
data: string
TResultEnum = enum
reFailure, reIgnored, reSuccess
# ----------------------- Spec parser ----------------------------------------
@@ -127,9 +130,11 @@ proc `$`(x: TResults): string =
"Tests skipped: $2 / $3 <br />\n") %
[$x.passed, $x.skipped, $x.total]
proc colorBool(b: bool): string =
if b: result = "<span style=\"color:green\">yes</span>"
else: result = "<span style=\"color:red\">no</span>"
proc colorResult(r: TResultEnum): string =
case r
of reFailure: result = "<span style=\"color:red\">no</span>"
of reIgnored: result = "<span style=\"color:fuchsia\">ignored</span>"
of reSuccess: result = "<span style=\"color:green\">yes</span>"
const
TableHeader4 = "<table border=\"1\"><tr><td>Test</td><td>Expected</td>" &
@@ -139,14 +144,14 @@ const
TableFooter = "</table>\n"
proc addResult(r: var TResults, test, expected, given: string,
success: bool) =
success: TResultEnum) =
r.data.addf("<tr><td>$#</td><td>$#</td><td>$#</td><td>$#</td></tr>\n", [
test, expected, given, success.colorBool])
test, expected, given, success.colorResult])
proc addResult(r: var TResults, test, given: string,
success: bool) =
success: TResultEnum) =
r.data.addf("<tr><td>$#</td><td>$#</td><td>$#</td></tr>\n", [
test, given, success.colorBool])
test, given, success.colorResult])
proc listResults(reject, compile, run: TResults) =
var s = "<html>"
@@ -166,15 +171,14 @@ proc listResults(reject, compile, run: TResults) =
close(outp)
proc cmpMsgs(r: var TResults, expected, given: TSpec, test: string) =
inc(r.total)
if strip(expected.msg) notin strip(given.msg):
r.addResult(test, expected.msg, given.msg, false)
elif expected.file != given.file:
r.addResult(test, expected.file, given.file, false)
r.addResult(test, expected.msg, given.msg, reFailure)
elif extractFilename(expected.file) != extractFilename(given.file):
r.addResult(test, expected.file, given.file, reFailure)
elif expected.line != given.line:
r.addResult(test, $expected.line, $given.line, false)
r.addResult(test, $expected.line, $given.line, reFailure)
else:
r.addResult(test, expected.msg, given.msg, true)
r.addResult(test, expected.msg, given.msg, reSuccess)
inc(r.passed)
proc reject(r: var TResults, dir, options: string) =
@@ -184,7 +188,9 @@ proc reject(r: var TResults, dir, options: string) =
inc(r.total)
echo t
var expected = parseSpec(test)
if expected.disabled: inc(r.skipped)
if expected.disabled:
r.addResult(t, "", "", reIgnored)
inc(r.skipped)
else:
var given = callCompiler(test, options)
cmpMsgs(r, expected, given, t)
@@ -195,7 +201,7 @@ proc compile(r: var TResults, pattern, options: string) =
inc(r.total)
echo t
var given = callCompiler(test, options)
r.addResult(t, given.msg, not given.err)
r.addResult(t, given.msg, if given.err: reFailure else: reSuccess)
if not given.err: inc(r.passed)
proc run(r: var TResults, dir, options: string) =
@@ -204,20 +210,23 @@ proc run(r: var TResults, dir, options: string) =
echo t
inc(r.total)
var expected = parseSpec(test)
if expected.disabled: inc(r.skipped)
if expected.disabled:
r.addResult(t, "", "", reIgnored)
inc(r.skipped)
else:
var given = callCompiler(test, options)
if given.err:
r.addResult(t, "", given.msg, not given.err)
r.addResult(t, "", given.msg, reFailure)
else:
var exeFile = changeFileExt(test, ExeExt)
if existsFile(exeFile):
var buf = myExec(exeFile)
var success = strip(buf) == strip(expected.outp)
if success: inc(r.passed)
r.addResult(t, expected.outp, buf, success)
r.addResult(t, expected.outp,
buf, if success: reSuccess else: reFailure)
else:
r.addResult(t, expected.outp, "executable not found", false)
r.addResult(t, expected.outp, "executable not found", reFailure)
var options = ""
var rejectRes = initResults()