mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
97 lines
3.4 KiB
OCaml
97 lines
3.4 KiB
OCaml
|
|
open OUnit
|
|
open Containers_misc
|
|
open CCFun
|
|
|
|
module Mixtbl = CCMixtbl
|
|
|
|
let example () =
|
|
let inj_int = Mixtbl.create_inj () in
|
|
let tbl = Mixtbl.create 10 in
|
|
OUnit.assert_equal None (Mixtbl.get ~inj:inj_int tbl "a");
|
|
Mixtbl.set ~inj:inj_int tbl "a" 1;
|
|
OUnit.assert_equal (Some 1) (Mixtbl.get ~inj:inj_int tbl "a");
|
|
let inj_string = Mixtbl.create_inj () in
|
|
Mixtbl.set ~inj:inj_string tbl "b" "Hello";
|
|
OUnit.assert_equal (Some "Hello") (Mixtbl.get ~inj:inj_string tbl "b");
|
|
OUnit.assert_equal None (Mixtbl.get ~inj:inj_string tbl "a");
|
|
OUnit.assert_equal (Some 1) (Mixtbl.get ~inj:inj_int tbl "a");
|
|
Mixtbl.set ~inj:inj_string tbl "a" "Bye";
|
|
OUnit.assert_equal None (Mixtbl.get ~inj:inj_int tbl "a");
|
|
OUnit.assert_equal (Some "Bye") (Mixtbl.get ~inj:inj_string tbl "a");
|
|
()
|
|
|
|
let test_length () =
|
|
let inj_int = Mixtbl.create_inj () in
|
|
let tbl = Mixtbl.create 5 in
|
|
Mixtbl.set ~inj:inj_int tbl "foo" 1;
|
|
Mixtbl.set ~inj:inj_int tbl "bar" 2;
|
|
OUnit.assert_equal 2 (Mixtbl.length tbl);
|
|
OUnit.assert_equal 2 (Mixtbl.find ~inj:inj_int tbl "bar");
|
|
Mixtbl.set ~inj:inj_int tbl "foo" 42;
|
|
OUnit.assert_equal 2 (Mixtbl.length tbl);
|
|
Mixtbl.remove tbl "bar";
|
|
OUnit.assert_equal 1 (Mixtbl.length tbl);
|
|
()
|
|
|
|
let test_clear () =
|
|
let inj_int = Mixtbl.create_inj () in
|
|
let inj_str = Mixtbl.create_inj () in
|
|
let tbl = Mixtbl.create 5 in
|
|
Mixtbl.set ~inj:inj_int tbl "foo" 1;
|
|
Mixtbl.set ~inj:inj_int tbl "bar" 2;
|
|
Mixtbl.set ~inj:inj_str tbl "baaz" "hello";
|
|
OUnit.assert_equal 3 (Mixtbl.length tbl);
|
|
Mixtbl.clear tbl;
|
|
OUnit.assert_equal 0 (Mixtbl.length tbl);
|
|
()
|
|
|
|
let test_mem () =
|
|
let inj_int = Mixtbl.create_inj () in
|
|
let inj_str = Mixtbl.create_inj () in
|
|
let tbl = Mixtbl.create 5 in
|
|
Mixtbl.set ~inj:inj_int tbl "foo" 1;
|
|
Mixtbl.set ~inj:inj_int tbl "bar" 2;
|
|
Mixtbl.set ~inj:inj_str tbl "baaz" "hello";
|
|
OUnit.assert_bool "mem foo int" (Mixtbl.mem ~inj:inj_int tbl "foo");
|
|
OUnit.assert_bool "mem bar int" (Mixtbl.mem ~inj:inj_int tbl "bar");
|
|
OUnit.assert_bool "not mem baaz int" (not (Mixtbl.mem ~inj:inj_int tbl "baaz"));
|
|
OUnit.assert_bool "not mem foo str" (not (Mixtbl.mem ~inj:inj_str tbl "foo"));
|
|
OUnit.assert_bool "not mem bar str" (not (Mixtbl.mem ~inj:inj_str tbl "bar"));
|
|
OUnit.assert_bool "mem baaz str" (Mixtbl.mem ~inj:inj_str tbl "baaz");
|
|
()
|
|
|
|
let test_keys () =
|
|
let inj_int = Mixtbl.create_inj () in
|
|
let inj_str = Mixtbl.create_inj () in
|
|
let tbl = Mixtbl.create 5 in
|
|
Mixtbl.set ~inj:inj_int tbl "foo" 1;
|
|
Mixtbl.set ~inj:inj_int tbl "bar" 2;
|
|
Mixtbl.set ~inj:inj_str tbl "baaz" "hello";
|
|
let l = Mixtbl.keys_seq tbl |> Sequence.to_list in
|
|
OUnit.assert_equal ["baaz"; "bar"; "foo"] (List.sort compare l);
|
|
()
|
|
|
|
let test_bindings () =
|
|
let inj_int = Mixtbl.create_inj () in
|
|
let inj_str = Mixtbl.create_inj () in
|
|
let tbl = Mixtbl.create 5 in
|
|
Mixtbl.set ~inj:inj_int tbl "foo" 1;
|
|
Mixtbl.set ~inj:inj_int tbl "bar" 2;
|
|
Mixtbl.set ~inj:inj_str tbl "baaz" "hello";
|
|
Mixtbl.set ~inj:inj_str tbl "str" "rts";
|
|
let l_int = Mixtbl.bindings_of tbl ~inj:inj_int |> Sequence.to_list in
|
|
OUnit.assert_equal ["bar", 2; "foo", 1] (List.sort compare l_int);
|
|
let l_str = Mixtbl.bindings_of tbl ~inj:inj_str |> Sequence.to_list in
|
|
OUnit.assert_equal ["baaz", "hello"; "str", "rts"] (List.sort compare l_str);
|
|
()
|
|
|
|
let suite =
|
|
"mixtbl" >:::
|
|
[ "example" >:: example;
|
|
"length" >:: test_length;
|
|
"clear" >:: test_clear;
|
|
"mem" >:: test_mem;
|
|
"bindings" >:: test_bindings;
|
|
]
|
|
|