78 lines
2 KiB
OCaml
78 lines
2 KiB
OCaml
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)))
|
|
;;
|