summary refs log tree commit diff stats
path: root/tests/casestmt/tcstring.nim
blob: 288373402d547a4429705f66a718576bd3de2d96 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
discard """
  targets: "c cpp js"
"""

type Result = enum none, a, b, c, d, e, f

proc foo1(x: cstring): Result =
  const y = cstring"hash"
  const arr = [cstring"it", cstring"finally"]
  result = none
  case x
  of "Andreas", "Rumpf": result = a
  of cstring"aa", "bb": result = b
  of "cc", y, "when": result = c
  of "will", arr, "be", "generated": result = d
  of nil: result = f

var results = [
  foo1("Rumpf"), foo1("Andreas"),
  foo1("aa"), foo1(cstring"bb"),
  foo1("cc"), foo1("hash"),
  foo1("finally"), foo1("generated"),
  foo1("no"), foo1("another no"),
  foo1(nil)]
doAssert results == [a, a, b, b, c, c, d, d, none, none, f], $results

proc foo2(x: cstring): Result =
  const y = cstring"hash"
  const arr = [cstring"it", cstring"finally"]
  doAssert not (compiles do:
    result = case x
    of "Andreas", "Rumpf": a
    of cstring"aa", "bb": b
    of "cc", y, "when": c
    of "will", arr, "be", "generated": d)
  case x
  of "Andreas", "Rumpf": a
  of cstring"aa", "bb": b
  of "cc", y, "when": c
  of "will", arr, "be", "generated": d
  of nil: f
  else: e

results = [
  foo2("Rumpf"), foo2("Andreas"),
  foo2("aa"), foo2(cstring"bb"),
  foo2("cc"), foo2("hash"),
  foo2("finally"), foo2("generated"),
  foo2("no"), foo2("another no"),
  foo2(nil)]

doAssert results == [a, a, b, b, c, c, d, d, e, e, f], $results