summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--tests/js/readme.md5
-rw-r--r--tests/js/t16822.nim29
-rw-r--r--tests/tuples/ttuples_issues.nim199
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()