Test Util

Jan Burse, erstellt 02. Jul 2019
* The Prolog text for the testing utilities.
* Warranty & Liability
* To the extent permitted by applicable law and unless explicitly
* otherwise agreed upon, XLOG Technologies GmbH makes no warranties
* regarding the provided information. XLOG Technologies GmbH assumes
* no liability that any problems might be solved with the information
* provided by XLOG Technologies GmbH.
* Rights & License
* All industrial property rights regarding the information - copyright
* and patent rights in particular - are the sole property of XLOG
* Technologies GmbH. If the company was not the originator of some
* excerpts, XLOG Technologies GmbH 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 GmbH.
* for(N):
* The predicate succeeds N times.
% for(+Integer)
for(N) :-
N > 1,
M is N-1,
* test(N, G):
* The predicate succeeds for N times executing the goal G.
% test(+Integer, +Goal)
:- meta_predicate(test(?,0)).
test(N, X) :-
call(X), fail.
test(_, _).
* show(T, G):
* The predicate succeeds in writing the cpu time T and the gc time G.
% show(+Integer, +Integer)
show(T, G) :-
write('\tin '),
write(' gc) ms'), nl.
* bench(M, X, T, G):
* The predicates succeeds in measuring the cpu time T and the gc time G
* for M times executing the goal X.
% bench(+Integer, +Goal, -Integer, -Integer)
:- meta_predicate(bench(?,0,?,?)).
bench(M, X, T, G) :-
test(M, X),
T is T2-T1,
G is G2-G1,
sys_func(X, F, _),
show(T, G).
* dummy:
* The predicate succeeds.
* sys_func(C, F, A):
* The predicate succeeds for the functor F and arity A of the callable C.
% sys_func(+Callable, -Atom, -Integer):
sys_func(X, _, _) :-
sys_func(M:X, M:F, A) :- !,
sys_func(X, F, A).
sys_func(X, F, A) :-
functor(X, F, A).