more tests

This commit is contained in:
Simon Cruanes 2024-01-07 23:30:12 -05:00
parent b9cc91fb96
commit dd552fe334
No known key found for this signature in database
GPG key ID: EBFFF6F283F3A2B4

View file

@ -84,6 +84,11 @@ module Ref_impl = struct
let to_seq = CCSeq.of_list let to_seq = CCSeq.of_list
let add_list l l2 : _ t = List.append l l2 let add_list l l2 : _ t = List.append l l2
let to_list_via_reviter m =
let l = ref [] in
iter_rev (fun x -> l := x :: !l) m;
!l
let pop_exn l = let pop_exn l =
match List.rev l with match List.rev l with
| x :: tl -> x, List.rev tl | x :: tl -> x, List.rev tl
@ -103,6 +108,16 @@ module Ref_impl = struct
| _ :: _ -> true | _ :: _ -> true
end end
let to_list_via_iter m =
let l = ref [] in
iter (fun x -> l := x :: !l) m;
List.rev !l
let to_list_via_reviter m =
let l = ref [] in
iter_rev (fun x -> l := x :: !l) m;
!l
module Op = struct module Op = struct
type 'a t = type 'a t =
| Push of 'a | Push of 'a
@ -114,6 +129,8 @@ module Op = struct
| Check_is_empty | Check_is_empty
| Check_len | Check_len
| Check_to_list | Check_to_list
| Check_iter
| Check_rev_iter
| Check_to_gen | Check_to_gen
| Check_last | Check_last
@ -128,6 +145,8 @@ module Op = struct
| Check_is_empty :: tl | Check_is_empty :: tl
| Check_len :: tl | Check_len :: tl
| Check_to_list :: tl | Check_to_list :: tl
| Check_iter :: tl
| Check_rev_iter :: tl
| Check_last :: tl | Check_last :: tl
| Check_to_gen :: tl -> | Check_to_gen :: tl ->
loop size tl loop size tl
@ -144,6 +163,8 @@ module Op = struct
| Check_is_empty -> "check_is_empty" | Check_is_empty -> "check_is_empty"
| Check_len -> "check_len" | Check_len -> "check_len"
| Check_to_list -> "check_to_list" | Check_to_list -> "check_to_list"
| Check_iter -> "check_rev_iter"
| Check_rev_iter -> "check_rev_iter"
| Check_to_gen -> "check_to_gen" | Check_to_gen -> "check_to_gen"
| Check_last -> "check_last" | Check_last -> "check_last"
@ -155,7 +176,7 @@ module Op = struct
| Pop -> empty | Pop -> empty
| Add_list l -> list ~shrink:shrink_x l >|= fun x -> Add_list x | Add_list l -> list ~shrink:shrink_x l >|= fun x -> Add_list x
| Check_get _ | Check_choose | Check_is_empty | Check_len | Check_to_list | Check_get _ | Check_choose | Check_is_empty | Check_len | Check_to_list
| Check_to_gen | Check_last -> | Check_to_gen | Check_last | Check_rev_iter | Check_iter ->
empty empty
let shrink_l shrink_x : _ t list Q.Shrink.t = let shrink_l shrink_x : _ t list Q.Shrink.t =
@ -239,6 +260,10 @@ let check_ops ~show_x (ops : 'a Op.t list) : unit =
| Op.Check_len -> if length !cur <> Ref_impl.length !cur_ref then fail () | Op.Check_len -> if length !cur <> Ref_impl.length !cur_ref then fail ()
| Op.Check_to_list -> | Op.Check_to_list ->
if to_list !cur <> Ref_impl.to_list !cur_ref then fail () if to_list !cur <> Ref_impl.to_list !cur_ref then fail ()
| Op.Check_iter ->
if to_list_via_iter !cur <> Ref_impl.to_list !cur_ref then fail ()
| Op.Check_rev_iter ->
if to_list !cur <> Ref_impl.to_list !cur_ref then fail ()
| Op.Check_choose -> | Op.Check_choose ->
if Option.is_some (choose !cur) <> Ref_impl.choose !cur_ref then fail () if Option.is_some (choose !cur) <> Ref_impl.choose !cur_ref then fail ()
| Op.Check_last -> | Op.Check_last ->
@ -253,6 +278,6 @@ let check_ops ~show_x (ops : 'a Op.t list) : unit =
() ()
let () = let () =
q arb_ops_int (fun ops -> q ~count:1000 ~name:"ops" ~long_factor:10 arb_ops_int (fun ops ->
check_ops ~show_x:(spf "%d") ops; check_ops ~show_x:(spf "%d") ops;
true) true)