diff --git a/src/sexp/CCSexp.ml b/src/sexp/CCSexp.ml index 201ab78b..b9c5f05c 100644 --- a/src/sexp/CCSexp.ml +++ b/src/sexp/CCSexp.ml @@ -61,6 +61,9 @@ module Make(Sexp : SEXP) = struct false with Exit -> true + (* empty atoms must be escaped *) + let _must_escape s = String.length s = 0 || _must_escape s + let rec to_buf b t = Sexp.match_ t ~atom:(fun s -> @@ -358,6 +361,14 @@ include (Make(struct *) +(*$inject + let sexp_bijective s = to_string s |> parse_string = Ok s +*) + +(*$T + sexp_bijective (`List [`Atom ""]) +*) + (*$inject let sexp_gen = let mkatom a = `Atom a and mklist l = `List l in @@ -384,15 +395,10 @@ include (Make(struct | `List l -> Q.Iter.map mklist (Q.Shrink.list ~shrink l) in Q.make ~print ~small ~shrink gen - - let rec sexp_valid = function - | `Atom "" -> false - | `Atom _ -> true - | `List l -> List.for_all sexp_valid l *) (*$Q & ~count:100 - sexp_gen (fun s -> sexp_valid s ==> (to_string s |> parse_string = Ok s)) + sexp_gen sexp_bijective *) let atom s : t = `Atom s