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

75 lines
1.6 KiB
OCaml

open! Import
open! Nativeint
let%expect_test "hash coherence" =
check_int_hash_coherence [%here] (module Nativeint);
[%expect {| |}]
;;
type test_case = nativeint * int32 * int64
let test_cases : test_case list =
[ 0x0000_0011n, 0x1100_0000l, 0x1100_0000_0000_0000L
; 0x0000_1122n, 0x2211_0000l, 0x2211_0000_0000_0000L
; 0x0011_2233n, 0x3322_1100l, 0x3322_1100_0000_0000L
; 0x1122_3344n, 0x4433_2211l, 0x4433_2211_0000_0000L
]
;;
let%expect_test "bswap native" =
List.iter test_cases ~f:(fun (arg, bswap_int32, bswap_int64) ->
let result = bswap arg in
match Sys.word_size_in_bits with
| 32 -> assert (Int32.equal bswap_int32 (Nativeint.to_int32_trunc result))
| 64 -> assert (Int64.equal bswap_int64 (Nativeint.to_int64 result))
| _ -> assert false)
;;
let%expect_test "binary" =
quickcheck_m
[%here]
(module struct
type t = nativeint [@@deriving quickcheck, sexp_of]
end)
~f:(fun (t : t) -> ignore (Binary.to_string t : string));
[%expect {| |}]
;;
let test_binary i =
Binary.to_string_hum i |> print_endline;
Binary.to_string i |> print_endline;
print_s [%sexp (i : Binary.t)]
;;
let%expect_test "binary" =
test_binary 0b01n;
[%expect {|
0b1
0b1
0b1
|}];
test_binary 0b100n;
[%expect {|
0b100
0b100
0b100
|}];
test_binary 0b101n;
[%expect {|
0b101
0b101
0b101
|}];
test_binary 0b101010_10101010n;
[%expect {|
0b10_1010_1010_1010
0b10101010101010
0b10_1010_1010_1010
|}];
test_binary 0b111111_00000000n;
[%expect {|
0b11_1111_0000_0000
0b11111100000000
0b11_1111_0000_0000
|}]
;;