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)))
;;
|