1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
(* TEST
*)
(* Testing the hash function Hashtbl.hash *)
(* What is tested:
- reproducibility on various platforms, esp. 32/64 bit issues
- equal values hash equally, esp NaNs. *)
open Printf
let _ =
printf "-- Strings:\n";
printf "\"\"\t\t%08x\n" (Hashtbl.hash "");
printf "\"Hello world\"\t%08x\n" (Hashtbl.hash "Hello world");
printf "-- Integers:\n";
printf "0\t\t%08x\n" (Hashtbl.hash 0);
printf "-1\t\t%08x\n" (Hashtbl.hash (-1));
printf "42\t\t%08x\n" (Hashtbl.hash 42);
printf "2^30-1\t\t%08x\n" (Hashtbl.hash 0x3FFF_FFFF);
printf "-2^30\t\t%08x\n" (Hashtbl.hash (-0x4000_0000));
printf "-- Floats:\n";
printf "+0.0\t\t%08x\n" (Hashtbl.hash 0.0);
printf "-0.0\t\t%08x\n" (Hashtbl.hash (-. 0.0));
printf "+infty\t\t%08x\n" (Hashtbl.hash infinity);
printf "-infty\t\t%08x\n" (Hashtbl.hash neg_infinity);
printf "NaN\t\t%08x\n" (Hashtbl.hash nan);
printf "NaN#2\t\t%08x\n"
(Hashtbl.hash (Int64.float_of_bits 0xFF_F0_00_12_34_56_78_9AL));
printf "NaN#3\t\t%08x\n" (Hashtbl.hash (0.0 /. 0.0));
printf "-- Native integers:\n";
printf "0\t\t%08x\n" (Hashtbl.hash 0n);
printf "-1\t\t%08x\n" (Hashtbl.hash (-1n));
printf "42\t\t%08x\n" (Hashtbl.hash 42n);
printf "2^30-1\t\t%08x\n" (Hashtbl.hash 0x3FFF_FFFFn);
printf "-2^30\t\t%08x\n" (Hashtbl.hash (-0x4000_0000n));
printf "-- Lists:\n";
printf "[0..10]\t\t%08x\n" (Hashtbl.hash [0;1;2;3;4;5;6;7;8;9;10]);
printf "[0..12]\t\t%08x\n" (Hashtbl.hash [0;1;2;3;4;5;6;7;8;9;10;11;12]);
printf "[10..0]\t\t%08x\n" (Hashtbl.hash [10;9;8;7;6;5;4;3;2;1;0]);
()
|