mirror of
https://github.com/nim-lang/Nim.git
synced 2026-08-31 02:43:41 +00:00
improve tests for collections (#16328)
* improve tests for collections * remove remaining code blocks in deques.nim * improve runnableExamples
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
139
tests/stdlib/tdeques.nim
Normal file
139
tests/stdlib/tdeques.nim
Normal file
@@ -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()
|
||||
@@ -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']"""
|
||||
|
||||
Reference in New Issue
Block a user