mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
more tests for FHashtbl
This commit is contained in:
parent
7bde68ae75
commit
5c6d9d94f2
3 changed files with 33 additions and 36 deletions
|
|
@ -59,6 +59,9 @@ module type S = sig
|
||||||
val size : 'a t -> int
|
val size : 'a t -> int
|
||||||
(** Number of bindings *)
|
(** Number of bindings *)
|
||||||
|
|
||||||
|
val depth : 'a t -> int
|
||||||
|
(** Depth of the tree *)
|
||||||
|
|
||||||
val to_seq : 'a t -> (key * 'a) Sequence.t
|
val to_seq : 'a t -> (key * 'a) Sequence.t
|
||||||
|
|
||||||
val of_seq : ?size:int -> (key * 'a) Sequence.t -> 'a t
|
val of_seq : ?size:int -> (key * 'a) Sequence.t -> 'a t
|
||||||
|
|
@ -265,6 +268,11 @@ module Make(X : HASH) = struct
|
||||||
let size t =
|
let size t =
|
||||||
fold (fun n _ _ -> n + 1) 0 t
|
fold (fun n _ _ -> n + 1) 0 t
|
||||||
|
|
||||||
|
let rec depth t =
|
||||||
|
match t with
|
||||||
|
| Table _ -> 0
|
||||||
|
| Split (l, r) -> (max (depth l) (depth r)) + 1
|
||||||
|
|
||||||
let to_seq t =
|
let to_seq t =
|
||||||
Sequence.from_iter (fun k -> iter (fun key value -> k (key, value)) t)
|
Sequence.from_iter (fun k -> iter (fun key value -> k (key, value)) t)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,9 @@ module type S = sig
|
||||||
val size : 'a t -> int
|
val size : 'a t -> int
|
||||||
(** Number of bindings *)
|
(** Number of bindings *)
|
||||||
|
|
||||||
|
val depth : 'a t -> int
|
||||||
|
(** Depth of the tree *)
|
||||||
|
|
||||||
val to_seq : 'a t -> (key * 'a) Sequence.t
|
val to_seq : 'a t -> (key * 'a) Sequence.t
|
||||||
|
|
||||||
val of_seq : ?size:int -> (key * 'a) Sequence.t -> 'a t
|
val of_seq : ?size:int -> (key * 'a) Sequence.t -> 'a t
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@ let test_add () =
|
||||||
let h = IFHashtbl.replace h 42 "foo" in
|
let h = IFHashtbl.replace h 42 "foo" in
|
||||||
OUnit.assert_equal (IFHashtbl.find h 42) "foo"
|
OUnit.assert_equal (IFHashtbl.find h 42) "foo"
|
||||||
|
|
||||||
(*
|
|
||||||
let my_list =
|
let my_list =
|
||||||
[ 1, "a";
|
[ 1, "a";
|
||||||
2, "b";
|
2, "b";
|
||||||
|
|
@ -23,48 +22,36 @@ let my_list =
|
||||||
let my_seq = Sequence.of_list my_list
|
let my_seq = Sequence.of_list my_list
|
||||||
|
|
||||||
let test_of_seq () =
|
let test_of_seq () =
|
||||||
let h = IHashtbl.create 5 in
|
let h = IFHashtbl.of_seq my_seq in
|
||||||
IHashtbl.of_seq h my_seq;
|
OUnit.assert_equal (IFHashtbl.find h 2) "b";
|
||||||
OUnit.assert_equal (IHashtbl.find h 2) "b";
|
OUnit.assert_equal (IFHashtbl.find h 1) "a";
|
||||||
OUnit.assert_equal (IHashtbl.find h 1) "a";
|
OUnit.assert_raises Not_found (fun () -> IFHashtbl.find h 42);
|
||||||
OUnit.assert_raises Not_found (fun () -> IHashtbl.find h 42);
|
|
||||||
()
|
()
|
||||||
|
|
||||||
let test_to_seq () =
|
let test_to_seq () =
|
||||||
let h = IHashtbl.create 5 in
|
let h = IFHashtbl.of_seq my_seq in
|
||||||
IHashtbl.of_seq h my_seq;
|
let l = Sequence.to_list (IFHashtbl.to_seq h) in
|
||||||
let l = Sequence.to_list (IHashtbl.to_seq h) in
|
|
||||||
OUnit.assert_equal my_list (List.sort compare l)
|
OUnit.assert_equal my_list (List.sort compare l)
|
||||||
|
|
||||||
let test_resize () =
|
let test_resize () =
|
||||||
let h = IHashtbl.create 5 in
|
let h = IFHashtbl.of_seq
|
||||||
for i = 0 to 10 do
|
(Sequence.map (fun i -> i, string_of_int i)
|
||||||
IHashtbl.replace h i (string_of_int i);
|
(Sequence.int_range ~start:0 ~stop:200)) in
|
||||||
done;
|
OUnit.assert_bool "must have been resized" (IFHashtbl.depth h > 0);
|
||||||
OUnit.assert_bool "must have been resized" (IHashtbl.length h > 5);
|
|
||||||
()
|
()
|
||||||
|
|
||||||
let test_eq () =
|
let test_persistent () =
|
||||||
let h = IHashtbl.create 3 in
|
let h = IFHashtbl.of_seq my_seq in
|
||||||
IHashtbl.replace h 1 "odd";
|
OUnit.assert_equal (IFHashtbl.find h 1) "a";
|
||||||
IHashtbl.replace h 2 "even";
|
OUnit.assert_raises Not_found (fun () -> IFHashtbl.find h 5);
|
||||||
OUnit.assert_equal (IHashtbl.find h 1) "odd";
|
let h' = IFHashtbl.replace h 5 "e" in
|
||||||
OUnit.assert_equal (IHashtbl.find h 2) "even";
|
OUnit.assert_equal (IFHashtbl.find h' 1) "a";
|
||||||
()
|
OUnit.assert_equal (IFHashtbl.find h' 5) "e";
|
||||||
|
OUnit.assert_equal (IFHashtbl.find h 1) "a";
|
||||||
let test_copy () =
|
OUnit.assert_raises Not_found (fun () -> IFHashtbl.find h 5);
|
||||||
let h = IHashtbl.create 2 in
|
|
||||||
IHashtbl.replace h 1 "one";
|
|
||||||
OUnit.assert_equal (IHashtbl.find h 1) "one";
|
|
||||||
OUnit.assert_raises Not_found (fun () -> IHashtbl.find h 2);
|
|
||||||
let h' = IHashtbl.copy h in
|
|
||||||
IHashtbl.replace h' 2 "two";
|
|
||||||
OUnit.assert_equal (IHashtbl.find h' 1) "one";
|
|
||||||
OUnit.assert_equal (IHashtbl.find h' 2) "two";
|
|
||||||
OUnit.assert_equal (IHashtbl.find h 1) "one";
|
|
||||||
OUnit.assert_raises Not_found (fun () -> IHashtbl.find h 2);
|
|
||||||
()
|
()
|
||||||
|
|
||||||
|
(*
|
||||||
let test_remove () =
|
let test_remove () =
|
||||||
let h = IHashtbl.create 3 in
|
let h = IHashtbl.create 3 in
|
||||||
IHashtbl.of_seq h my_seq;
|
IHashtbl.of_seq h my_seq;
|
||||||
|
|
@ -82,12 +69,11 @@ let test_remove () =
|
||||||
let suite =
|
let suite =
|
||||||
"test_pHashtbl" >:::
|
"test_pHashtbl" >:::
|
||||||
[ "test_add" >:: test_add;
|
[ "test_add" >:: test_add;
|
||||||
(*
|
|
||||||
"test_of_seq" >:: test_of_seq;
|
"test_of_seq" >:: test_of_seq;
|
||||||
"test_to_seq" >:: test_to_seq;
|
"test_to_seq" >:: test_to_seq;
|
||||||
"test_resize" >:: test_resize;
|
"test_resize" >:: test_resize;
|
||||||
"test_eq" >:: test_eq;
|
"test_persistent" >:: test_persistent;
|
||||||
"test_copy" >:: test_copy;
|
(*
|
||||||
"test_remove" >:: test_remove;
|
"test_remove" >:: test_remove;
|
||||||
*)
|
*)
|
||||||
]
|
]
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue