diff --git a/fuzz/ccsexp_csexp_reparse.ml b/fuzz/ccsexp_csexp_reparse.ml new file mode 100644 index 00000000..4ec7d8ea --- /dev/null +++ b/fuzz/ccsexp_csexp_reparse.ml @@ -0,0 +1,19 @@ + +let gen_sexp = + let open! Crowbar in + let (>|=) = map in + fix + (fun self -> + choose [ + ((bytes :: [] : _ gens) >|= fun s -> `Atom s); + ((list self :: []) >|= fun l -> `List l); + ]) + +let () = + Crowbar.add_test ~name:"ccsexp_csexp_reparse" [ gen_sexp ] + (fun s -> + let str = CCSexp.Canonical.to_string s in + match CCSexp.Canonical.parse_string_list str with + | Ok [s2] -> assert (s = s2) + | Ok _ -> failwith "wrong number of sexps" + | Error e -> failwith e) diff --git a/fuzz/dune b/fuzz/dune index cdc34acc..5f57001d 100644 --- a/fuzz/dune +++ b/fuzz/dune @@ -2,8 +2,5 @@ (flags (-w "+a-4-9-29-37-40-42-44-48-50-32" -g)) (names ccsexp_parse_string_does_not_crash ccutf8_string_uchar_to_bytes_is_same_as_simple_version - ) - (libraries crowbar - containers - ) -) + ccsexp_csexp_reparse) + (libraries crowbar containers))