mte/unikernel/duniverse/base/test/test_ordered_collection_common.ml
2025-11-11 02:07:51 +01:00

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