Prolog "bench"
/**
* The Prolog text that defines the test suite.
*
* Warranty & Liability
* To the extent permitted by applicable law and unless explicitly
* otherwise agreed upon, XLOG Technologies AG makes no warranties
* regarding the provided information. XLOG Technologies AG assumes
* no liability that any problems might be solved with the information
* provided by XLOG Technologies AG.
*
* Rights & License
* All industrial property rights regarding the information - copyright
* and patent rights in particular - are the sole property of XLOG
* Technologies AG. If the company was not the originator of some
* excerpts, XLOG Technologies AG has at least obtained the right to
* reproduce, change and translate the information.
*
* Reproduction is restricted to the whole unaltered document. Reproduction
* of the information is only allowed for non-commercial uses. Selling,
* giving away or letting of the execution of the library is prohibited.
* The library can be distributed as part of your applications and libraries
* for execution provided this comment remains unchanged.
*
* Restrictions
* Only to be distributed with programs that add significant and primary
* functionality to the library. Not to be distributed with additional
* software intended to replace any components of the library.
*
* Trademarks
* Jekejeke is a registered trademark of XLOG Technologies AG.
*/
:- ensure_loaded(library(util/sequence)).
:- ensure_loaded(library(tester/runner)).
:- ensure_loaded(library(tester/report)).
/********************************************************************/
/* Batch Launcher */
/********************************************************************/
% main
main :-
current_prolog_flag(argv, [_|List]),
dispatch(List).
% dispatch(+List)
dispatch([meta]) :- !,
env(test, Test),
host(Root),
root(Root, Dump, _),
ensure_directory(Dump),
atom_concat(Dump, Test, Dump3),
ensure_directory(Dump3),
meta_batch,
write('Generating meta ...'), nl,
atom_concat(Dump3, 'meta.p', Temp),
dump_meta(Temp).
dispatch([dump,Tag]) :- !,
env(test, Test),
host(Root),
root(Root, Dump, _),
atom_concat(Dump, Test, Dump3),
write('Cold run ...'), nl,
measure_batch(Tag),
write('Warm run ...'), nl,
measure_batch(Tag),
write('Generating dump ...'), nl,
temp(Tag, A),
atom_concat(Dump3, A, Temp),
dump_result(Temp).
dispatch([report,MaxAtom]) :-
atom_number(MaxAtom, Max),
findall(Tag, temp(Tag, _), List),
length(List, N),
findall(X-A, (call_nth(root(_, _, A), I), X is (N+1)*(I-1)+N/2), Map),
length(Map, M),
K is (N+1)*M-1,
sys_reports_begin(Map, K, Max),
(call_nth(sys_load_root(Root), Group),
sys_reports_add(Root, Group, List, K, Max),
sys_unload_root,
fail; true),
sys_reports_end.
/********************************************************************/
/* Incremental Report */
/********************************************************************/
% sys_reports_begin(+Map, +Integer, +Number)
sys_reports_begin(Map, K, Max) :-
env(test, Test),
env(title, Title),
(env(report(Lang), Dest),
ensure_directory(Dest),
Lang \== '$ensure_directory',
atom_concat(Dest, Test, Dest2),
report_begin(Dest2, [title(Title), locale(Lang)]),
chart_begin(Dest2, [xaxis(Map),maxx(K),maxy(Max)]),
fail; true).
% sys_reports_add(+Atom, +Integer, +List, +Integer, +Number)
sys_reports_add(Root, Group, List, K, Max) :-
env(test, Test),
root(Root, _, Subtitle),
write('Adding reports '), write(Root), write(' ...'), nl,
(env(report(Lang), Dest),
Lang \== '$ensure_directory',
env(source(Lang), Src),
file_directory_name(Src, Dir),
file_base_name(Src, Name),
atom_concat(Dest, Test, Dest2),
atom_concat(Dir, Test, Src2),
atom_concat(Src2, Name, Src3),
report_add(Dest2, List, [tests(Src3), locale(Lang),
root(Root), subtitle(Subtitle)]),
chart_add(Dest2, List, [group(Group),maxx(K),maxy(Max)]),
fail; true).
% sys_reports_end
sys_reports_end :-
env(test, Test),
(env(report(Lang), Dest),
Lang \== '$ensure_directory',
atom_concat(Dest, Test, Dest2),
chart_link(Dest2, []),
report_end(Dest2, [chart(true)]),
chart_end(Dest2, []),
fail; true).
/********************************************************************/
/* Dumps Lifecycle */
/********************************************************************/
% sys_load_root(-Atom)
sys_load_root(Root) :-
env(test, Test),
root(Root, Dump, _),
atom_concat(Dump, Test, Dump3),
write('Loading meta '), write(Root), write(' ...'), nl,
atom_concat(Dump3, 'meta.p', Temp),
ensure_loaded(Temp),
write('Loading dumps '), write(Root), write(' ...'), nl,
(temp(_, A),
atom_concat(Dump3, A, Temp2),
ensure_loaded(Temp2),
fail; true).
% sys_unload_root
sys_unload_root :-
retractall(legend_table(_)),
retractall(legend_column(_,_)),
retractall(result_summary(_,_)),
retractall(result_suite(_,_,_)),
retractall(result_tests(_,_,_,_)),
retractall(result_pred(_,_,_,_,_,_)),
retractall(result(_,_,_,_,_,_,_)).