module Utils : sig type queryset = { documents : (string * int) array; queries : string array; } val make_queryset : string list -> string list -> queryset type stats = { mutable query : int; mutable input_document : int; mutable input_size : int; mutable print_output : bool; mutable input_parsing_time : float; mutable query_compile_time : float; mutable query_execution_time : float; mutable serialization_time : float; mutable memory_usage : int; } type stats_token = Query of int | Input_document of int | Print_output of int | Input_size of int | Input_parsing_time of int | Query_compile_time of int | Query_execution_time of int | Serialization_time of int | Memory_usage of int val print_stats : Format.formatter -> stats -> unit val empty_stats : unit -> stats type result = (string * string) * stats array list val parse_result : int -> in_channel -> stats -> (string * stats_token list) list -> unit val build_xquery : string -> string -> string -> bool -> unit val build_xslt : string -> string -> string -> bool -> unit end module type CONFIGURATION = sig val path : string val result_basename : string val num_runs : int val run_without_output : bool val run_with_output : bool end module type ENGINE = sig val name : string val description : string val command : string val mk_queryfile : bool -> string -> string -> string -> unit val mk_cmdline : bool -> string -> string -> string -> string -> string list val time_factor : float val reference : bool val parse_rules : (string * Utils.stats_token list) list end module type ENGINE_TESTER = sig module Conf : CONFIGURATION val test_engine : Utils.result list -> Utils.queryset -> Utils.result list end module INIT_TESTER : functor (C : CONFIGURATION) -> ENGINE_TESTER module MK : functor (E : ENGINE) -> functor (C : ENGINE_TESTER) -> ENGINE_TESTER