summary refs log tree commit diff stats
path: root/lib
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 /lib
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 'lib')
-rw-r--r--lib/pure/collections/deques.nim108
1 files changed, 45 insertions, 63 deletions
diff --git a/lib/pure/collections/deques.nim b/lib/pure/collections/deques.nim
index 6df34bd3a..f6d0f945e 100644
--- a/lib/pure/collections/deques.nim
+++ b/lib/pure/collections/deques.nim
@@ -18,35 +18,32 @@
 ##
 ## As such, a check to see if the deque is empty is needed before any
 ## access, unless your program logic guarantees it indirectly.
-##
-## .. code-block:: Nim
-##   import deques
-##
-##   var a = initDeque[int]()
-##
-##   doAssertRaises(IndexDefect, echo a[0])
-##
-##   for i in 1 .. 5:
-##     a.addLast(10*i)
-##   assert $a == "[10, 20, 30, 40, 50]"
-##
-##   assert a.peekFirst == 10
-##   assert a.peekLast == 50
-##   assert len(a) == 5
-##
-##   assert a.popFirst == 10
-##   assert a.popLast == 50
-##   assert len(a) == 3
-##
-##   a.addFirst(11)
-##   a.addFirst(22)
-##   a.addFirst(33)
-##   assert $a == "[33, 22, 11, 20, 30, 40]"
-##
-##   a.shrink(fromFirst = 1, fromLast = 2)
-##   assert $a == "[22, 11, 20]"
-##
-##
+
+runnableExamples:
+  var a = initDeque[int]()
+
+  doAssertRaises(IndexDefect, echo a[0])
+
+  for i in 1 .. 5:
+    a.addLast(10*i)
+  assert $a == "[10, 20, 30, 40, 50]"
+
+  assert a.peekFirst == 10
+  assert a.peekLast == 50
+  assert len(a) == 5
+
+  assert a.popFirst == 10
+  assert a.popLast == 50
+  assert len(a) == 3
+
+  a.addFirst(11)
+  a.addFirst(22)
+  a.addFirst(33)
+  assert $a == "[33, 22, 11, 20, 30, 40]"
+
+  a.shrink(fromFirst = 1, fromLast = 2)
+  assert $a == "[22, 11, 20]"
+
 ## **See also:**
 ## * `lists module <lists.html>`_ for singly and doubly linked lists and rings
 ## * `channels module <channels.html>`_ for inter-thread communication
@@ -211,21 +208,14 @@ proc `[]=`*[T](deq: var Deque[T], i: BackwardsIndex, x: T) {.inline.} =
 
 iterator items*[T](deq: Deque[T]): T =
   ## Yields every element of `deq`.
-  ##
-  ## **Examples:**
-  ##
-  ## .. code-block::
-  ##   var a = initDeque[int]()
-  ##   for i in 1 .. 3:
-  ##     a.addLast(10*i)
-  ##
-  ##   for x in a:  # the same as: for x in items(a):
-  ##     echo x
-  ##
-  ##   # 10
-  ##   # 20
-  ##   # 30
-  ##
+  runnableExamples:
+    var a = initDeque[int]()
+    for i in 1 .. 3:
+      a.addLast(10*i)
+    from sugar import collect
+    doAssert collect(for x in a: x) == [10, 20, 30]
+    # same as above:
+    doAssert collect(for x in items(a): x) == [10, 20, 30]
   var i = deq.head
   for c in 0 ..< deq.count:
     yield deq.data[i]
@@ -249,21 +239,12 @@ iterator mitems*[T](deq: var Deque[T]): var T =
 
 iterator pairs*[T](deq: Deque[T]): tuple[key: int, val: T] =
   ## Yields every (position, value) of `deq`.
-  ##
-  ## **Examples:**
-  ##
-  ## .. code-block::
-  ##   var a = initDeque[int]()
-  ##   for i in 1 .. 3:
-  ##     a.addLast(10*i)
-  ##
-  ##   for k, v in pairs(a):
-  ##     echo "key: ", k, ", value: ", v
-  ##
-  ##   # key: 0, value: 10
-  ##   # key: 1, value: 20
-  ##   # key: 2, value: 30
-  ##
+  runnableExamples:
+    var a = initDeque[int]()
+    for i in 1 .. 3:
+      a.addLast(10*i)
+    from sugar import collect
+    doAssert collect(for k, v in pairs(a): (k, v)) == @[(0, 10), (1, 20), (2, 30)]
   var i = deq.head
   for c in 0 ..< deq.count:
     yield (c, deq.data[i])
@@ -274,10 +255,11 @@ proc contains*[T](deq: Deque[T], item: T): bool {.inline.} =
   ##
   ## Usually used via the ``in`` operator.
   ## It is the equivalent of ``deq.find(item) >= 0``.
-  ##
-  ## .. code-block:: Nim
-  ##   if x in q:
-  ##     assert q.contains(x)
+  runnableExamples:
+    var q = [7, 9].toDeque
+    assert 7 in q
+    assert q.contains 7
+    assert 8 notin q
   for e in deq:
     if e == item: return true
   return false