mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
Fix tests
This commit is contained in:
parent
0796a9a8d4
commit
35c2d0ed54
8 changed files with 54 additions and 50 deletions
|
|
@ -304,13 +304,13 @@ let lookup ~cmp k a =
|
|||
with Not_found -> None
|
||||
|
||||
(*$T
|
||||
lookup 2 [|0;1;2;3;4;5|] = Some 2
|
||||
lookup 4 [|0;1;2;3;4;5|] = Some 4
|
||||
lookup 0 [|1;2;3;4;5|] = None
|
||||
lookup 6 [|1;2;3;4;5|] = None
|
||||
lookup 3 [| |] = None
|
||||
lookup 1 [| 1 |] = Some 0
|
||||
lookup 2 [| 1 |] = None
|
||||
lookup ~cmp:CCInt.compare 2 [|0;1;2;3;4;5|] = Some 2
|
||||
lookup ~cmp:CCInt.compare 4 [|0;1;2;3;4;5|] = Some 4
|
||||
lookup ~cmp:CCInt.compare 0 [|1;2;3;4;5|] = None
|
||||
lookup ~cmp:CCInt.compare 6 [|1;2;3;4;5|] = None
|
||||
lookup ~cmp:CCInt.compare 3 [| |] = None
|
||||
lookup ~cmp:CCInt.compare 1 [| 1 |] = Some 0
|
||||
lookup ~cmp:CCInt.compare 2 [| 1 |] = None
|
||||
*)
|
||||
|
||||
let bsearch ~cmp k a =
|
||||
|
|
@ -332,13 +332,13 @@ let bsearch ~cmp k a =
|
|||
| _ -> aux 0 (n-1)
|
||||
|
||||
(*$T bsearch
|
||||
bsearch 3 [|1; 2; 2; 3; 4; 10|] = `At 3
|
||||
bsearch 5 [|1; 2; 2; 3; 4; 10|] = `Just_after 4
|
||||
bsearch 1 [|1; 2; 5; 5; 11; 12|] = `At 0
|
||||
bsearch 12 [|1; 2; 5; 5; 11; 12|] = `At 5
|
||||
bsearch 10 [|1; 2; 2; 3; 4; 9|] = `All_lower
|
||||
bsearch 0 [|1; 2; 2; 3; 4; 9|] = `All_bigger
|
||||
bsearch 3 [| |] = `Empty
|
||||
bsearch ~cmp:CCInt.compare 3 [|1; 2; 2; 3; 4; 10|] = `At 3
|
||||
bsearch ~cmp:CCInt.compare 5 [|1; 2; 2; 3; 4; 10|] = `Just_after 4
|
||||
bsearch ~cmp:CCInt.compare 1 [|1; 2; 5; 5; 11; 12|] = `At 0
|
||||
bsearch ~cmp:CCInt.compare 12 [|1; 2; 5; 5; 11; 12|] = `At 5
|
||||
bsearch ~cmp:CCInt.compare 10 [|1; 2; 2; 3; 4; 9|] = `All_lower
|
||||
bsearch ~cmp:CCInt.compare 0 [|1; 2; 2; 3; 4; 9|] = `All_bigger
|
||||
bsearch ~cmp:CCInt.compare 3 [| |] = `Empty
|
||||
*)
|
||||
|
||||
let (>>=) a f = flat_map f a
|
||||
|
|
|
|||
|
|
@ -353,7 +353,7 @@ let lookup ~cmp k a =
|
|||
with Not_found -> None
|
||||
|
||||
(*$=
|
||||
(Some 1) (lookup "c" (make [| "a"; "b"; "c" |] 1 2))
|
||||
(Some 1) (lookup ~cmp:CCString.compare "c" (make [| "a"; "b"; "c" |] 1 2))
|
||||
*)
|
||||
|
||||
let bsearch ~cmp k a =
|
||||
|
|
|
|||
|
|
@ -991,11 +991,11 @@ let remove_one ~eq x l =
|
|||
|
||||
(*$Q
|
||||
Q.(pair int (list int)) (fun (x,l) -> \
|
||||
remove_one x (add_nodup x l) = l)
|
||||
remove_one ~eq:CCInt.equal x (add_nodup ~eq:CCInt.equal x l) = l)
|
||||
Q.(pair int (list int)) (fun (x,l) -> \
|
||||
mem x l || List.length (add_nodup x l) = List.length l + 1)
|
||||
mem ~eq:CCInt.equal x l || List.length (add_nodup ~eq:CCInt.equal x l) = List.length l + 1)
|
||||
Q.(pair int (list int)) (fun (x,l) -> \
|
||||
not (mem x l) || List.length (remove_one x l) = List.length l - 1)
|
||||
not (mem ~eq:CCInt.equal x l) || List.length (remove_one ~eq:CCInt.equal x l) = List.length l - 1)
|
||||
*)
|
||||
|
||||
let subset ~eq l1 l2 =
|
||||
|
|
@ -1011,12 +1011,12 @@ let uniq ~eq l =
|
|||
in uniq eq [] l
|
||||
|
||||
(*$T
|
||||
uniq [1;1;2;2;3;4;4;2;4;1;5] |> List.sort Pervasives.compare = [1;2;3;4;5]
|
||||
uniq ~eq:CCInt.equal [1;1;2;2;3;4;4;2;4;1;5] |> List.sort Pervasives.compare = [1;2;3;4;5]
|
||||
*)
|
||||
|
||||
(*$Q
|
||||
Q.(small_list small_int) (fun l -> \
|
||||
sort_uniq l = (uniq l |> sort Pervasives.compare))
|
||||
sort_uniq ~cmp:CCInt.compare l = (uniq ~eq:CCInt.equal l |> sort Pervasives.compare))
|
||||
*)
|
||||
|
||||
let union ~eq l1 l2 =
|
||||
|
|
@ -1027,7 +1027,7 @@ let union ~eq l1 l2 =
|
|||
in union eq [] l1 l2
|
||||
|
||||
(*$T
|
||||
union [1;2;4] [2;3;4;5] = [1;2;3;4;5]
|
||||
union ~eq:CCInt.equal [1;2;4] [2;3;4;5] = [1;2;3;4;5]
|
||||
*)
|
||||
|
||||
let inter ~eq l1 l2 =
|
||||
|
|
@ -1038,7 +1038,7 @@ let inter ~eq l1 l2 =
|
|||
in inter eq [] l1 l2
|
||||
|
||||
(*$T
|
||||
inter [1;2;4] [2;3;4;5] = [2;4]
|
||||
inter ~eq:CCInt.equal [1;2;4] [2;3;4;5] = [2;4]
|
||||
*)
|
||||
|
||||
let mapi f l =
|
||||
|
|
@ -1243,10 +1243,10 @@ module Assoc = struct
|
|||
with Not_found -> None
|
||||
|
||||
(*$T
|
||||
Assoc.get 1 [1, "1"; 2, "2"] = Some "1"
|
||||
Assoc.get 2 [1, "1"; 2, "2"] = Some "2"
|
||||
Assoc.get 3 [1, "1"; 2, "2"] = None
|
||||
Assoc.get 42 [] = None
|
||||
Assoc.get ~eq:CCInt.equal 1 [1, "1"; 2, "2"] = Some "1"
|
||||
Assoc.get ~eq:CCInt.equal 2 [1, "1"; 2, "2"] = Some "2"
|
||||
Assoc.get ~eq:CCInt.equal 3 [1, "1"; 2, "2"] = None
|
||||
Assoc.get ~eq:CCInt.equal 42 [] = None
|
||||
*)
|
||||
|
||||
(* search for a binding for [x] in [l], and calls [f x (Some v) rest]
|
||||
|
|
@ -1264,9 +1264,9 @@ module Assoc = struct
|
|||
~f:(fun x _ l -> (x,y)::l)
|
||||
|
||||
(*$T
|
||||
Assoc.set 2 "two" [1,"1"; 2, "2"] |> List.sort Pervasives.compare \
|
||||
Assoc.set ~eq:CCInt.equal 2 "two" [1,"1"; 2, "2"] |> List.sort Pervasives.compare \
|
||||
= [1, "1"; 2, "two"]
|
||||
Assoc.set 3 "3" [1,"1"; 2, "2"] |> List.sort Pervasives.compare \
|
||||
Assoc.set ~eq:CCInt.equal 3 "3" [1,"1"; 2, "2"] |> List.sort Pervasives.compare \
|
||||
= [1, "1"; 2, "2"; 3, "3"]
|
||||
*)
|
||||
|
||||
|
|
@ -1275,8 +1275,8 @@ module Assoc = struct
|
|||
with Not_found -> false
|
||||
|
||||
(*$T
|
||||
Assoc.mem 1 [1,"1"; 2,"2"; 3, "3"]
|
||||
not (Assoc.mem 4 [1,"1"; 2,"2"; 3, "3"])
|
||||
Assoc.mem ~eq:CCInt.equal 1 [1,"1"; 2,"2"; 3, "3"]
|
||||
not (Assoc.mem ~eq:CCInt.equal 4 [1,"1"; 2,"2"; 3, "3"])
|
||||
*)
|
||||
|
||||
let update ~eq ~f x l =
|
||||
|
|
@ -1287,13 +1287,13 @@ module Assoc = struct
|
|||
| Some y' -> (x,y') :: rest)
|
||||
(*$=
|
||||
[1,"1"; 2,"22"] \
|
||||
(Assoc.update 2 [1,"1"; 2,"2"] \
|
||||
(Assoc.update ~eq:CCInt.equal 2 [1,"1"; 2,"2"] \
|
||||
~f:(function Some "2" -> Some "22" | _ -> assert false) |> lsort)
|
||||
[1,"1"; 3,"3"] \
|
||||
(Assoc.update 2 [1,"1"; 2,"2"; 3,"3"] \
|
||||
(Assoc.update ~eq:CCInt.equal 2 [1,"1"; 2,"2"; 3,"3"] \
|
||||
~f:(function Some "2" -> None | _ -> assert false) |> lsort)
|
||||
[1,"1"; 2,"2"; 3,"3"] \
|
||||
(Assoc.update 3 [1,"1"; 2,"2"] \
|
||||
(Assoc.update ~eq:CCInt.equal 3 [1,"1"; 2,"2"] \
|
||||
~f:(function None -> Some "3" | _ -> assert false) |> lsort)
|
||||
*)
|
||||
|
||||
|
|
@ -1305,11 +1305,11 @@ module Assoc = struct
|
|||
|
||||
(*$=
|
||||
[1,"1"] \
|
||||
(Assoc.remove 2 [1,"1"; 2,"2"] |> lsort)
|
||||
(Assoc.remove ~eq:CCInt.equal 2 [1,"1"; 2,"2"] |> lsort)
|
||||
[1,"1"; 3,"3"] \
|
||||
(Assoc.remove 2 [1,"1"; 2,"2"; 3,"3"] |> lsort)
|
||||
(Assoc.remove ~eq:CCInt.equal 2 [1,"1"; 2,"2"; 3,"3"] |> lsort)
|
||||
[1,"1"; 2,"2"] \
|
||||
(Assoc.remove 3 [1,"1"; 2,"2"] |> lsort)
|
||||
(Assoc.remove ~eq:CCInt.equal 3 [1,"1"; 2,"2"] |> lsort)
|
||||
*)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -313,7 +313,7 @@ val sorted_insert : cmp:('a -> 'a -> int) -> ?uniq:bool -> 'a -> 'a list -> 'a l
|
|||
(*$Q
|
||||
Q.(pair small_int (list small_int)) (fun (x,l) -> \
|
||||
let l = List.sort Pervasives.compare l in \
|
||||
is_sorted (sorted_insert x l))
|
||||
is_sorted ~cmp:CCInt.compare (sorted_insert ~cmp:CCInt.compare x l))
|
||||
*)
|
||||
|
||||
val uniq_succ : eq:('a -> 'a -> bool) -> 'a list -> 'a list
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ let with_cache_rec ?(cb=default_callback_) c f =
|
|||
f'
|
||||
|
||||
(*$R
|
||||
let c = unbounded 256 in
|
||||
let c = unbounded ~eq:CCInt.equal 256 in
|
||||
let fib = with_cache_rec c
|
||||
(fun self n -> match n with
|
||||
| 1 | 2 -> 1
|
||||
|
|
@ -321,7 +321,7 @@ let lru (type a) ~eq ?(hash=default_hash_) size =
|
|||
|
||||
(*$T
|
||||
let f = (let r = ref 0 in fun _ -> incr r; !r) in \
|
||||
let c = lru 2 in \
|
||||
let c = lru ~eq:CCInt.equal 2 in \
|
||||
let res1 = with_cache c f 1 in \
|
||||
let res2 = with_cache c f 2 in \
|
||||
let res3 = with_cache c f 3 in \
|
||||
|
|
@ -331,7 +331,7 @@ let lru (type a) ~eq ?(hash=default_hash_) size =
|
|||
|
||||
(*$R
|
||||
let f = (let r = ref 0 in fun _ -> incr r; !r) in
|
||||
let c = lru 2 in
|
||||
let c = lru ~eq:CCEqual.unit 2 in
|
||||
let x = with_cache c f () in
|
||||
assert_equal 1 x;
|
||||
assert_equal 1 (size c);
|
||||
|
|
|
|||
|
|
@ -369,7 +369,7 @@ let copy d =
|
|||
let q = of_list [1;2;3;4] in
|
||||
assert_equal 4 (length q);
|
||||
let q' = copy q in
|
||||
let cmp = equal ?eq:None in
|
||||
let cmp = equal ~eq:CCInt.equal in
|
||||
assert_equal 4 (length q');
|
||||
assert_equal ~cmp q q';
|
||||
push_front q 0;
|
||||
|
|
@ -399,7 +399,7 @@ let compare ~cmp a b =
|
|||
|
||||
(*$Q
|
||||
Q.(pair (list int) (list int)) (fun (l1,l2) -> \
|
||||
CCOrd.equiv (compare (of_list l1) (of_list l2)) \
|
||||
CCOrd.equiv (compare ~cmp:Pervasives.compare (of_list l1) (of_list l2)) \
|
||||
(CCList.compare Pervasives.compare l1 l2))
|
||||
*)
|
||||
|
||||
|
|
|
|||
|
|
@ -289,7 +289,8 @@ module Traverse = struct
|
|||
|
||||
(*$R
|
||||
let l =
|
||||
Traverse.Event.dfs ~graph:divisors_graph (Sequence.return 345614)
|
||||
let tbl = mk_table ~eq:CCInt.equal 128 in
|
||||
Traverse.Event.dfs ~tbl ~eq:CCInt.equal ~graph:divisors_graph (Sequence.return 345614)
|
||||
|> Sequence.to_list in
|
||||
let expected =
|
||||
[`Enter (345614, 0, []); `Edge (345614, (), 172807, `Forward);
|
||||
|
|
@ -339,13 +340,15 @@ let topo_sort ~eq ?rev ~tbl ~graph seq =
|
|||
topo_sort_tag ~eq ?rev ~tags ~graph seq
|
||||
|
||||
(*$T
|
||||
let l = topo_sort ~graph:divisors_graph (Seq.return 42) in \
|
||||
let tbl = mk_table ~eq:CCInt.equal 128 in \
|
||||
let l = topo_sort ~tbl ~eq:CCInt.equal ~graph:divisors_graph (Seq.return 42) in \
|
||||
List.for_all (fun (i,j) -> \
|
||||
let idx_i = CCList.find_idx ((=)i) l |> CCOpt.get_exn |> fst in \
|
||||
let idx_j = CCList.find_idx ((=)j) l |> CCOpt.get_exn |> fst in \
|
||||
idx_i < idx_j) \
|
||||
[ 42, 21; 14, 2; 3, 1; 21, 7; 42, 3]
|
||||
let l = topo_sort ~rev:true ~graph:divisors_graph (Seq.return 42) in \
|
||||
let tbl = mk_table ~eq:CCInt.equal 128 in \
|
||||
let l = topo_sort ~tbl ~eq:CCInt.equal ~rev:true ~graph:divisors_graph (Seq.return 42) in \
|
||||
List.for_all (fun (i,j) -> \
|
||||
let idx_i = CCList.find_idx ((=)i) l |> CCOpt.get_exn |> fst in \
|
||||
let idx_j = CCList.find_idx ((=)j) l |> CCOpt.get_exn |> fst in \
|
||||
|
|
@ -487,7 +490,7 @@ let scc ~tbl ~graph seq = SCC.explore ~tbl ~graph seq
|
|||
(* example from https://en.wikipedia.org/wiki/Strongly_connected_component *)
|
||||
(*$R
|
||||
let set_eq ?(eq=(=)) l1 l2 = CCList.subset ~eq l1 l2 && CCList.subset ~eq l2 l1 in
|
||||
let graph = of_list
|
||||
let graph = of_list ~eq:CCString.equal
|
||||
[ "a", "b"
|
||||
; "b", "e"
|
||||
; "e", "a"
|
||||
|
|
@ -503,7 +506,8 @@ let scc ~tbl ~graph seq = SCC.explore ~tbl ~graph seq
|
|||
; "h", "d"
|
||||
; "h", "g"
|
||||
] in
|
||||
let res = scc ~graph (Seq.return "a") |> Seq.to_list in
|
||||
let tbl = mk_table ~eq:CCString.equal 128 in
|
||||
let res = scc ~tbl ~graph (Seq.return "a") |> Seq.to_list in
|
||||
assert_bool "scc"
|
||||
(set_eq ~eq:(set_eq ?eq:None) res
|
||||
[ [ "a"; "b"; "e" ]
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ let tl l = match l with
|
|||
(*$Q
|
||||
Q.(list_of_size Gen.(1--100) int) (fun l -> \
|
||||
let l' = of_list l in \
|
||||
(not (is_empty l')) ==> (equal l' (cons (hd l') (tl l'))) )
|
||||
(not (is_empty l')) ==> (equal ~eq:CCInt.equal l' (cons (hd l') (tl l'))) )
|
||||
*)
|
||||
|
||||
let front l = match l with
|
||||
|
|
@ -389,7 +389,7 @@ let equal ~eq l1 l2 =
|
|||
|
||||
(*$Q
|
||||
Q.(pair (list int)(list int)) (fun (l1,l2) -> \
|
||||
equal (of_list l1) (of_list l2) = (l1=l2))
|
||||
equal ~eq:CCInt.equal (of_list l1) (of_list l2) = (l1=l2))
|
||||
*)
|
||||
|
||||
(** {2 Utils} *)
|
||||
|
|
@ -556,7 +556,7 @@ let compare ~cmp l1 l2 =
|
|||
|
||||
(*$Q
|
||||
Q.(pair (list int)(list int)) (fun (l1,l2) -> \
|
||||
compare (of_list l1) (of_list l2) = (Pervasives.compare l1 l2))
|
||||
compare ~cmp:CCInt.compare (of_list l1) (of_list l2) = (Pervasives.compare l1 l2))
|
||||
*)
|
||||
|
||||
(** {2 Infix} *)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue