if (node == NULLT)
return 0;
else {
- return 1+ iterfcns(tree,tree->NextSibling(node)) + iterfcns(tree,tree->FirstChild(node));
+ int tmp = iterfcns(tree,tree->FirstElement(node));
+ tmp += iterfcns(tree,tree->NextElement(node));
+ return tmp+1;
};
}
in
let _ = Printf.eprintf "Number of nodes %i\n%!" (Tree.size v) in
(* let _ = test_text v in *)
-(* let _ = Tree.stats v in
+(* let _ = Tree.stats v in *)
let _ = Printf.eprintf "Timing first_child/next_sibling %!" in
- let _ = time (Tree.benchmark_fcns) v in
+ let _ = time ~count:5 (Tree.benchmark_fcns) v in (*
let _ = Printf.eprintf "Timing last_child/prev_sibling %!" in
let _ = time (Tree.benchmark_lcps) v in
let _ = Printf.eprintf "Timing jump to a %!" in
if !Options.backward then Printf.eprintf "WARNING: couldn't find a jumping point, running top-down\n"
in
if !Options.count_only then
- let r = time_mem ( top_down_count auto ) v in
+ let r = time ~count:5 ( top_down_count auto ) v in
let _ = Printf.eprintf "Number of nodes in the result set : %i\n%!" r
in ()
else
Printf.eprintf "Final Mem: %s\n\n\n%!" s2;
r
;;
-let time f x =
+let time f ?(count=1) x =
+ let rec loop i =
let t1 = Unix.gettimeofday () in
let r = f x in
let t2 = Unix.gettimeofday () in
let t = (1000. *. (t2 -. t1)) in
- l:= t::!l;
- Printf.eprintf " %fms\n%!" t ;
- r
+ if i > count then (l:= t::!l;r)
+ else begin
+ Printf.eprintf "run %i/%i, %fms\n%!" i count t;
+ loop (i+1) end
+ in loop 1
;;
let total_time () = List.fold_left (+.) 0. !l;;