From c70c51f5b3a87e6d4acdd80fea9d071c0f8ebdfb Mon Sep 17 00:00:00 2001 From: Ben Date: Tue, 28 May 2024 10:56:16 +0200 Subject: [PATCH] Concurrent iterator tests --- tests/test.nim | 122 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 118 insertions(+), 4 deletions(-) diff --git a/tests/test.nim b/tests/test.nim index 7143e46..f0d9ff7 100644 --- a/tests/test.nim +++ b/tests/test.nim @@ -44,7 +44,6 @@ proc execTool(args: varargs[string]): tuple[output: string, exitCode: int] = checkpoint(result.output) suite "leveldb": - setup: let env = leveldb_create_default_env() let dbName = $(leveldb_env_get_test_directory(env)) @@ -206,7 +205,6 @@ suite "leveldb": check(toSeq(nc.iter()) == @[("a", "1")]) suite "leveldb queryIter": - setup: let env = leveldb_create_default_env() let dbName = $(leveldb_env_get_test_directory(env)) @@ -332,8 +330,125 @@ suite "leveldb queryIter": iter.next() == empty iter.finished -suite "package": + test "concurrent iterators - 1": + let + iter1 = db.queryIter() + iter2 = db.queryIter() + check: + # 1, then 2 + not iter1.finished + iter1.next() == (k1, v1) + + not iter2.finished + iter2.next() == (k1, v1) + + # 1, 1, then 2, 2 + not iter1.finished + iter1.next() == (k2, v2) + not iter1.finished + iter1.next() == (k3, v3) + + not iter2.finished + iter2.next() == (k2, v2) + not iter2.finished + iter2.next() == (k3, v3) + + # finish 1, then finish 2 + not iter1.finished + iter1.next() == empty + + not iter2.finished + iter2.next() == empty + + iter1.finished + iter2.finished + + test "concurrent iterators - 2": + let + iter1 = db.queryIter() + iter2 = db.queryIter() + + check: + # 1, then 2 + not iter1.finished + iter1.next() == (k1, v1) + + not iter2.finished + iter2.next() == (k1, v1) + + # finish 1 + not iter1.finished + iter1.next() == (k2, v2) + not iter1.finished + iter1.next() == (k3, v3) + not iter1.finished + iter1.next() == empty + iter1.finished + + # finish 2 + not iter2.finished + iter2.next() == (k2, v2) + not iter2.finished + iter2.next() == (k3, v3) + not iter2.finished + iter2.next() == empty + iter2.finished + + test "concurrent iterators - dispose": + let + iter1 = db.queryIter() + iter2 = db.queryIter() + + check: + # 1, then 2 + not iter1.finished + iter1.next() == (k1, v1) + + not iter2.finished + iter2.next() == (k1, v1) + + # dispose 1 + iter1.dispose() + + check: + iter1.finished + iter1.next() == empty + iter1.finished + + # finish 2 + not iter2.finished + iter2.next() == (k2, v2) + not iter2.finished + iter2.next() == (k3, v3) + not iter2.finished + iter2.next() == empty + iter2.finished + + test "modify while iterating": + let + iter = db.queryIter() + + check: + not iter.finished + iter.next() == (k1, v1) + not iter.finished + iter.next() == (k2, v2) + + # insert + let + k4 = "k4" + v4 = "v4" + db.put(k4, v4) + + check: + not iter.finished + iter.next() == (k3, v3) + not iter.finished + iter.next() == empty + iter.finished + +suite "package": setup: removeDir(tmpDir) @@ -353,7 +468,6 @@ suite "package": check output.contains("leveldb works.") suite "tool": - setup: removeDir(tmpDir)