mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 03:05:28 -05:00
164 lines
4.8 KiB
OCaml
164 lines
4.8 KiB
OCaml
|
|
|
|
module Test = (val Containers_testlib.make ~__FILE__())
|
|
open Test
|
|
|
|
module Mixmap = struct
|
|
|
|
t @@ fun () ->
|
|
let module M = CCMixmap.Make(CCInt) in
|
|
|
|
let inj_int = CCMixmap.create_inj() in
|
|
let inj_str = CCMixmap.create_inj() in
|
|
let inj_list_int = CCMixmap.create_inj() in
|
|
|
|
let m =
|
|
M.empty
|
|
|> M.add ~inj:inj_int 1 1
|
|
|> M.add ~inj:inj_str 2 "2"
|
|
|> M.add ~inj:inj_list_int 3 [3;3;3]
|
|
in
|
|
|
|
assert_equal (M.get ~inj:inj_int 1 m) (Some 1) ;
|
|
assert_equal (M.get ~inj:inj_str 1 m) None ;
|
|
assert_equal (M.get ~inj:inj_str 2 m) (Some "2") ;
|
|
assert_equal (M.get ~inj:inj_int 2 m) None ;
|
|
assert_equal (M.get ~inj:inj_list_int 3 m) (Some [3;3;3]) ;
|
|
assert_equal (M.get ~inj:inj_str 3 m) None ;
|
|
true
|
|
|
|
end
|
|
|
|
module Mixset = struct
|
|
open CCMixset ;;
|
|
|
|
t @@ fun () ->
|
|
let k1 : int key = newkey () in
|
|
let k2 : int key = newkey () in
|
|
let k3 : string key = newkey () in
|
|
let set =
|
|
empty
|
|
|> set ~key:k1 1
|
|
|> set ~key:k2 2
|
|
|> set ~key:k3 "3"
|
|
in
|
|
assert (get ~key:k1 set = Some 1);
|
|
assert (get ~key:k2 set = Some 2);
|
|
assert (get ~key:k3 set = Some "3");
|
|
true
|
|
|
|
end
|
|
|
|
module Mixtbl = struct
|
|
open CCFun
|
|
open CCMixtbl;;
|
|
|
|
t @@ fun () ->
|
|
let inj_int = create_inj () in
|
|
let tbl = create 10 in
|
|
assert_equal None (get ~inj:inj_int tbl "a");
|
|
set ~inj:inj_int tbl "a" 1;
|
|
assert_equal (Some 1) (get ~inj:inj_int tbl "a");
|
|
let inj_string = create_inj () in
|
|
set ~inj:inj_string tbl "b" "Hello";
|
|
assert_equal (Some "Hello") (get ~inj:inj_string tbl "b");
|
|
assert_equal None (get ~inj:inj_string tbl "a");
|
|
assert_equal (Some 1) (get ~inj:inj_int tbl "a");
|
|
set ~inj:inj_string tbl "a" "Bye";
|
|
assert_equal None (get ~inj:inj_int tbl "a");
|
|
assert_equal (Some "Bye") (get ~inj:inj_string tbl "a");
|
|
true;;
|
|
|
|
t @@ fun () ->
|
|
let inj_int = create_inj () in
|
|
let tbl = create 5 in
|
|
set ~inj:inj_int tbl "foo" 1;
|
|
set ~inj:inj_int tbl "bar" 2;
|
|
assert_equal 2 (length tbl);
|
|
assert_equal 2 (find ~inj:inj_int tbl "bar");
|
|
set ~inj:inj_int tbl "foo" 42;
|
|
assert_equal 2 (length tbl);
|
|
remove tbl "bar";
|
|
assert_equal 1 (length tbl);
|
|
true;;
|
|
|
|
t @@ fun () ->
|
|
let inj_int = create_inj () in
|
|
let inj_str = create_inj () in
|
|
let tbl = create 5 in
|
|
set ~inj:inj_int tbl "foo" 1;
|
|
set ~inj:inj_int tbl "bar" 2;
|
|
set ~inj:inj_str tbl "baaz" "hello";
|
|
assert_equal 3 (length tbl);
|
|
clear tbl;
|
|
assert_equal 0 (length tbl);
|
|
true;;
|
|
|
|
t @@ fun () ->
|
|
let inj_int = create_inj () in
|
|
let inj_str = create_inj () in
|
|
let tbl = create 5 in
|
|
set ~inj:inj_int tbl "foo" 1;
|
|
set ~inj:inj_int tbl "bar" 2;
|
|
set ~inj:inj_str tbl "baaz" "hello";
|
|
assert_bool "mem foo int" (mem ~inj:inj_int tbl "foo");
|
|
assert_bool "mem bar int" (mem ~inj:inj_int tbl "bar");
|
|
assert_bool "not mem baaz int" (not (mem ~inj:inj_int tbl "baaz"));
|
|
assert_bool "not mem foo str" (not (mem ~inj:inj_str tbl "foo"));
|
|
assert_bool "not mem bar str" (not (mem ~inj:inj_str tbl "bar"));
|
|
assert_bool "mem baaz str" (mem ~inj:inj_str tbl "baaz");
|
|
true;;
|
|
|
|
t @@ fun () ->
|
|
let inj_int = create_inj () in
|
|
let inj_str = create_inj () in
|
|
let tbl = create 5 in
|
|
set ~inj:inj_int tbl "foo" 1;
|
|
set ~inj:inj_int tbl "bar" 2;
|
|
set ~inj:inj_str tbl "baaz" "hello";
|
|
let l = keys_iter tbl |> Iter.to_list in
|
|
assert_equal ["baaz"; "bar"; "foo"] (List.sort compare l);
|
|
true;;
|
|
|
|
t @@ fun () ->
|
|
let inj_int = create_inj () in
|
|
let inj_str = create_inj () in
|
|
let tbl = create 5 in
|
|
set ~inj:inj_int tbl "foo" 1;
|
|
set ~inj:inj_int tbl "bar" 2;
|
|
set ~inj:inj_str tbl "baaz" "hello";
|
|
set ~inj:inj_str tbl "str" "rts";
|
|
let l_int = bindings_of ~inj:inj_int tbl |> Iter.to_list in
|
|
assert_equal ["bar", 2; "foo", 1] (List.sort compare l_int);
|
|
let l_str = bindings_of ~inj:inj_str tbl |> Iter.to_list in
|
|
assert_equal ["baaz", "hello"; "str", "rts"] (List.sort compare l_str);
|
|
true;;
|
|
|
|
end
|
|
|
|
module Multiset = struct
|
|
|
|
t @@ fun () -> let module S = CCMultiSet.Make(String) in
|
|
S.count (S.add_mult S.empty "a" 5) "a" = 5;;
|
|
t @@ fun () -> let module S = CCMultiSet.Make(String) in
|
|
S.count (S.remove_mult (S.add_mult S.empty "a" 5) "a" 3) "a" = 2;;
|
|
t @@ fun () -> let module S = CCMultiSet.Make(String) in
|
|
S.count (S.remove_mult (S.add_mult S.empty "a" 4) "a" 6) "a" = 0;;
|
|
end
|
|
|
|
module PersistentArray = struct
|
|
open CCPersistentArray;;
|
|
|
|
t @@ fun () ->
|
|
of_list [ of_list [1]; of_list []; of_list [2;3;4]; of_list [5]; of_list [6;7]]
|
|
|> flatten |> to_list = [1;2;3;4;5;6;7];;
|
|
|
|
t @@ fun () ->
|
|
of_list [ of_list []; of_list []; of_list []] |> flatten |> length = 0;;
|
|
|
|
t @@ fun () -> of_list [] |> flatten |> length = 0;;
|
|
|
|
q Q.(list int) (fun l ->
|
|
of_list l |> to_gen |> of_gen |> to_list = l);;
|
|
|
|
end
|