123 lines
3.1 KiB
OCaml
123 lines
3.1 KiB
OCaml
open! Import
|
|
open! Maybe_bound
|
|
|
|
let%test_unit "bounds_crossed" =
|
|
let a, b, c, d = Incl 1, Excl 1, Incl 3, Excl 3 in
|
|
let cases =
|
|
[ a, a, false
|
|
; a, b, false
|
|
; a, c, false
|
|
; a, d, false
|
|
; b, a, false
|
|
; b, b, false
|
|
; b, c, false
|
|
; b, d, false
|
|
; c, a, true
|
|
; c, b, true
|
|
; c, c, false
|
|
; c, d, false
|
|
; d, a, true
|
|
; d, b, true
|
|
; d, c, false
|
|
; d, d, false
|
|
]
|
|
in
|
|
List.iter cases ~f:(fun (lower, upper, expect) ->
|
|
let actual = bounds_crossed ~lower ~upper ~compare in
|
|
assert ([%compare.equal: bool] expect actual))
|
|
;;
|
|
|
|
let%test_module "is_lower_bound" =
|
|
(module struct
|
|
let compare = Int.compare
|
|
let%test _ = is_lower_bound Unbounded ~of_:Int.min_value ~compare
|
|
let%test _ = not (is_lower_bound (Incl 2) ~of_:1 ~compare)
|
|
let%test _ = is_lower_bound (Incl 2) ~of_:2 ~compare
|
|
let%test _ = is_lower_bound (Incl 2) ~of_:3 ~compare
|
|
let%test _ = not (is_lower_bound (Excl 2) ~of_:1 ~compare)
|
|
let%test _ = not (is_lower_bound (Excl 2) ~of_:2 ~compare)
|
|
let%test _ = is_lower_bound (Excl 2) ~of_:3 ~compare
|
|
end)
|
|
;;
|
|
|
|
let%test_module "is_upper_bound" =
|
|
(module struct
|
|
let compare = Int.compare
|
|
let%test _ = is_upper_bound Unbounded ~of_:Int.max_value ~compare
|
|
let%test _ = is_upper_bound (Incl 2) ~of_:1 ~compare
|
|
let%test _ = is_upper_bound (Incl 2) ~of_:2 ~compare
|
|
let%test _ = not (is_upper_bound (Incl 2) ~of_:3 ~compare)
|
|
let%test _ = is_upper_bound (Excl 2) ~of_:1 ~compare
|
|
let%test _ = not (is_upper_bound (Excl 2) ~of_:2 ~compare)
|
|
let%test _ = not (is_upper_bound (Excl 2) ~of_:3 ~compare)
|
|
end)
|
|
;;
|
|
|
|
let%test_module "check_range" =
|
|
(module struct
|
|
let compare = Int.compare
|
|
|
|
let tests (lower, upper) cases =
|
|
List.iter cases ~f:(fun (n, comparison) ->
|
|
[%test_result: interval_comparison]
|
|
~expect:comparison
|
|
(compare_to_interval_exn n ~lower ~upper ~compare);
|
|
[%test_result: bool]
|
|
~expect:
|
|
(match comparison with
|
|
| In_range -> true
|
|
| _ -> false)
|
|
(interval_contains_exn n ~lower ~upper ~compare))
|
|
;;
|
|
|
|
let%test_unit _ =
|
|
tests
|
|
(Unbounded, Unbounded)
|
|
[ Int.min_value, In_range; 0, In_range; Int.max_value, In_range ]
|
|
;;
|
|
|
|
let%test_unit _ =
|
|
tests
|
|
(Incl 2, Incl 4)
|
|
[ 1, Below_lower_bound
|
|
; 2, In_range
|
|
; 3, In_range
|
|
; 4, In_range
|
|
; 5, Above_upper_bound
|
|
]
|
|
;;
|
|
|
|
let%test_unit _ =
|
|
tests
|
|
(Incl 2, Excl 4)
|
|
[ 1, Below_lower_bound
|
|
; 2, In_range
|
|
; 3, In_range
|
|
; 4, Above_upper_bound
|
|
; 5, Above_upper_bound
|
|
]
|
|
;;
|
|
|
|
let%test_unit _ =
|
|
tests
|
|
(Excl 2, Incl 4)
|
|
[ 1, Below_lower_bound
|
|
; 2, Below_lower_bound
|
|
; 3, In_range
|
|
; 4, In_range
|
|
; 5, Above_upper_bound
|
|
]
|
|
;;
|
|
|
|
let%test_unit _ =
|
|
tests
|
|
(Excl 2, Excl 4)
|
|
[ 1, Below_lower_bound
|
|
; 2, Below_lower_bound
|
|
; 3, In_range
|
|
; 4, Above_upper_bound
|
|
; 5, Above_upper_bound
|
|
]
|
|
;;
|
|
end)
|
|
;;
|