Rework the testing script.
[tatoo.git] / src / tatoo.ml
diff --git a/src/tatoo.ml b/src/tatoo.ml
new file mode 100644 (file)
index 0000000..d6a1986
--- /dev/null
@@ -0,0 +1,52 @@
+(***********************************************************************)
+(*                                                                     *)
+(*                               TAToo                                 *)
+(*                                                                     *)
+(*                     Kim Nguyen, LRI UMR8623                         *)
+(*                   Université Paris-Sud & CNRS                       *)
+(*                                                                     *)
+(*  Copyright 2010-2012 Université Paris-Sud and Centre National de la *)
+(*  Recherche Scientifique. All rights reserved.  This file is         *)
+(*  distributed under the terms of the GNU Lesser General Public       *)
+(*  License, with the special exception on linking described in file   *)
+(*  ../LICENSE.                                                        *)
+(*                                                                     *)
+(***********************************************************************)
+
+(*
+  Time-stamp: <Last modified on 2013-03-13 21:29:17 CET by Kim Nguyen>
+*)
+
+let doc =
+  let fd = open_in Sys.argv.(1) in
+  let d = Tree.Naive.load_xml_file fd in
+  close_in fd; d
+
+
+let query =
+  let arg2 = Sys.argv.(2) in
+  Xpath.Parser.parse (Ulexing.from_latin1_string arg2)
+
+let auto =
+  Xpath.Compile.path query
+
+open Format
+
+let () =
+  fprintf err_formatter "Query: %a\n%!" Xpath.Ast.print_path query;
+  fprintf err_formatter "Automata: %a\n%!" Auto.Ata.print auto;
+  fprintf err_formatter "Evaluating automaton:\n%!";
+  let module Naive = Auto.Eval.Make(Tree.Naive) in
+  let t1 = Unix.gettimeofday() in
+  let results = Naive.eval auto doc (Tree.Naive.root doc) in
+  let teval = (Unix.gettimeofday () -. t1) *. 1000. in
+  let t1 = Unix.gettimeofday () in
+  output_string stdout "<xml_result>\n";
+  List.iter (fun n ->
+    Tree.Naive.print_xml stdout doc n;
+    output_char stdout '\n'
+  ) results;
+  output_string stdout "</xml_result>\n";
+  let tprint = (Unix.gettimeofday () -. t1) *. 1000. in
+  flush stdout;
+  fprintf err_formatter "evaluation time: %fms\nserialization time: %fms\n%!" teval tprint