From f979af98d36f6d2b3685671c2771fb8956c53d81 Mon Sep 17 00:00:00 2001 From: Nocturn9x Date: Wed, 16 Mar 2022 13:39:32 +0100 Subject: [PATCH] Added test for find --- src/private/queues/linked.nim | 18 ++++++++--------- tests/linked.nim | 38 +++++++++++++++++++++-------------- 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/src/private/queues/linked.nim b/src/private/queues/linked.nim index 42ab839..a754411 100644 --- a/src/private/queues/linked.nim +++ b/src/private/queues/linked.nim @@ -48,7 +48,7 @@ proc newDequeNode[T](val: T): DequeNode[T] = result.val = val -proc newLinkedDeque*[T](maxSize: int = 0): LinkedDeque[T] = +proc newLinkedDeque*[T](maxSize: int = 0): LinkedDeque[T] {.raises: [ValueError].} = ## Initializes a new, empty ## LinkedDeque object with an ## optional size limit. A maxSize @@ -80,7 +80,7 @@ proc maxSize*[T](self: LinkedDeque[T]): int = result = self.maxSize -proc getNode[T](self: LinkedDeque[T], i: int): DequeNode[T] {.raises: IndexDefect.} = +proc getNode[T](self: LinkedDeque[T], i: int): DequeNode[T] {.raises: [IndexDefect, ValueError].} = ## Low level method for indexing and getting ## a node object back if self.high() == -1: @@ -108,30 +108,30 @@ proc getNode[T](self: LinkedDeque[T], i: int): DequeNode[T] {.raises: IndexDefec dec(pos) -proc `[]`*[T](self: LinkedDeque[T], i: int): T {.raises: IndexDefect.} = +proc `[]`*[T](self: LinkedDeque[T], i: int): T {.raises: [IndexDefect, ValueError].} = ## Implements indexing into the queue result = self.getNode(i).val -proc `[]=`*[T](self: LinkedDeque[T], i: int, val: T) {.raises: IndexDefect.} = +proc `[]=`*[T](self: LinkedDeque[T], i: int, val: T) {.raises: [IndexDefect, ValueError].} = ## Sets element at position i ## to the given value self[i].val = val -proc `[]`*[T](self: LinkedDeque[T], i: BackwardsIndex): T {.raises: IndexDefect.} = +proc `[]`*[T](self: LinkedDeque[T], i: BackwardsIndex): T {.raises: [IndexDefect, ValueError].} = ## Implements indexing into the queue ## with backwards indeces result = self[self.size - int(i)] -proc `[]=`*[T](self: LinkedDeque[T], i: BackwardsIndex, val: T) {.raises: IndexDefect.} = +proc `[]=`*[T](self: LinkedDeque[T], i: BackwardsIndex, val: T) {.raises: [IndexDefect, ValueError].} = ## Sets element at backwards ## position i to the given value self[self.size - int(i)] = val -proc pop*[T](self: LinkedDeque[T], pos: int = 0): T {.raises: IndexDefect.} = +proc pop*[T](self: LinkedDeque[T], pos: int = 0): T {.raises: [IndexDefect, ValueError].} = ## Pops an element off the deque ## at the given index (default 0). ## The queue is optimized for popping @@ -155,7 +155,7 @@ proc pop*[T](self: LinkedDeque[T], pos: int = 0): T {.raises: IndexDefect.} = dec(self.size) -proc pop*[T](self: LinkedDeque[T], pos: BackwardsIndex): T {.raises: IndexDefect.} = +proc pop*[T](self: LinkedDeque[T], pos: BackwardsIndex): T {.raises: [IndexDefect, ValueError].} = ## Same as self.pop but for backwards indeces result = self.pop(self.size - int(pos)) @@ -207,7 +207,7 @@ proc addLeft*[T](self: LinkedDeque[T], val: T) = inc(self.size) -proc insert*[T](self: LinkedDeque[T], pos: int, val: T) {.raises: IndexDefect.} = +proc insert*[T](self: LinkedDeque[T], pos: int, val: T) {.raises: [IndexDefect, ValueError].} = ## Inserts the given value at the given ## position. When pos equals 0, this proc is equivalent ## to addLeft. In all other cases, all items are diff --git a/tests/linked.nim b/tests/linked.nim index df37aa0..31f4c1d 100644 --- a/tests/linked.nim +++ b/tests/linked.nim @@ -19,18 +19,18 @@ import ../src/nimdeque when isMainModule: - const size = 10 - const benchSize = 500000 + const size = 5000 + const benchSize = 50000 echo &"Running tests with queue of size {size}" var deque = newLinkedDeque[int]() var testStart = cpuTime() - echo &"\t- Checking add()" + echo &"\t- Testing add()" for i in countup(0, size - 1, 1): deque.add(i) doAssert deque.len() == size - echo "\t- Checking iteration" + echo "\t- Testing iteration" for i in countup(0, size - 1, 1): doAssert deque[i] == i for i, e in deque: @@ -42,17 +42,17 @@ when isMainModule: for i, e in deque.reversedPairs(): doAssert size - i - 1 == e - echo "\t- Checking contains()" + echo "\t- Testing contains()" for i in countup(0, size - 1, 1): doAssert i in deque doAssert 48574857 notin deque doAssert -0xfffffff notin deque - echo "\t- Checking pop(0)" + echo "\t- Testing pop(0)" doAssert deque.pop() == 0 doAssert deque.len() == size - 1 doAssert deque[0] == 1 - echo "\t- Checking pop(^1)" + echo "\t- Testing pop(^1)" doAssert deque.pop(deque.high()) == size - 1 doAssert deque.len() == size - 2 doAssert deque[deque.high()] == size - 2 @@ -61,7 +61,7 @@ when isMainModule: for i in countup(0, size - 3, 1): doAssert deque[i] == i + 1 - echo "\t- Checking addLeft()" + echo "\t- Testing addLeft()" deque.addLeft(0) doAssert deque.len() == size - 1 doAssert deque[0] == 0 @@ -70,21 +70,21 @@ when isMainModule: for i in countup(0, size - 2, 1): doAssert deque[i] == i - echo "\t- Checking insert(3)" + echo "\t- Testing insert(3)" var oldLen = deque.len() deque.insert(3, 69420) doAssert oldLen + 1 == deque.len() doAssert deque.pop(3) == 69420 doAssert deque.len() == oldLen - echo &"\t- Checking insert({size - 2})" + echo &"\t- Testing insert({size - 2})" oldLen = deque.len() deque.insert(size - 2, 0x42362) doAssert oldLen + 1 == deque.len() doAssert deque.pop(size - 2) == 0x42362 doAssert deque.len() == oldLen - echo &"\t- Checking insert({size div 2})" + echo &"\t- Testing insert({size div 2})" oldLen = deque.len() deque.insert(size div 2, 0xf7102) doAssert oldLen + 1 == deque.len() @@ -93,20 +93,20 @@ when isMainModule: randomize() let idx = rand(size - 1) - echo &"\t- Checking insert({idx})" + echo &"\t- Testing insert({idx})" oldLen = deque.len() deque.insert(idx, 0xff) doAssert oldLen + 1 == deque.len() doAssert deque.pop(idx) == 0xff doAssert deque.len() == oldLen - echo "\t- Checking backwards indeces" + echo "\t- Testing backwards indeces" for i in countdown(deque.high(), 1): doAssert deque[^i] == deque[deque.len() - i] deque.add(deque.pop(^1)) doAssert deque[deque.high()] == deque[^1] - echo &"\t- Checking queue with maxSize {size div 2}" + echo &"\t- Testing queue with maxSize {size div 2}" var queue = newLinkedDeque[int](size div 2) for i in countup(0, (size div 2) - 1): queue.add(i) @@ -150,6 +150,14 @@ when isMainModule: # but ¯\_(ツ)_/¯ who cares b.extend(a) doAssert a == b + + echo "\t- Testing find()" + for i in countup(0, size - 1): + deque.add(i) + doAssert deque.find(size - 1) == size - 1 + doAssert deque.find(0) == 0 + doAssert deque.find(size) == -1 + doAssert deque.find(size div 2) == size div 2 echo &"Tests completed in {cpuTime() - testStart} seconds" ## End of tests, start of benchmark @@ -326,5 +334,5 @@ when isMainModule: start = cpuTime() q2 = @[] - echo &"Total benchmark time: {cpuTime() - benchStart}" + echo &"\nTotal benchmark time: {cpuTime() - benchStart}" echo &"Total execution time: {cpuTime() - testStart}" \ No newline at end of file