mte/unikernel/duniverse/ocaml_intrinsics_kernel/test/test_clz.ml

196 lines
3.7 KiB
OCaml
Raw Normal View History

2025-11-11 02:07:51 +01:00
[%%import "config.h"]
open Base
open Stdio
module I = Ocaml_intrinsics_kernel
let test ~op ~op_name ~to_string x = printf "%s %s = %d\n" op_name (to_string x) (op x)
let%expect_test "clz int64" =
let open Int64 in
let numbers =
[ 0L (* Int.num_bits *)
; 1L (* Int.num_bits - 1 *)
; 7L (* Int.num_bits - 3 *)
; max_value
; min_value
; -1L
]
in
let f =
test ~op:I.Int64.count_leading_zeros ~op_name:"clz" ~to_string:Hex.to_string_hum
in
List.iter ~f numbers;
[%expect
{|
clz 0x0 = 64
clz 0x1 = 63
clz 0x7 = 61
clz 0x7fff_ffff_ffff_ffff = 1
clz -0x8000_0000_0000_0000 = 0
clz -0x1 = 0
|}]
;;
let%expect_test "clz int32" =
let open Int32 in
let numbers =
[ 0l (* Int.num_bits *)
; 1l (* Int.num_bits - 1 *)
; 7l (* Int.num_bits - 3 *)
; max_value
; min_value
; -1l
]
in
let f =
test ~op:I.Int32.count_leading_zeros ~op_name:"clz" ~to_string:Hex.to_string_hum
in
List.iter ~f numbers;
[%expect
{|
clz 0x0 = 32
clz 0x1 = 31
clz 0x7 = 29
clz 0x7fff_ffff = 1
clz -0x8000_0000 = 0
clz -0x1 = 0
|}]
;;
[%%ifdef JSC_ARCH_SIXTYFOUR]
let%expect_test "clz int" =
let open Int in
let numbers =
[ 0 (* Int.num_bits *)
; 1 (* Int.num_bits - 1 *)
; 7 (* Int.num_bits - 3 *)
; max_value
; min_value
; -1
]
in
let f =
test ~op:I.Int.count_leading_zeros ~op_name:"clz" ~to_string:Hex.to_string_hum
in
List.iter ~f numbers;
[%expect
{|
clz 0x0 = 63
clz 0x1 = 62
clz 0x7 = 60
clz 0x3fff_ffff_ffff_ffff = 1
clz -0x4000_0000_0000_0000 = 0
clz -0x1 = 0
|}];
let f =
test ~op:I.Int.count_leading_zeros2 ~op_name:"clz2" ~to_string:Hex.to_string_hum
in
List.iter ~f numbers;
[%expect
{|
clz2 0x0 = 63
clz2 0x1 = 62
clz2 0x7 = 60
clz2 0x3fff_ffff_ffff_ffff = 1
clz2 -0x4000_0000_0000_0000 = 0
clz2 -0x1 = 0
|}]
;;
let%expect_test "clz nativeint" =
let open Nativeint in
let numbers =
[ 0n (* Int.num_bits *)
; 1n (* Int.num_bits - 1 *)
; 7n (* Int.num_bits - 3 *)
; max_value
; min_value
; -1n
]
in
let f =
test ~op:I.Nativeint.count_leading_zeros ~op_name:"clz" ~to_string:Hex.to_string_hum
in
List.iter ~f numbers;
[%expect
{|
clz 0x0 = 64
clz 0x1 = 63
clz 0x7 = 61
clz 0x7fff_ffff_ffff_ffff = 1
clz -0x8000_0000_0000_0000 = 0
clz -0x1 = 0
|}]
;;
[%%else]
let%expect_test "clz int" =
let open Int in
let numbers =
[ 0 (* Int.num_bits *)
; 1 (* Int.num_bits - 1 *)
; 7 (* Int.num_bits - 3 *)
; max_value
; min_value
; -1
]
in
let f =
test ~op:I.Int.count_leading_zeros ~op_name:"clz" ~to_string:Hex.to_string_hum
in
List.iter ~f numbers;
[%expect
{|
clz 0x0 = 31
clz 0x1 = 30
clz 0x7 = 28
clz 0x3fff_ffff = 1
clz -0x4000_0000 = 0
clz -0x1 = 0
|}];
let f =
test ~op:I.Int.count_leading_zeros2 ~op_name:"clz2" ~to_string:Hex.to_string_hum
in
List.iter ~f numbers;
[%expect
{|
clz2 0x0 = 31
clz2 0x1 = 30
clz2 0x7 = 28
clz2 0x3fff_ffff = 1
clz2 -0x4000_0000 = 0
clz2 -0x1 = 0
|}]
;;
let%expect_test "clz nativeint" =
let open Nativeint in
let numbers =
[ 0n (* Int.num_bits *)
; 1n (* Int.num_bits - 1 *)
; 7n (* Int.num_bits - 3 *)
; max_value
; min_value
; -1n
]
in
let f =
test ~op:I.Nativeint.count_leading_zeros ~op_name:"clz" ~to_string:Hex.to_string_hum
in
List.iter ~f numbers;
[%expect
{|
clz 0x0 = 32
clz 0x1 = 31
clz 0x7 = 29
clz 0x7fff_ffff = 1
clz -0x8000_0000 = 0
clz -0x1 = 0
|}]
;;
[%%endif]