diff options
Diffstat (limited to 'tests/exprs')
-rw-r--r-- | tests/exprs/t22604.nim | 36 | ||||
-rw-r--r-- | tests/exprs/texprstmt.nim | 12 | ||||
-rw-r--r-- | tests/exprs/thighCString.nim | 6 | ||||
-rw-r--r-- | tests/exprs/tifexpr_typeinference.nim | 24 | ||||
-rw-r--r-- | tests/exprs/tresultwarning.nim | 6 | ||||
-rw-r--r-- | tests/exprs/tstmtexp.nim | 8 | ||||
-rw-r--r-- | tests/exprs/tstmtexprs.nim | 163 |
7 files changed, 255 insertions, 0 deletions
diff --git a/tests/exprs/t22604.nim b/tests/exprs/t22604.nim new file mode 100644 index 000000000..c41cd3dfa --- /dev/null +++ b/tests/exprs/t22604.nim @@ -0,0 +1,36 @@ +# if +for i in 0..<1: + let x = + case false + of true: + 42 + of false: + if true: + continue + else: + raiseAssert "Won't get here" + +# nested case +for i in 0..<1: + let x = + case false + of true: + 42 + of false: + case true + of true: + continue + of false: + raiseAssert "Won't get here" + +# try except +for i in 0..<1: + let x = + case false + of true: + 42 + of false: + try: + continue + except: + raiseAssert "Won't get here" \ No newline at end of file diff --git a/tests/exprs/texprstmt.nim b/tests/exprs/texprstmt.nim new file mode 100644 index 000000000..3c9704650 --- /dev/null +++ b/tests/exprs/texprstmt.nim @@ -0,0 +1,12 @@ +discard """ + errormsg: "expression 'result[1 .. BackwardsIndex(1)]' is of type 'string' and has to be used (or discarded)" + line: 10 +""" + +# bug #578 + +proc test: string = + result = "blah" + result[1 .. ^1] + +echo test() diff --git a/tests/exprs/thighCString.nim b/tests/exprs/thighCString.nim new file mode 100644 index 000000000..543966df4 --- /dev/null +++ b/tests/exprs/thighCString.nim @@ -0,0 +1,6 @@ +discard """ + output: "5" +""" +let test = cstring("foobar") + +echo high(test) diff --git a/tests/exprs/tifexpr_typeinference.nim b/tests/exprs/tifexpr_typeinference.nim new file mode 100644 index 000000000..ccaea3e80 --- /dev/null +++ b/tests/exprs/tifexpr_typeinference.nim @@ -0,0 +1,24 @@ +discard """ +action: compile +""" + +#bug #712 + +import tables + +proc test(): Table[string, string] = + discard + +proc test2(): Table[string, string] = + discard + +var x = 5 +let blah = + case x + of 5: + test2() + of 2: + test() + else: test() + +echo blah.len diff --git a/tests/exprs/tresultwarning.nim b/tests/exprs/tresultwarning.nim new file mode 100644 index 000000000..28dabfdb1 --- /dev/null +++ b/tests/exprs/tresultwarning.nim @@ -0,0 +1,6 @@ +discard """ + nimout: "tresultwarning.nim(6, 7) Warning: Special variable 'result' is shadowed. [ResultShadowed]" +""" + +proc test(): string = + var result = "foo" diff --git a/tests/exprs/tstmtexp.nim b/tests/exprs/tstmtexp.nim new file mode 100644 index 000000000..0ae866497 --- /dev/null +++ b/tests/exprs/tstmtexp.nim @@ -0,0 +1,8 @@ +discard """ + errormsg: "expression '5' is of type 'int literal(5)' and has to be used (or discarded)" + file: "tstmtexp.nim" + line: 8 +""" +# Test 3 + +1+4 diff --git a/tests/exprs/tstmtexprs.nim b/tests/exprs/tstmtexprs.nim new file mode 100644 index 000000000..615c36024 --- /dev/null +++ b/tests/exprs/tstmtexprs.nim @@ -0,0 +1,163 @@ +discard """ + output: '''24 +(bar: "bar") +1244 +6 +abcdefghijklmnopqrstuvwxyz +145 23 +3 +2''' +""" + +import strutils + +const fac4 = (var x = 1; for i in 1..4: x *= i; x) + +echo fac4 + +when true: + proc test(foo: proc (x, y: int): bool) = + echo foo(5, 5) + + + type Foo = object + bar: string + + proc newfoo(): Foo = + result.bar = "bar" + + echo($newfoo()) + + + proc retInt(x, y: int): int = + if (var yy = 0; yy != 0): + echo yy + else: + echo(try: parseInt("1244") except ValueError: -1) + result = case x + of 23: 3 + of 64: + case y + of 1: 2 + of 2: 3 + of 3: 6 + else: 8 + else: 1 + + echo retInt(64, 3) + + proc buildString(): string = + result = "" + for x in 'a'..'z': + result.add(x) + + echo buildString() + +#test( +# proc (x, y: int): bool = +# if x == 5: return true +# if x == 2: return false +# if y == 78: return true +#) + +proc q(): int {.discardable.} = 145 +proc p(): int = + q() + +proc p2(a: int): int = + # result enforces a void context: + if a == 2: + result = 23 + q() + +echo p(), " ", p2(2) + +proc semiProblem() = + if false: echo "aye"; echo "indeed" + +semiProblem() + + +# bug #844 + +import json +proc parseResponse(): JsonNode = + result = % { "key1": % { "key2": % "value" } } + for key, val in result["key1"]: + var excMsg = key & "(" + if (var n=result["key2"]; n != nil): + excMsg &= n.str + raise newException(CatchableError, excMsg) + + + +#bug #992 +var se = @[1,2] +let b = (se[1] = 1; 1) + + +# bug #1161 + +type + PFooBase = ref object of RootRef + field: int + + PFoo[T] = ref object of PFooBase + field2: T + +var testIf = + if true: + 2 + else: + 3 + +var testCase = + case 8 + of 8: 9 + else: 10 + +var testTry = + try: + PFoo[string](field: 3, field2: "asfasf") + except: + PFooBase(field: 5) + +echo(testTry.field) + +# bug #6166 + +proc quo(op: proc (x: int): bool): int = + result = + if op(3): + 2 + else: + 0 + +echo( + if true: + quo do (a: int) -> bool: + a mod 2 != 0 + else: + quo do (a: int) -> bool: + a mod 3 != 0 +) + +# bug #6980 + +proc fooBool: bool {.discardable.} = + true + +if true: + fooBool() +else: + raise newException(ValueError, "argh") + +# bug #5374 + +proc test1(): int64 {.discardable.} = discard +proc test2(): int {.discardable.} = discard + +if true: + test1() +else: + test2() |