PageRenderTime 11ms CodeModel.GetById 2ms app.highlight 4ms RepoModel.GetById 1ms app.codeStats 1ms

/tutorial/backtracking/tiny_prolog/test_pam.e

http://github.com/tybor/Liberty
Specman e | 213 lines | 150 code | 55 blank | 8 comment | 0 complexity | e04f4c087beec2c1e2a37ad43b5a471c MD5 | raw file
  1
  2class TEST_PAM
  3
  4inherit
  5
  6	PAM_GLOBALS
  7
  8creation
  9
 10	make
 11
 12feature
 13
 14	pam_pro: PAM_PROCESSOR;
 15
 16	pam_printer: PAM_PRINTER;
 17
 18	pam_parser : PAM_EXPR_PARSER;
 19
 20feature
 21
 22	make is
 23		do
 24			!!pam_pro.make;
 25			!!pam_printer.make;
 26			!!pam_parser.make;
 27
 28			-- test1;
 29			-- test2;
 30			-- test3;
 31			-- test4;
 32			-- test5;
 33			-- test6;
 34			test7;
 35			-- test8;
 36		end
 37
 38	parse (txt: STRING) is
 39		do
 40			pam_parser.parse (txt);
 41			if
 42				pam_parser.error_detected
 43			or else
 44				pam_parser.warning_detected
 45			or else
 46				pam_parser.query
 47			then
 48				print (pam_parser.error_message);
 49				die_with_code (exit_failure_code);
 50			end
 51		end
 52
 53	query (txt: STRING) is
 54		do
 55			pam_parser.parse (txt);
 56			if
 57				pam_parser.error_detected
 58			or else
 59				pam_parser.warning_detected
 60			or else
 61				pam_parser.fact
 62			then
 63				print (pam_parser.error_message);
 64				die_with_code (exit_failure_code);
 65			end;
 66			pam_pro.query (pam_parser.parsed_expr);
 67		end
 68
 69feature -- tests
 70
 71	test1 is
 72		do
 73			print ("-----------%N");
 74
 75			parse("p(f(X),h(Y,f(a)),Y).");
 76			pam_printer.print_fact(pam_parser.parsed_expr,-1);
 77			parse("p(Z,h(Z,W),f(W)).");
 78			pam_printer.print_fact(pam_parser.parsed_expr,-1);
 79			parse("p(Z,h(Z,W),f(W)):-t(Z,W),!,y(W,_).");
 80			pam_printer.print_fact(pam_parser.parsed_expr,-1);
 81
 82			print ("-----------%N");
 83		end
 84
 85	test2 is
 86		do
 87			print ("-----------%N");
 88
 89			parse("cons([],R,R).");
 90			parse("cons([H1|T1],L2,[H1|R]) :- cons(T1,L2,R).");
 91
 92			print ("-----------%N");
 93
 94			query("cons([a,b,c],[e,f,g],R)?");
 95		end
 96
 97	test3 is
 98		do
 99			print ("-----------%N");
100
101			parse("mix([],[],[]).");
102			parse("mix([H1|T1],L2,[H1|R]) :- mix(T1,L2,R).");
103			parse("mix(L1,[H2|T2],[H2|R]) :- mix(L1,T2,R).");
104
105			print ("-----------%N");
106
107			query("mix([a,b],[e],R)?");
108		end
109
110	test4 is
111		do
112			print ("-----------%N");
113
114			parse("dans([X|Y],[],X,Y).");
115			parse("dans([X|Y],[X|T],D,Q):-dans(Y,T,D,Q).");
116
117			print ("-----------%N");
118
119			query("dans([a,b,c,d,e],T,R,Q)?");
120			query("dans([a,b,c,d,e],_,R,L)?");
121		end
122
123	test5 is
124		do
125			print ("-----------%N");
126
127			parse("permu([],[]).");
128			parse("permu([X|Y],[D|R]):-dans([X|Y],T,D,Q),cons(T,Q,Z),permu(Z,R).");
129
130			print ("-----------%N");
131
132			query("permu([a,b,c,d],R)?");
133		end
134
135	test6 is
136		do
137			print ("-----------%N");
138
139			--parse("in([c|Y],c):-!.");
140			parse("in([X|Y],X).");
141			parse("in([_|Y],Z):-in(Y,Z).");
142
143			print ("-----------%N");
144
145			query("in([a,b,c],R)?");
146		end
147
148	test7 is
149		do
150			print ("-----------%N");
151
152			parse("clues(Maisons):-%
153			%maison(A, Maisons), couleur(A, rouge), nationalite(A, anglais),     %
154			%maison(B, Maisons), nationalite(B, espagnol), animal(B, chien),     %
155			%maison(C, Maisons), couleur(C, vert), boit(C, cafe),                %
156			%maison(D, Maisons), nationalite(D, ukrainien), boit(D, the),        %
157			%adroite(Maisons, E, F), couleur(E, vert), couleur(F, ivoire),       %
158			%maison(G, Maisons), fume(G, winston), animal(G, escargot),          %
159			%maison(H, Maisons), fume(H, kools), couleur(H, jaune),              %
160			%milieu(Maisons, I), boit(I, lait),                                  %
161			%premiere(Maisons, J), nationalite(J, norvegien),                    %
162			%voisins(Maisons, K, L), fume(K, chesterfields), animal(L, renard),  %
163			%voisins(Maisons, M, N), fume(M, kools), animal(N, cheval),          %
164			%maison(O, Maisons), fume(O, luckystrike), boit(O, jus_d_orange),    %
165			%maison(P, Maisons), nationalite(P, japonais), fume(P, parliaments), %
166			%voisins(Maisons, Q, R), nationalite(Q, norvegien), couleur(R, bleu).");
167
168			parse("couleur(maison(C,_,_,_,_), C).");
169			parse("nationalite(maison(_,N,_,_,_), N).");
170			parse("animal(maison(_,_,P,_,_), P).");
171			parse("boit(maison(_,_,_,D,_), D).");
172			parse("fume(maison(_,_,_,_,S), S).");
173
174			parse("premiere(maisons(X,_,_,_,_), X).");
175
176			parse("milieu(maisons(_,_,X,_,_), X).");
177
178			parse("adroite(maisons(L,R,_,_,_), R, L).");
179			parse("adroite(maisons(_,L,R,_,_), R, L).");
180			parse("adroite(maisons(_,_,L,R,_), R, L).");
181			parse("adroite(maisons(_,_,_,L,R), R, L).");
182
183			parse("voisins(Xs, X, Y):-adroite(Xs, X, Y).");
184			parse("voisins(Xs, X, Y):-adroite(Xs, Y, X).");
185
186			parse("maison(X, maisons(X,_,_,_,_)).");
187			parse("maison(X, maisons(_,X,_,_,_)).");
188			parse("maison(X, maisons(_,_,X,_,_)).");
189			parse("maison(X, maisons(_,_,_,X,_)).");
190			parse("maison(X, maisons(_,_,_,_,X)).");
191
192			print ("-----------%N");
193
194			query("clues(Maisons),%
195						%maison(X, Maisons), animal(X, zebre), nationalite(X, ZebraOwner),%
196						%maison(Y, Maisons), boit(Y, eau), nationalite(Y, WaterDrinker)?");
197		end
198
199	test8 is
200		do
201			print ("-----------%N");
202
203			parse("plus(s(X),Y,s(Z)):-plus(X,Y,Z).");
204			parse("plus(z,X,X).");
205
206			print ("-----------%N");
207
208			query("plus(X,Y,s(s(s(s(z)))))?");
209		end
210
211end -- class TEST_PAM
212
213