module T = (val Containers_testlib.make ~__FILE__ ()) include T;; open CCHashtbl;; eq "c" (let tbl = of_list [1,"a"; 2,"b"] in get_or tbl 3 ~default:"c");; eq "b" (let tbl = of_list [1,"a"; 2,"b"] in get_or tbl 2 ~default:"c");; t @@ fun () -> of_list [1,"a"; 2,"b"] |> map_list (fun x y -> string_of_int x ^ y) |> List.sort Stdlib.compare = ["1a"; "2b"];; t @@ fun () -> let tbl = Hashtbl.create 32 in update tbl ~f:(fun _ _ -> Some "1") ~k:1; assert_equal (Some "1") (get tbl 1); update tbl ~f:(fun _ v->match v with Some _ -> assert false | None -> Some "2") ~k:2; assert_equal (Some "2") (get tbl 2); assert_equal 2 (Hashtbl.length tbl); update tbl ~f:(fun _ _ -> None) ~k:1; assert_equal None (get tbl 1); true ;; t @@ fun () -> let tbl = Hashtbl.create 32 in let v1 = get_or_add tbl ~f:(fun _ -> "1") ~k:1 in assert_equal "1" v1; assert_equal (Some "1") (get tbl 1); let v2 = get_or_add tbl ~f:(fun _ ->"2") ~k:2 in assert_equal "2" v2; assert_equal (Some "2") (get tbl 2); assert_equal "2" (get_or_add tbl ~f:(fun _ -> assert false) ~k:2); assert_equal 2 (Hashtbl.length tbl); true ;; module TI = Make(CCInt);; eq "c" (let tbl = TI.of_list [1,"a"; 2,"b"] in TI.get_or tbl 3 ~default:"c");; eq "b" (let tbl = TI.of_list [1,"a"; 2,"b"] in TI.get_or tbl 2 ~default:"c");; t @@ fun () -> let tbl = TI.create 32 in TI.incr tbl 1 ; TI.incr tbl 2; TI.incr tbl 1; assert_equal 2 (TI.find tbl 1); assert_equal 1 (TI.find tbl 2); assert_equal 2 (TI.length tbl); TI.decr tbl 2; assert_equal 0 (TI.get_or tbl 2 ~default:0); assert_equal 1 (TI.length tbl); assert(not (TI.mem tbl 2)); true;;