Prolog "bench"

Admin User, erstellt 28. Okt. 2024
         
/**
* 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.
*/
/********************************************************************/
/* Batch Launcher */
/********************************************************************/
% main
main :- current_prolog_flag(dialect, gprolog), !,
current_prolog_flag(argv, [_|List]),
dispatch(List).
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),
legend_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,
legend_batch([Tag]),
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]) :- !,
reports_begin,
(load_root(Root),
reports_add(Root),
unload_meta,
unload_result, fail; true),
reports_end.
dispatch([]).
/********************************************************************/
/* Incremental Report */
/********************************************************************/
% reports_begin
reports_begin :-
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)]),
fail; true).
% reports_add(+Atom)
reports_add(Root) :-
env(test, Test),
root(Root, _, Subtitle),
write('Adding reports '), write(Root), write(' ...'), nl,
findall(Tag, temp(Tag, _), List),
(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), multi(true)]),
fail; true).
% reports_end
reports_end :-
env(test, Test),
(env(report(Lang), Dest),
Lang \== '$ensure_directory',
atom_concat(Dest, Test, Dest2),
report_end(Dest2, []),
fail; true).
/********************************************************************/
/* Dumps Lifecycle */
/********************************************************************/
% load_root(-Atom)
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).