File: test_ordered_collection_common.ml

package info (click to toggle)
janest-base 0.17.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,632 kB
  • sloc: ml: 48,653; ansic: 281; javascript: 126; makefile: 14
file content (78 lines) | stat: -rw-r--r-- 2,060 bytes parent folder | download | duplicates (2)
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
open! Import
open! Ordered_collection_common

let%test_unit "fast check_pos_len_exn is correct" =
  let n_vals =
    [ 0
    ; 1
    ; 2
    ; 10
    ; 100
    ; (Int.max_value / 2) - 2
    ; (Int.max_value / 2) - 1
    ; Int.max_value / 2
    ; Int.max_value - 2
    ; Int.max_value - 1
    ; Int.max_value
    ]
  in
  let z_vals =
    [ Int.min_value
    ; Int.min_value + 1
    ; Int.min_value + 2
    ; Int.min_value / 2
    ; (Int.min_value / 2) + 1
    ; (Int.min_value / 2) + 2
    ; -100
    ; -10
    ; -2
    ; -1
    ]
    @ n_vals
  in
  List.iter z_vals ~f:(fun pos ->
    List.iter z_vals ~f:(fun len ->
      List.iter n_vals ~f:(fun total_length ->
        assert (
          Bool.equal
            (Exn.does_raise (fun () ->
               Private.slow_check_pos_len_exn ~pos ~len ~total_length))
            (Exn.does_raise (fun () -> check_pos_len_exn ~pos ~len ~total_length))))))
;;

let%test_unit _ =
  let vals = [ -1; 0; 1; 2; 3 ] in
  List.iter [ 0; 1; 2 ] ~f:(fun total_length ->
    List.iter vals ~f:(fun pos ->
      List.iter vals ~f:(fun len ->
        let result =
          Result.try_with (fun () -> check_pos_len_exn ~pos ~len ~total_length)
        in
        let valid = pos >= 0 && len >= 0 && len <= total_length - pos in
        assert (Bool.equal valid (Result.is_ok result)))))
;;

let%test_unit _ =
  let opts = [ None; Some (-1); Some 0; Some 1; Some 2 ] in
  List.iter [ 0; 1; 2 ] ~f:(fun total_length ->
    List.iter opts ~f:(fun pos ->
      List.iter opts ~f:(fun len ->
        let result = get_pos_len () ?pos ?len ~total_length in
        let pos =
          match pos with
          | Some x -> x
          | None -> 0
        in
        let len =
          match len with
          | Some x -> x
          | None -> total_length - pos
        in
        let valid = pos >= 0 && len >= 0 && len <= total_length - pos in
        match result with
        | Error _ -> assert (not valid)
        | Ok (pos', len') ->
          assert (pos' = pos);
          assert (len' = len);
          assert valid)))
;;