From a3f9ee8f227c94646bcc0a2269127b4fe369ebc0 Mon Sep 17 00:00:00 2001 From: Estevan Castilho Date: Sat, 1 Aug 2026 00:31:00 +0000 Subject: Some tests for the merkle tree --- test/unit/kernel/Merkle.ml | 55 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 test/unit/kernel/Merkle.ml (limited to 'test/unit/kernel/Merkle.ml') diff --git a/test/unit/kernel/Merkle.ml b/test/unit/kernel/Merkle.ml new file mode 100644 index 0000000..a08426f --- /dev/null +++ b/test/unit/kernel/Merkle.ml @@ -0,0 +1,55 @@ +open Rnt + +module StringKey : Rnt.Kernel.Merkle.KEY with type t = string = struct + type t = string + + let encode s = String.to_bytes s |> Concepts.Representation.blob_of_bytes + let compare s1 s2 = String.compare s1 s2 |> Concepts.Ordering.of_int + let decode b = Concepts.Representation.bytes_of_blob b |> String.of_bytes |> Result.ok +end + +module Make (S : Abstract.Storage.STORAGE) (C : Helpers.Storage.CONFIGURATOR) = struct + open Alcotest + + module H = Helpers.Storage.Make (S) (C) + module T = Rnt.Kernel.Merkle.Interface (S) (StringKey) (StringKey) + + (* TODO: be a bit more comprehensive (ideally, we want to test splits as well) *) + let storage_and_lookup conn = + let v1, v2, v3, v3', bogus = + begin + let open Utilities.Result in + let* tx = S.start conn in + let* node = T.empty + |> T.insert tx "k1" "v1" + |> fmap (T.insert tx "k2" "v2") + |> fmap (T.insert tx "k3" "v3") + in + let* node' = T.insert tx "k3" "toodles" node in + let* v1 = T.lookup tx "k1" node in + let* v2 = T.lookup tx "k2" node in + let* v3 = T.lookup tx "k3" node in + let* v3' = T.lookup tx "k3" node' in + let* bogus = T.lookup tx "fnord" node in + Ok (v1, v2, v3, v3', bogus) + end + |> Helpers.condition_as_failure + in + check (option string) "" (Some "v1") v1; + check (option string) "" (Some "v2") v2; + check (option string) "" (Some "v3") v3; + check (option string) "" (Some "toodles") v3'; + check (option string) "" None bogus + + (* TODO: this will need `remove` *) + (* let determinism _conn = *) + (* () *) + + let suite prefix = + ( "merkle/" ^ prefix, + [test_case "storage-and-lookup" `Quick (H.with_connection storage_and_lookup "merkle-test")]) +end + +module LMDB = Make (Rnt.Backend.Storage.LMDB) (Helpers.Storage.LMDB_Configurator) + +let suites () = [LMDB.suite "lmdb"] -- cgit v1.2.3