nondescript/tests/hashtable.nim

54 lines
1.3 KiB
Nim

import ../types/hashtable
import strformat
proc hash*(str: string): int =
var hash = 2166136261'u32
for i in countup(0, str.len - 1):
hash = hash xor (str[i]).uint32
hash *= 16777619
return hash.int
proc testHashtables* =
var tbl = newTable[string, int]()
var val: int
assert tbl.tableSet("hello", 1) == false
assert tbl.tableGet("hello", val) == true
assert val == 1
assert tbl.tableSet("hello", 4) == true
assert tbl.tableGet("hello", val) == true
assert val == 4
assert tbl.tableGet("hellw", val) == false
assert val == 4
assert tbl.tableDelete("hello") == true
val = 0
assert tbl.tableGet("hello", val) == false
assert val == 0
for i in countup(0, 10000):
assert tbl.tableSet($i, i) == false
assert tbl.tableget($i, val) == true
assert val == i
assert tbl.tableSet($i, i * 2) == true
assert tbl.tableget($i, val) == true
assert val == i * 2
assert tbl.tableSet($i, i * 4) == true
assert tbl.tableget($i, val) == true
assert val == i * 4
if i mod 5 == 0:
assert tbl.tableDelete($i) == true
assert tbl.tableDelete($i) == false
for i in countup(0, 10000):
if i mod 5 == 0:
assert tbl.tableGet($i, val) == false
else:
assert tbl.tableGet($i, val) == true
assert val == i * 4
tbl.free()
echo "Hashtable test finished"