(* -*- mode: sml -*-
* $Id: hash.smlnj,v 1.3 2001/07/09 00:25:28 doug Exp $
* http://www.bagley.org/~doug/shootout/
*)
structure Test : sig
val main : (string * string list) -> OS.Process.status
end = struct
open HashTable;
fun hashtest n =
let
val hx = mkTable (HashString.hashString, op =) (n, (Fail "not found"))
fun doinserts i n =
if i < n then (
insert hx ((Int.fmt StringCvt.HEX i), i);
doinserts (i+1) n
) else ()
fun dolookups i c =
if i > 0 then
case find hx (Int.toString i) of
SOME key => dolookups (i-1) (c+1)
| _ => dolookups (i-1) c
else c
in (
doinserts 0 n;
dolookups n 0
) end;
fun atoi s = case Int.fromString s of SOME num => num | NONE => 0;
fun main(name, args) =
let
val arg = hd(args @ ["1"])
val num = atoi arg
val result = hashtest num
in
print (Int.toString result) ; print "\n" ;
OS.Process.success
end
end
val _ = SMLofNJ.exportFn("hash", Test.main);