summary refs log tree commit diff stats
path: root/tests/exprs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/exprs')
-rw-r--r--tests/exprs/t22604.nim36
-rw-r--r--tests/exprs/texprstmt.nim12
-rw-r--r--tests/exprs/thighCString.nim6
-rw-r--r--tests/exprs/tifexpr_typeinference.nim24
-rw-r--r--tests/exprs/tresultwarning.nim6
-rw-r--r--tests/exprs/tstmtexp.nim8
-rw-r--r--tests/exprs/tstmtexprs.nim163
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()