summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authorTimothee Cour <timothee.cour2@gmail.com>2020-12-12 00:33:29 -0800
committerGitHub <noreply@github.com>2020-12-12 09:33:29 +0100
commitb1c232aca1baf7d9ccc6c7a86e9ac5a127bc2354 (patch)
tree8a14ca5b902e9811ea5a05fa76f29432fd033c3a /tests
parent0b73106ccf983565d34654ee8b1167827b53b01a (diff)
downloadNim-b1c232aca1baf7d9ccc6c7a86e9ac5a127bc2354.tar.gz
improve tests for collections (#16328)
* improve tests for collections

* remove remaining code blocks in deques.nim

* improve runnableExamples
Diffstat (limited to 'tests')
-rw-r--r--tests/collections/tcollections.nim69
-rw-r--r--tests/stdlib/tcritbits.nim18
-rw-r--r--tests/stdlib/tdeque.nim111
-rw-r--r--tests/stdlib/tdeques.nim139
-rw-r--r--tests/stdlib/tlists.nim24
5 files changed, 182 insertions, 179 deletions
diff --git a/tests/collections/tcollections.nim b/tests/collections/tcollections.nim
index 1e2858fb4..7677f7c1a 100644
--- a/tests/collections/tcollections.nim
+++ b/tests/collections/tcollections.nim
@@ -1,9 +1,10 @@
 discard """
-  output: ""
+  targets: "c js"
 """
 
-import sets, tables, deques, lists, critbits, sequtils
+# see also: tdeques, tlists, tcritbits
 
+import sets, tables, sequtils
 
 block tapply:
   var x = @[1, 2, 3]
@@ -12,19 +13,6 @@ block tapply:
   x.applyIt(it+5000)
   doAssert x == @[5111, 5112, 5113]
 
-
-block tdeques:
-  proc index(self: Deque[int], idx: Natural): int =
-    self[idx]
-
-  proc main =
-    var testDeque = initDeque[int]()
-    testDeque.addFirst(1)
-    assert testDeque.index(0) == 1
-
-  main()
-
-
 block tmapit:
   var x = @[1, 2, 3]
   # This mapIt call will run with preallocation because ``len`` is available.
@@ -75,6 +63,8 @@ doAssert $(toOrderedSet([1, 2, 3])) == "{1, 2, 3}"
 doAssert $(toOrderedSet(["1", "2", "3"])) == """{"1", "2", "3"}"""
 doAssert $(toOrderedSet(['1', '2', '3'])) == """{'1', '2', '3'}"""
 
+# see also: tcritbitsToString, tlistsToString
+
 # Tests for tables
 when defined(nimIntHash1):
   doAssert $({1: "1", 2: "2"}.toTable) == """{1: "1", 2: "2"}"""
@@ -83,55 +73,6 @@ else:
 let tabStr = $({"1": 1, "2": 2}.toTable)
 doAssert (tabStr == """{"2": 2, "1": 1}""" or tabStr == """{"1": 1, "2": 2}""")
 
-# Tests for deques
-block:
-  var d = initDeque[int]()
-  d.addLast(1)
-  doAssert $d == "[1]"
-block:
-  var d = initDeque[string]()
-  d.addLast("1")
-  doAssert $d == """["1"]"""
-block:
-  var d = initDeque[char]()
-  d.addLast('1')
-  doAssert $d == "['1']"
-
-# Tests for lists
-block:
-  var l = initDoublyLinkedList[int]()
-  l.append(1)
-  l.append(2)
-  l.append(3)
-  doAssert $l == "[1, 2, 3]"
-block:
-  var l = initDoublyLinkedList[string]()
-  l.append("1")
-  l.append("2")
-  l.append("3")
-  doAssert $l == """["1", "2", "3"]"""
-block:
-  var l = initDoublyLinkedList[char]()
-  l.append('1')
-  l.append('2')
-  l.append('3')
-  doAssert $l == """['1', '2', '3']"""
-
-# Tests for critbits
-block:
-  var t: CritBitTree[int]
-  t["a"] = 1
-  doAssert $t == """{"a": 1}"""
-block:
-  var t: CritBitTree[string]
-  t["a"] = "1"
-  doAssert $t == """{"a": "1"}"""
-block:
-  var t: CritBitTree[char]
-  t["a"] = '1'
-  doAssert $t == """{"a": '1'}"""
-
-
 # Test escaping behavior
 block:
   var s = ""
diff --git a/tests/stdlib/tcritbits.nim b/tests/stdlib/tcritbits.nim
index 4b05cd950..7b2dde1c8 100644
--- a/tests/stdlib/tcritbits.nim
+++ b/tests/stdlib/tcritbits.nim
@@ -1,3 +1,7 @@
+discard """
+  targets: "c js"
+"""
+
 import std/[sequtils,critbits]
 
 template main =
@@ -65,5 +69,19 @@ template main =
     discard strings.containsOrIncl("foo", 3)
     doAssert strings["foo"] == 3
 
+  block tcritbitsToString:
+    block:
+      var t: CritBitTree[int]
+      t["a"] = 1
+      doAssert $t == """{"a": 1}"""
+    block:
+      var t: CritBitTree[string]
+      t["a"] = "1"
+      doAssert $t == """{"a": "1"}"""
+    block:
+      var t: CritBitTree[char]
+      t["a"] = '1'
+      doAssert $t == """{"a": '1'}"""
+
 main()
 static: main()
diff --git a/tests/stdlib/tdeque.nim b/tests/stdlib/tdeque.nim
deleted file mode 100644
index 50e5d0ab1..000000000
--- a/tests/stdlib/tdeque.nim
+++ /dev/null
@@ -1,111 +0,0 @@
-import deques
-
-
-var deq = initDeque[int](1)
-deq.addLast(4)
-deq.addFirst(9)
-deq.addFirst(123)
-var first = deq.popFirst()
-deq.addLast(56)
-assert(deq.peekLast() == 56)
-deq.addLast(6)
-assert(deq.peekLast() == 6)
-var second = deq.popFirst()
-deq.addLast(789)
-assert(deq.peekLast() == 789)
-
-assert first == 123
-assert second == 9
-assert($deq == "[4, 56, 6, 789]")
-assert deq == [4, 56, 6, 789].toDeque
-
-assert deq[0] == deq.peekFirst and deq.peekFirst == 4
-#assert deq[^1] == deq.peekLast and deq.peekLast == 789
-deq[0] = 42
-deq[deq.len - 1] = 7
-
-assert 6 in deq and 789 notin deq
-assert deq.find(6) >= 0
-assert deq.find(789) < 0
-
-block:
-  var d = initDeque[int](1)
-  d.addLast 7
-  d.addLast 8
-  d.addLast 10
-  d.addFirst 5
-  d.addFirst 2
-  d.addFirst 1
-  d.addLast 20
-  d.shrink(fromLast = 2)
-  doAssert($d == "[1, 2, 5, 7, 8]")
-  d.shrink(2, 1)
-  doAssert($d == "[5, 7]")
-  d.shrink(2, 2)
-  doAssert d.len == 0
-
-for i in -2 .. 10:
-  if i in deq:
-    assert deq.contains(i) and deq.find(i) >= 0
-  else:
-    assert(not deq.contains(i) and deq.find(i) < 0)
-
-when compileOption("boundChecks"):
-  try:
-    echo deq[99]
-    assert false
-  except IndexDefect:
-    discard
-
-  try:
-    assert deq.len == 4
-    for i in 0 ..< 5: deq.popFirst()
-    assert false
-  except IndexDefect:
-    discard
-
-# grabs some types of resize error.
-deq = initDeque[int]()
-for i in 1 .. 4: deq.addLast i
-deq.popFirst()
-deq.popLast()
-for i in 5 .. 8: deq.addFirst i
-assert $deq == "[8, 7, 6, 5, 2, 3]"
-
-# Similar to proc from the documentation example
-proc foo(a, b: Positive) = # assume random positive values for `a` and `b`.
-  var deq = initDeque[int]()
-  assert deq.len == 0
-  for i in 1 .. a: deq.addLast i
-
-  if b < deq.len: # checking before indexed access.
-    assert deq[b] == b + 1
-
-  # The following two lines don't need any checking on access due to the logic
-  # of the program, but that would not be the case if `a` could be 0.
-  assert deq.peekFirst == 1
-  assert deq.peekLast == a
-
-  while deq.len > 0: # checking if the deque is empty
-    assert deq.popFirst() > 0
-
-#foo(0,0)
-foo(8, 5)
-foo(10, 9)
-foo(1, 1)
-foo(2, 1)
-foo(1, 5)
-foo(3, 2)
-
-import sets
-
-block t13310:
-  proc main() =
-    var q = initDeque[HashSet[int16]](2)
-    q.addFirst([1'i16].toHashSet)
-    q.addFirst([2'i16].toHashSet)
-    q.addFirst([3'i16].toHashSet)
-    assert $q == "[{3}, {2}, {1}]"
-
-  static:
-    main()
diff --git a/tests/stdlib/tdeques.nim b/tests/stdlib/tdeques.nim
new file mode 100644
index 000000000..db392c6cc
--- /dev/null
+++ b/tests/stdlib/tdeques.nim
@@ -0,0 +1,139 @@
+discard """
+  targets: "c js"
+"""
+
+import std/deques
+
+block:
+  proc index(self: Deque[int], idx: Natural): int =
+    self[idx]
+
+  proc main =
+    var testDeque = initDeque[int]()
+    testDeque.addFirst(1)
+    assert testDeque.index(0) == 1
+
+  main()
+
+block:
+  var d = initDeque[int]()
+  d.addLast(1)
+  doAssert $d == "[1]"
+block:
+  var d = initDeque[string]()
+  d.addLast("1")
+  doAssert $d == """["1"]"""
+block:
+  var d = initDeque[char]()
+  d.addLast('1')
+  doAssert $d == "['1']"
+
+block:
+  var deq = initDeque[int](1)
+  deq.addLast(4)
+  deq.addFirst(9)
+  deq.addFirst(123)
+  var first = deq.popFirst()
+  deq.addLast(56)
+  assert(deq.peekLast() == 56)
+  deq.addLast(6)
+  assert(deq.peekLast() == 6)
+  var second = deq.popFirst()
+  deq.addLast(789)
+  assert(deq.peekLast() == 789)
+
+  assert first == 123
+  assert second == 9
+  assert($deq == "[4, 56, 6, 789]")
+  assert deq == [4, 56, 6, 789].toDeque
+
+  assert deq[0] == deq.peekFirst and deq.peekFirst == 4
+  #assert deq[^1] == deq.peekLast and deq.peekLast == 789
+  deq[0] = 42
+  deq[deq.len - 1] = 7
+
+  assert 6 in deq and 789 notin deq
+  assert deq.find(6) >= 0
+  assert deq.find(789) < 0
+
+  block:
+    var d = initDeque[int](1)
+    d.addLast 7
+    d.addLast 8
+    d.addLast 10
+    d.addFirst 5
+    d.addFirst 2
+    d.addFirst 1
+    d.addLast 20
+    d.shrink(fromLast = 2)
+    doAssert($d == "[1, 2, 5, 7, 8]")
+    d.shrink(2, 1)
+    doAssert($d == "[5, 7]")
+    d.shrink(2, 2)
+    doAssert d.len == 0
+
+  for i in -2 .. 10:
+    if i in deq:
+      assert deq.contains(i) and deq.find(i) >= 0
+    else:
+      assert(not deq.contains(i) and deq.find(i) < 0)
+
+  when compileOption("boundChecks"):
+    try:
+      echo deq[99]
+      assert false
+    except IndexDefect:
+      discard
+
+    try:
+      assert deq.len == 4
+      for i in 0 ..< 5: deq.popFirst()
+      assert false
+    except IndexDefect:
+      discard
+
+  # grabs some types of resize error.
+  deq = initDeque[int]()
+  for i in 1 .. 4: deq.addLast i
+  deq.popFirst()
+  deq.popLast()
+  for i in 5 .. 8: deq.addFirst i
+  assert $deq == "[8, 7, 6, 5, 2, 3]"
+
+  # Similar to proc from the documentation example
+  proc foo(a, b: Positive) = # assume random positive values for `a` and `b`.
+    var deq = initDeque[int]()
+    assert deq.len == 0
+    for i in 1 .. a: deq.addLast i
+
+    if b < deq.len: # checking before indexed access.
+      assert deq[b] == b + 1
+
+    # The following two lines don't need any checking on access due to the logic
+    # of the program, but that would not be the case if `a` could be 0.
+    assert deq.peekFirst == 1
+    assert deq.peekLast == a
+
+    while deq.len > 0: # checking if the deque is empty
+      assert deq.popFirst() > 0
+
+  #foo(0,0)
+  foo(8, 5)
+  foo(10, 9)
+  foo(1, 1)
+  foo(2, 1)
+  foo(1, 5)
+  foo(3, 2)
+
+import sets
+
+block t13310:
+  proc main() =
+    var q = initDeque[HashSet[int16]](2)
+    q.addFirst([1'i16].toHashSet)
+    q.addFirst([2'i16].toHashSet)
+    q.addFirst([3'i16].toHashSet)
+    assert $q == "[{3}, {2}, {1}]"
+
+  static:
+    main()
diff --git a/tests/stdlib/tlists.nim b/tests/stdlib/tlists.nim
index a288af781..fe814bb92 100644
--- a/tests/stdlib/tlists.nim
+++ b/tests/stdlib/tlists.nim
@@ -1,5 +1,5 @@
 discard """
-  output: '''true'''
+  targets: "c js"
 """
 
 import lists
@@ -62,6 +62,22 @@ block DoublyLinkedRingTest1:
   assert($L == "[]")
   assert(4 notin L)
 
-
-echo "true"
-
+block tlistsToString:
+  block:
+    var l = initDoublyLinkedList[int]()
+    l.append(1)
+    l.append(2)
+    l.append(3)
+    doAssert $l == "[1, 2, 3]"
+  block:
+    var l = initDoublyLinkedList[string]()
+    l.append("1")
+    l.append("2")
+    l.append("3")
+    doAssert $l == """["1", "2", "3"]"""
+  block:
+    var l = initDoublyLinkedList[char]()
+    l.append('1')
+    l.append('2')
+    l.append('3')
+    doAssert $l == """['1', '2', '3']"""