61 lines
1.5 KiB
Nim
61 lines
1.5 KiB
Nim
import std/unittest, std/os, std/parseopt
|
|
|
|
import ../src/blobsets
|
|
|
|
suite "Blob set tests":
|
|
|
|
var
|
|
randomCid = blobHash(newString(maxChunkSize))
|
|
|
|
# test "zero blob":
|
|
# doAssert(randomCid == zeroChunk)
|
|
|
|
proc randomize() =
|
|
randomCid = blobHash(randomCid.data.addr, randomCid.data.len)
|
|
|
|
proc testPath(s: BlobSet; root: string): BlobSet =
|
|
for path in walkDirRec(root):
|
|
randomize()
|
|
let
|
|
blob = randomCid
|
|
str = $randomCid
|
|
doAssert(str.toBlobid == randomCid)
|
|
result = insert(s, path, blob, 0)
|
|
let found = result.search(path)
|
|
doAssert(found == randomCid)
|
|
|
|
test "functional insert":
|
|
let
|
|
a = newBlobSet()
|
|
b = insert(a, "foo", randomCid, 0)
|
|
c = insert(b, "bar", randomCid, 0)
|
|
doAssert(contains(b, "foo"))
|
|
doAssert(contains(c, "foo"))
|
|
doAssert(contains(c, "bar"))
|
|
doAssert(not contains(a, "foo"))
|
|
doAssert(not contains(a, "bar"))
|
|
doAssert(not contains(b, "bar"))
|
|
|
|
test "apply":
|
|
var bs = newBlobSet()
|
|
for i in 1..1024:
|
|
let
|
|
name = $i
|
|
blob = blobHash name
|
|
bs = insert(bs, name, blob, 0)
|
|
for i in 1..1024:
|
|
let
|
|
name = $i
|
|
blob = blobHash name
|
|
other = bs.search(name)
|
|
doAssert(other == blob)
|
|
|
|
test "sets":
|
|
var s = newBlobSet()
|
|
for kind, key, val in getopt():
|
|
if kind == cmdArgument:
|
|
s = s.testPath(key)
|
|
if s.isEmpty:
|
|
s = s.testPath(".")
|
|
echo s.leafCount, " leaves in ", s.nodeCount, " nodes"
|