108 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			108 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- object(dcgtest).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- info([
							 | 
						||
| 
								 | 
							
										version is 1.0,
							 | 
						||
| 
								 | 
							
										date is 2004/9/27,
							 | 
						||
| 
								 | 
							
										author is 'Paulo Moura',
							 | 
						||
| 
								 | 
							
										comment is 'Test cases for the Logtalk DCG translator.']).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- public(run/0).
							 | 
						||
| 
								 | 
							
									:- mode(run, one).
							 | 
						||
| 
								 | 
							
									:- info(run/0, [
							 | 
						||
| 
								 | 
							
										comment is 'Runs the Logtalk DCG translator on the test cases.']).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									run :-
							 | 
						||
| 
								 | 
							
										case(N, Rule),
							 | 
						||
| 
								 | 
							
										write('Test '), write(N), write(':'), nl,
							 | 
						||
| 
								 | 
							
										write('  '), writeq(Rule), nl,
							 | 
						||
| 
								 | 
							
										(catch(expand_term(Rule, Clause), Error, write_error(Error)) ->
							 | 
						||
| 
								 | 
							
											write('  '), writeq(Clause)
							 | 
						||
| 
								 | 
							
											;
							 | 
						||
| 
								 | 
							
											write('  FAILED TRANSLATION')),
							 | 
						||
| 
								 | 
							
										nl, nl,
							 | 
						||
| 
								 | 
							
										fail.
							 | 
						||
| 
								 | 
							
									run.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									write_error(Error) :-
							 | 
						||
| 
								 | 
							
										write('  ERROR: '), writeq(Error), nl, fail.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									% basic tests
							 | 
						||
| 
								 | 
							
									case( 1, (p --> b)).
							 | 
						||
| 
								 | 
							
									case( 2, (p --> 3)).
							 | 
						||
| 
								 | 
							
									case( 3, (p(X) --> b(X))).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									% metacall test
							 | 
						||
| 
								 | 
							
									case( 9, (p --> _)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									% terminal tests with list notation
							 | 
						||
| 
								 | 
							
									case(11, (p --> [])).
							 | 
						||
| 
								 | 
							
									case(12, (p --> [b])).
							 | 
						||
| 
								 | 
							
									case(13, (p --> [abc, xyz])).
							 | 
						||
| 
								 | 
							
									case(14, (p --> [abc | xyz])).
							 | 
						||
| 
								 | 
							
									case(15, (p --> [[], {}, 3, 3.2, a(b)])).
							 | 
						||
| 
								 | 
							
									case(16, (p --> [_])).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									% terminal tests with string notation
							 | 
						||
| 
								 | 
							
									case(17, (p --> "b")).
							 | 
						||
| 
								 | 
							
									case(18, (p --> "abc", "q")).
							 | 
						||
| 
								 | 
							
									case(19, (p --> "abc" ; "q")).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									% control construct tests
							 | 
						||
| 
								 | 
							
									case(21, (p --> b, c)).
							 | 
						||
| 
								 | 
							
									case(22, (p --> b ; c)).
							 | 
						||
| 
								 | 
							
									case(23, (p --> b -> c)).
							 | 
						||
| 
								 | 
							
									case(24, (p --> b -> c1, c2 ; d)).
							 | 
						||
| 
								 | 
							
									case(25, (p --> b -> c ; d1, d2)).
							 | 
						||
| 
								 | 
							
									case(26, (p --> b1, b2 -> c ; d)).
							 | 
						||
| 
								 | 
							
									case(27, (p --> q ; [])).
							 | 
						||
| 
								 | 
							
									case(28, (p --> [x] -> [] ; q)).
							 | 
						||
| 
								 | 
							
									case(29, (p --> [a] ; [b])).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									% negation tests
							 | 
						||
| 
								 | 
							
									case(31, (p --> \+ b, c)).
							 | 
						||
| 
								 | 
							
									case(32, (p --> b, \+ c, d)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									% {}/1 tests
							 | 
						||
| 
								 | 
							
									case(41, (p --> {b})).
							 | 
						||
| 
								 | 
							
									case(42, (p --> {3})).
							 | 
						||
| 
								 | 
							
									case(43, (p --> {c,d})).
							 | 
						||
| 
								 | 
							
									case(44, (p --> '{}'((c,d)))).
							 | 
						||
| 
								 | 
							
									case(45, (p --> {a}, {b}, {c})).
							 | 
						||
| 
								 | 
							
									case(46, (p --> {q} -> [a] ; [b])).
							 | 
						||
| 
								 | 
							
									case(47, (p --> {q} -> [] ; b)).
							 | 
						||
| 
								 | 
							
									case(48, (p --> [foo], {write(x)}, [bar])).
							 | 
						||
| 
								 | 
							
									case(49, (p --> [foo], {write(hello)},{nl})).
							 | 
						||
| 
								 | 
							
									case(50, (p --> [foo], {write(hello), nl})).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									% cut tests
							 | 
						||
| 
								 | 
							
									case(51, (p --> !, [a])).
							 | 
						||
| 
								 | 
							
									case(52, (p --> b, !, c, d)).
							 | 
						||
| 
								 | 
							
									case(53, (p --> b, !, c ; d)).
							 | 
						||
| 
								 | 
							
									case(54, (p --> [a], !, {fail})).
							 | 
						||
| 
								 | 
							
									case(55, (p(a), [X] --> !, [X, a], q)).
							 | 
						||
| 
								 | 
							
									case(56, (p --> a, ! ; b)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									% non-terminals corresponding to "graphic" characters or built-in operators 
							 | 
						||
| 
								 | 
							
									case(61, ('[' --> b, c)).
							 | 
						||
| 
								 | 
							
									case(62, ('=' --> b, c)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									% more tests
							 | 
						||
| 
								 | 
							
									case(71, (p --> true, c)).
							 | 
						||
| 
								 | 
							
									case(72, (p --> fail, c)).
							 | 
						||
| 
								 | 
							
									case(73, (p(X) --> call(X), c)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									% pushback tests
							 | 
						||
| 
								 | 
							
									case(81, (p, [t] --> b, c)).
							 | 
						||
| 
								 | 
							
									case(82, (p, [t] --> b, [t])).
							 | 
						||
| 
								 | 
							
									case(83, (p, [t] --> b, [s, t])).
							 | 
						||
| 
								 | 
							
									case(84, (p, [t] --> b, [s], [t])).
							 | 
						||
| 
								 | 
							
									case(85, (p(X, Y), [X, Y] --> [X, Y])).
							 | 
						||
| 
								 | 
							
									case(86, (p(a), [X] --> !, [X, a], q)).
							 | 
						||
| 
								 | 
							
									case(87, (p, [a,b] --> [foo], {write(hello), nl})).
							 | 
						||
| 
								 | 
							
									case(88, (p, [t], [t2] --> b, c)).
							 | 
						||
| 
								 | 
							
									case(89, (p, b --> c)).
							 | 
						||
| 
								 | 
							
									case(90, ([b], a(27) --> c)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_object.
							 |