diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/js/readme.md | 5 | ||||
-rw-r--r-- | tests/js/t16822.nim | 29 | ||||
-rw-r--r-- | tests/tuples/ttuples_issues.nim | 199 |
3 files changed, 123 insertions, 110 deletions
diff --git a/tests/js/readme.md b/tests/js/readme.md new file mode 100644 index 000000000..7fcc722fa --- /dev/null +++ b/tests/js/readme.md @@ -0,0 +1,5 @@ +## notes +Prefer moving tests to a non-js directory so that they get tested across all backends automatically. +Ideally, tests/js should be reserved to code that only makes sense in js. + +Note also that tests for a js specific module (e.g.: `std/jsbigints`) belong to `tests/stdlib`, (e.g.: `tests/stdlib/tjsbigints.nim`) diff --git a/tests/js/t16822.nim b/tests/js/t16822.nim deleted file mode 100644 index 687d60be9..000000000 --- a/tests/js/t16822.nim +++ /dev/null @@ -1,29 +0,0 @@ -block: # bug #16822 - var scores: seq[(set[char], int)] = @{{'/'} : 10} - - var x1: set[char] - for item in items(scores): - x1 = item[0] - - doAssert x1 == {'/'} - - var x2: set[char] - for (chars, value) in items(scores): - x2 = chars - - doAssert x2 == {'/'} - -block: # bug #14574 - proc fn(): auto = - let a = @[("foo", (12, 13))] - for (k,v) in a: - return (k,v) - doAssert fn() == ("foo", (12, 13)) - -block: # bug #14574 - iterator fn[T](a:T): lent T = yield a - let a = (10, (11,)) - proc bar(): auto = - for (x,y) in fn(a): - return (x,y) - doAssert bar() == (10, (11,)) \ No newline at end of file diff --git a/tests/tuples/ttuples_issues.nim b/tests/tuples/ttuples_issues.nim index f294f2f1c..0cc505d28 100644 --- a/tests/tuples/ttuples_issues.nim +++ b/tests/tuples/ttuples_issues.nim @@ -1,84 +1,121 @@ discard """ -output: '''(a: 1) -(a: 1) -(a: 1, b: 2) -''' + targets: "c cpp js" """ - -import tables - - -block t4479: - type - MyTuple = tuple - num: int - strings: seq[string] - ints: seq[int] - - var foo = MyTuple(( - num: 7, - strings: @[], - ints: @[], - )) - - var bar = ( - num: 7, - strings: @[], - ints: @[], - ).MyTuple - - var fooUnnamed = MyTuple((7, @[], @[])) - var n = 7 - var fooSym = MyTuple((num: n, strings: @[], ints: @[])) - - -block t1910: - var p = newOrderedTable[tuple[a:int], int]() - var q = newOrderedTable[tuple[x:int], int]() - for key in p.keys: - echo key.a - for key in q.keys: - echo key.x - - -block t2121: - type - Item[K,V] = tuple - key: K - value: V - - var q = newseq[Item[int,int]](1) - let (x,y) = q[0] - - -block t2369: - type HashedElem[T] = tuple[num: int, storedVal: ref T] - - proc append[T](tab: var seq[HashedElem[T]], n: int, val: ref T) = - #tab.add((num: n, storedVal: val)) - var he: HashedElem[T] = (num: n, storedVal: val) - #tab.add(he) - - var g: seq[HashedElem[int]] = @[] - - proc foo() = - var x: ref int - new(x) - x[] = 77 - g.append(44, x) - - -block t1986: - proc test(): int64 = - return 0xdeadbeef.int64 - - const items = [ - (var1: test(), var2: 100'u32), - (var1: test(), var2: 192'u32) - ] - -# bug #14911 -echo (a: 1) # works -echo (`a`: 1) # works -echo (`a`: 1, `b`: 2) # Error: named expression expected +# targets include `cpp` because in the past, there were several cpp-specific bugs with tuples. + +import std/tables + +template main() = + block: # bug #4479 + type + MyTuple = tuple + num: int + strings: seq[string] + ints: seq[int] + + var foo = MyTuple(( + num: 7, + strings: @[], + ints: @[], + )) + + var bar = MyTuple ( + num: 7, + strings: @[], + ints: @[], + ) + + var fooUnnamed = MyTuple((7, @[], @[])) + var n = 7 + var fooSym = MyTuple((num: n, strings: @[], ints: @[])) + + block: # bug #1910 + var p = newOrderedTable[tuple[a:int], int]() + var q = newOrderedTable[tuple[x:int], int]() + for key in p.keys: + echo key.a + for key in q.keys: + echo key.x + + block: # bug #2121 + type + Item[K,V] = tuple + key: K + value: V + + var q = newseq[Item[int,int]](1) + let (x,y) = q[0] + + block: # bug #2369 + type HashedElem[T] = tuple[num: int, storedVal: ref T] + + proc append[T](tab: var seq[HashedElem[T]], n: int, val: ref T) = + #tab.add((num: n, storedVal: val)) + var he: HashedElem[T] = (num: n, storedVal: val) + #tab.add(he) + + var g: seq[HashedElem[int]] = @[] + + proc foo() = + var x: ref int + new(x) + x[] = 77 + g.append(44, x) + + block: # bug #1986 + proc test(): int64 = + return 0xdeadbeef.int64 + + const items = [ + (var1: test(), var2: 100'u32), + (var1: test(), var2: 192'u32) + ] + + block: # bug #14911 + doAssert $(a: 1) == "(a: 1)" # works + doAssert $(`a`: 1) == "(a: 1)" # works + doAssert $(`a`: 1, `b`: 2) == "(a: 1, b: 2)" # was: Error: named expression expected + + block: # bug #16822 + var scores: seq[(set[char], int)] = @{{'/'} : 10} + + var x1: set[char] + for item in items(scores): + x1 = item[0] + + doAssert x1 == {'/'} + + var x2: set[char] + for (chars, value) in items(scores): + x2 = chars + + doAssert x2 == {'/'} + + block: # bug #14574 + proc fn(): auto = + let a = @[("foo", (12, 13))] + for (k,v) in a: + return (k,v) + doAssert fn() == ("foo", (12, 13)) + + block: # bug #14574 + iterator fn[T](a:T): lent T = yield a + let a = (10, (11,)) + proc bar(): auto = + for (x,y) in fn(a): + return (x,y) + doAssert bar() == (10, (11,)) + +proc mainProc() = + # other tests should be in `main` + block: + type A = tuple[x: int, y: int] + doAssert (x: 1, y: 2).A == A (x: 1, y: 2) # MCS => can't use a template + +static: + main() + mainProc() + +main() +mainProc() |