From 9df429005da88685f1de5e6d7786837875d8d398 Mon Sep 17 00:00:00 2001 From: Jan Midtgaard Date: Wed, 9 Jul 2025 12:25:39 +0200 Subject: [PATCH 1/3] Patch CBor roundtrip property to hold for nan's too --- tests/core/t_cbor.ml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tests/core/t_cbor.ml b/tests/core/t_cbor.ml index 17527159..bf45f6c3 100644 --- a/tests/core/t_cbor.ml +++ b/tests/core/t_cbor.ml @@ -101,10 +101,25 @@ let rec shrink (c : Cbor.t) : Cbor.t Q.Iter.t = let arb = Q.make ~shrink ~print:Cbor.to_string_diagnostic gen_c;; +let rec eq_c c c' = match c,c' with + | `Null, `Null + | `Undefined, `Undefined -> true + | `Simple i, `Simple i' -> Int.equal i i' + | `Bool b, `Bool b' -> Bool.equal b b' + | `Int i, `Int i' -> Int64.equal i i' + | `Float f, `Float f' -> Float.equal f f' + | `Bytes s, `Bytes s' -> String.equal s s' + | `Text t, `Text t' -> String.equal t t' + | `Array a, `Array a' -> List.equal eq_c a a' + | `Map m, `Map m' -> + List.equal (fun (t0,t1) (t0',t1') -> eq_c t0 t0' && eq_c t1 t1') m m' + | `Tag (i,t), `Tag (i',t') -> Int.equal i i' && eq_c t t' + | _ -> false;; + q ~count:1_000 ~long_factor:10 arb @@ fun c -> let s = Cbor.encode c in let c' = Cbor.decode_exn s in -if not (c = c') then +if not (eq_c c c') then Q.Test.fail_reportf "@[roundtrip failed:@ from %a@ to %a@]" Cbor.pp_diagnostic c Cbor.pp_diagnostic c'; true From 0290aa975436f91dac386faa3cd5160da3bbd30c Mon Sep 17 00:00:00 2001 From: Jan Midtgaard Date: Wed, 9 Jul 2025 15:48:24 +0200 Subject: [PATCH 2/3] Use CCList.equal for backward compatibility --- tests/core/t_cbor.ml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/core/t_cbor.ml b/tests/core/t_cbor.ml index bf45f6c3..b1535a0f 100644 --- a/tests/core/t_cbor.ml +++ b/tests/core/t_cbor.ml @@ -110,9 +110,9 @@ let rec eq_c c c' = match c,c' with | `Float f, `Float f' -> Float.equal f f' | `Bytes s, `Bytes s' -> String.equal s s' | `Text t, `Text t' -> String.equal t t' - | `Array a, `Array a' -> List.equal eq_c a a' + | `Array a, `Array a' -> CCList.equal eq_c a a' | `Map m, `Map m' -> - List.equal (fun (t0,t1) (t0',t1') -> eq_c t0 t0' && eq_c t1 t1') m m' + CCList.equal (fun (t0,t1) (t0',t1') -> eq_c t0 t0' && eq_c t1 t1') m m' | `Tag (i,t), `Tag (i',t') -> Int.equal i i' && eq_c t t' | _ -> false;; From 1a114599915edab0cea476ebab14156e9c9c8dc8 Mon Sep 17 00:00:00 2001 From: Jan Midtgaard Date: Wed, 9 Jul 2025 16:06:47 +0200 Subject: [PATCH 3/3] Auto-format code --- tests/core/t_cbor.ml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/tests/core/t_cbor.ml b/tests/core/t_cbor.ml index b1535a0f..391cfae9 100644 --- a/tests/core/t_cbor.ml +++ b/tests/core/t_cbor.ml @@ -99,11 +99,11 @@ let rec shrink (c : Cbor.t) : Cbor.t Q.Iter.t = let+ s = Q.Shrink.string s in `Bytes s -let arb = Q.make ~shrink ~print:Cbor.to_string_diagnostic gen_c;; +let arb = Q.make ~shrink ~print:Cbor.to_string_diagnostic gen_c -let rec eq_c c c' = match c,c' with - | `Null, `Null - | `Undefined, `Undefined -> true +let rec eq_c c c' = + match c, c' with + | `Null, `Null | `Undefined, `Undefined -> true | `Simple i, `Simple i' -> Int.equal i i' | `Bool b, `Bool b' -> Bool.equal b b' | `Int i, `Int i' -> Int64.equal i i' @@ -112,9 +112,10 @@ let rec eq_c c c' = match c,c' with | `Text t, `Text t' -> String.equal t t' | `Array a, `Array a' -> CCList.equal eq_c a a' | `Map m, `Map m' -> - CCList.equal (fun (t0,t1) (t0',t1') -> eq_c t0 t0' && eq_c t1 t1') m m' - | `Tag (i,t), `Tag (i',t') -> Int.equal i i' && eq_c t t' - | _ -> false;; + CCList.equal (fun (t0, t1) (t0', t1') -> eq_c t0 t0' && eq_c t1 t1') m m' + | `Tag (i, t), `Tag (i', t') -> Int.equal i i' && eq_c t t' + | _ -> false +;; q ~count:1_000 ~long_factor:10 arb @@ fun c -> let s = Cbor.encode c in