more tests

This commit is contained in:
Simon Cruanes 2022-07-04 22:04:50 -04:00
parent d9717095ef
commit e01b758de8
No known key found for this signature in database
GPG key ID: EBFFF6F283F3A2B4

View file

@ -38,6 +38,10 @@ q (Q.list Q.small_int) (fun l ->
q Q.small_int (fun size -> create ~size true |> cardinal = size);; q Q.small_int (fun size -> create ~size true |> cardinal = size);;
q Q.small_int (fun size ->
create ~size true |> to_sorted_list = List.init size CCFun.id)
;;
t ~name:(spf "line %d" __LINE__) @@ fun () -> t ~name:(spf "line %d" __LINE__) @@ fun () ->
let bv1 = CCBV.create ~size:87 true in let bv1 = CCBV.create ~size:87 true in
assert_equal ~printer:string_of_int 87 (CCBV.cardinal bv1); assert_equal ~printer:string_of_int 87 (CCBV.cardinal bv1);
@ -536,6 +540,7 @@ t ~name:(spf "line %d" __LINE__) (fun () ->
module Op = struct module Op = struct
type t = type t =
| Resize of int | Resize of int
| Resize_min_mem of int
| Set of int | Set of int
| Reset of int | Reset of int
| Set_bool of int * bool | Set_bool of int * bool
@ -546,10 +551,12 @@ module Op = struct
| Negate | Negate
| Inter of int list | Inter of int list
| Union of int list | Union of int list
| Diff of int list
let apply (self : CCBV.t) (op : t) : unit = let apply (self : CCBV.t) (op : t) : unit =
match op with match op with
| Resize n -> resize self n | Resize n -> resize self n
| Resize_min_mem n -> resize_minimize_memory self n
| Set i -> set self i | Set i -> set self i
| Reset i -> reset self i | Reset i -> reset self i
| Set_bool (i, b) -> set_bool self i b | Set_bool (i, b) -> set_bool self i b
@ -564,15 +571,22 @@ module Op = struct
| Union l -> | Union l ->
let bv' = of_list l in let bv' = of_list l in
union_into ~into:self bv' union_into ~into:self bv'
| Diff l ->
let bv' = of_list l in
diff_into ~into:self bv'
let post_size sz (self : t) = let post_size sz (self : t) =
match self with match self with
| Resize i -> i | Resize i -> i
| Resize_min_mem i -> i
| Set j | Reset j | Set_bool (j, _) | Flip j -> max sz (j + 1) | Set j | Reset j | Set_bool (j, _) | Flip j -> max sz (j + 1)
| Clear -> sz | Clear -> sz
| Clear_and_shrink -> 0 | Clear_and_shrink -> 0
| Filter_is_odd | Negate -> sz | Filter_is_odd | Negate -> sz
| Inter l | Union l -> List.fold_left max sz l | Diff _ -> sz
| Inter [] | Union [] -> sz
| Union l -> max sz (succ (List.fold_left max 0 l))
| Inter l -> min sz (succ (List.fold_left max 0 l))
let gen_ size : t Q.Gen.t = let gen_ size : t Q.Gen.t =
let open Q.Gen in let open Q.Gen in
@ -620,6 +634,7 @@ module Op = struct
let module S = Q.Shrink in let module S = Q.Shrink in
function function
| Resize i -> S.int i >|= fun i -> Resize i | Resize i -> S.int i >|= fun i -> Resize i
| Resize_min_mem i -> S.int i >|= fun i -> Resize_min_mem i
| Set i -> S.int i >|= fun i -> Resize i | Set i -> S.int i >|= fun i -> Resize i
| Reset i -> S.int i >|= fun i -> Resize i | Reset i -> S.int i >|= fun i -> Resize i
| Set_bool (i, b) -> | Set_bool (i, b) ->
@ -634,11 +649,13 @@ module Op = struct
| Clear | Clear_and_shrink | Filter_is_odd | Negate -> empty | Clear | Clear_and_shrink | Filter_is_odd | Negate -> empty
| Inter l -> S.list ~shrink:S.int l >|= fun l -> Inter l | Inter l -> S.list ~shrink:S.int l >|= fun l -> Inter l
| Union l -> S.list ~shrink:S.int l >|= fun l -> Union l | Union l -> S.list ~shrink:S.int l >|= fun l -> Union l
| Diff l -> S.list ~shrink:S.int l >|= fun l -> Diff l
let pp out = let pp out =
let fpf = Format.fprintf in let fpf = Format.fprintf in
function function
| Resize i -> fpf out "resize %d" i | Resize i -> fpf out "resize %d" i
| Resize_min_mem i -> fpf out "resize_minimize_memory %d" i
| Set i -> fpf out "set %d" i | Set i -> fpf out "set %d" i
| Reset i -> fpf out "reset %d" i | Reset i -> fpf out "reset %d" i
| Set_bool (i, b) -> fpf out "set_bool(%d,%b)" i b | Set_bool (i, b) -> fpf out "set_bool(%d,%b)" i b
@ -647,8 +664,9 @@ module Op = struct
| Clear_and_shrink -> fpf out "clear_and_shrink" | Clear_and_shrink -> fpf out "clear_and_shrink"
| Filter_is_odd -> fpf out "filter_is_odd" | Filter_is_odd -> fpf out "filter_is_odd"
| Negate -> fpf out "negate" | Negate -> fpf out "negate"
| Inter l -> fpf out "inter %a" CCFormat.(Dump.list int) l | Inter l -> fpf out "inter %a" ppli l
| Union l -> fpf out "union %a" CCFormat.(Dump.list int) l | Union l -> fpf out "union %a" ppli l
| Diff l -> fpf out "diff %a" ppli l
let arb_l = let arb_l =
let rec gen_l sz n = let rec gen_l sz n =
@ -687,7 +705,7 @@ module Ref_ = struct
let rec apply_op (self : t) (op : Op.t) = let rec apply_op (self : t) (op : Op.t) =
match op with match op with
| Resize n -> | Resize n | Resize_min_mem n ->
self.set <- Intset.filter (fun x -> x < n) self.set; self.set <- Intset.filter (fun x -> x < n) self.set;
self.size <- n self.size <- n
| Set i -> | Set i ->
@ -729,6 +747,9 @@ module Ref_ = struct
let s' = Intset.of_list l in let s' = Intset.of_list l in
self.size <- List.fold_left (fun s x -> max s (x + 1)) self.size l; self.size <- List.fold_left (fun s x -> max s (x + 1)) self.size l;
self.set <- Intset.union self.set s' self.set <- Intset.union self.set s'
| Diff l ->
let s' = Intset.of_list l in
self.set <- Intset.diff self.set s'
end end
;; ;;