From 8cbb200f1847b103ae1edeb8b7a4a8ae3305a0a1 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Sun, 25 Sep 2022 23:04:51 -0400 Subject: [PATCH] basic test for tracer/trace reader using bencode --- unittest/core/dune | 4 +++ unittest/core/t_trace.expected | 0 unittest/core/t_trace.ml | 49 ++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 unittest/core/dune create mode 100644 unittest/core/t_trace.expected create mode 100644 unittest/core/t_trace.ml diff --git a/unittest/core/dune b/unittest/core/dune new file mode 100644 index 00000000..ef4ca208 --- /dev/null +++ b/unittest/core/dune @@ -0,0 +1,4 @@ +(tests + (names t_trace) + (flags :standard -open Sidekick_core -open Sidekick_util) + (libraries containers sidekick.core sidekick.trace)) diff --git a/unittest/core/t_trace.expected b/unittest/core/t_trace.expected new file mode 100644 index 00000000..e69de29b diff --git a/unittest/core/t_trace.ml b/unittest/core/t_trace.ml new file mode 100644 index 00000000..534f54b1 --- /dev/null +++ b/unittest/core/t_trace.ml @@ -0,0 +1,49 @@ +open Sidekick_trace +module Str_const = Sidekick_core_logic.Str_const +module Tracer = Term.Tracer +module Trace_reader = Term.Trace_reader + +let store = Term.Store.create () + +open struct + let type_ = Term.type_ store + + let l = + CCSeq.unfold (fun ty -> Some (ty, Term.ty ty)) type_ + |> CCSeq.take 5 |> CCSeq.to_list + + let bool = Term.bool store + let a = Term.const store @@ Str_const.make "a" ~ty:bool + let a' = Term.const store @@ Str_const.make "a" ~ty:bool + let b = Term.const store @@ Str_const.make "b" ~ty:bool + let ty_b2b = Term.arrow store bool bool + let p = Term.const store @@ Str_const.make "p" ~ty:ty_b2b + let q = Term.const store @@ Str_const.make "q" ~ty:ty_b2b + let pa = Term.app store p a + let pb = Term.app store p b + let qa = Term.app store q a + let qb = Term.app store q b +end + +let buf = Buffer.create 32 +let tracer = Tracer.create ~sink:(Sink.of_buffer_using_bencode buf) () +let id_pa = Tracer.emit tracer pa +let id_pa' = Tracer.emit tracer pa;; + +assert (Entry_id.equal id_pa id_pa');; + +Printf.printf "buf containing pa: %s\n(len %d)\n%!" (Buffer.contents buf) + (String.length @@ Buffer.contents buf) + +(* now decode *) + +let trace_reader = + Trace_reader.create + ~const_decoders:[ Term.const_decoders; Str_const.const_decoders ] + ~source:(Source.of_string_using_bencode (Buffer.contents buf)) + store + +let () = + match Trace_reader.read_term trace_reader id_pa with + | Ok t -> Fmt.printf "read pa: %a@." Term.pp t + | Error e -> Fmt.printf "could not read pa: %s" e