File: test.ml

package info (click to toggle)
ocaml-ptmap 2.0.4-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 172 kB
  • sloc: ml: 635; makefile: 43; sh: 17
file content (54 lines) | stat: -rw-r--r-- 1,349 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
let rec int_pow a = function
  | 0 -> 1
  | 1 -> a
  | n -> 
    let b = int_pow a (n / 2) in
    b * b * (if n mod 2 = 0 then 1 else a)

let max_int = (int_pow 2 30) -1

let test empty add mem =
  let seed = Random.int max_int in
  Random.init seed;
  let s =
    let rec loop s i =
      if i = 1000 then s else loop (add (Random.int max_int) true s) (succ i)
    in
    loop empty 0
  in
  Random.init seed;
  for i = 0 to 999 do assert (mem (Random.int max_int) s) done

let list_to_map lst =
  let rec loop l map = match l with
  | [] -> map
  | item :: ls -> loop ls (Ptmap.add item true map)
  in
  loop lst Ptmap.empty

let test_find_first =
  let k,v = Ptmap.find_first (fun i -> i > 3) (list_to_map [3; 1; 2; 4; 6; 5]) in
  assert (k = 4)

let test_find_first_opt =
  match Ptmap.find_first_opt (fun i -> i > 3) (list_to_map [3; 1; 2; 4; 6; 5]) with
  | Some (4, v) -> assert true
  | _ -> assert false

let test_find_last =
  let k,v = Ptmap.find_last (fun i -> i < 4) (list_to_map [3; 1; 2; 4; 6; 5]) in
  assert (k = 3)

let test_find_last_opt =
  match Ptmap.find_last_opt (fun i -> i < 4) (list_to_map [3; 1; 2; 4; 6; 5]) with
  | Some (3, v) -> assert true
  | _ -> assert false

let main () =
  test Ptmap.empty Ptmap.add Ptmap.mem;
  test_find_first;
  test_find_first_opt;
  test_find_last;
  test_find_last_opt

let () = main ()