54 lines
1.3 KiB
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"
|