2:- module( ytest, [
run_test/1,
7 op(
990, xfx, returns)] ).
16:-
dynamic error/3,
failed/3.
20use_module
:term_expansion( test( (
A,
B) ), ytest
:test(
Lab,
Cond,
Done ) )
:-
21 info((
A,
B),
Lab,
Cond ,
Done ).
31 test(
Lab, (
G returns
Sols given
Program ),
Done),
35 assertall(
Program,
Refs),
36 conj2list(
Sols,
LSols ),
38 catch( do_returns(
M:G,
LSols,
Lab),
Ball, end(
Ball ) ),
39 shutdown(
Streams,
Refs ).
41 test(
Lab, (
G returns
Sols ),
Done),
45 conj2list(
Sols,
LSols ),
47 catch( do_returns(
M:G,
LSols,
Lab),
Ball, end(
Ball ) ),
48 shutdown(
Streams,
_ ).
50info((
A,
B),
Lab,
Cl,
G)
:- info,
53info(
A,
_,
_,
_)
:- var(
A),
var.
54info(
A returns
B,
_, (
A returns
B), g(
_,ok))
:- info.
55info(
A,
A,
_, g(ok,
_))
:- primitive(
A),
primitive.
58do_returns(
G0 ,
Sols0,
Lab )
:-
60 fetch(
I,
Sols0,
Pattern0,
Next),
61 Pattern0 = (
V0 =@= Target0 ),
63 catch( answer(
G,
VGF,
Target0,
Lab,
Sol) ,
Error,
Sol = error(
G,
Error) ),
64 step(
_I,
Sols,
G0,
Sol,
Lab ),
67answer(
G,
V,
Target0,
Lab, answer(
G))
:-
73 failure(
V,
Target0,
Lab)
76step(
I,
Sols ,
G0,
Sol,
Lab )
:-
78 fetch(
I,
Sols,
Pattern,
Next),
87 Pattern = (
Error -> G),
92 error(
I,
G0,
Error,
Pattern,
Lab )
96 Next == ...
-> throw( done )
98 Next == []
-> throw( done )
106error(
_,
G,
E,
_ ,
Lab)
:-
111failure(
G,
Pattern,
Lab)
:-
114 assert(failed(
Lab,
G,
Pattern)).
129shutdown(
_Streams,
Refs )
:-
131 maplist( erase,
Refs ).
133test_error(
Ball, e(
Ball ) ).
135fetch(
0, [
A ],
A, [])
:-
137fetch(
0, [
A,
B | _ ],
A,
B)
:-
139fetch(
I0, [
_ | L ] ,
A,
B)
:-
147 format(
'~n~n~w: error, error ~w.~n', [
Lab,
E] ),
148 writeln( error
: E: B ),
154 format(
'~n~n~w: failed, ~w =\\@= ~w.~n', [
Lab,
V,
P] ),
165assertall(
Cls,
Refs)
:-
166 conj2list(
Cls,
LCls),
169ensure_ground( g(
Lab,
Ok))
:-
172ensure_ground( g(
Lab,
Ok))
:-
catch( : Goal,+ Exception,+ Action)
nb_setval(+ Name,+ Value)
nb_getval(+ Name, - Value)
numbervars( t,+ _N1,- Nn)
maplist( 2:Pred, + List1,+ List2)