34 lines
		
	
	
		
			635 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			635 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
| :- op(test, fx, 1200).
 | |
| 
 | |
| test_mode.
 | |
| 
 | |
| test( ( G  :- Sols ) :-
 | |
|       reset_sols,
 | |
|       init_io( Streams ),
 | |
|       catch( do_test(G, Sols), Done,  handler( Done ) ).
 | |
|       close_io( Streams ).
 | |
| 
 | |
| do_test(G0, Sols)
 | |
|       copy_term(G0, G),
 | |
|       catch( ( G, answer(G, Sol) ) , Error, test_error(Error, Sol) ),
 | |
|       next_solution( I, Sol, G0, Sol ),
 | |
|       !.
 | |
| do_test(G, Sols) :-
 | |
|     counter(I),
 | |
|     failure(G, Sols, I).
 | |
| 
 | |
| next_solution( I, Sol , G0, Sols ) :-
 | |
|     inc(I),
 | |
|     fetch(I, Sols, Pattern, Next),
 | |
|     (
 | |
|      Sol =@= Pattern
 | |
|     ->
 | |
|      success(I, G0)
 | |
|     ;
 | |
|      error(I, G0, Sol )
 | |
|     ),
 | |
|     ( var(Next) -> throw( done ) ).
 | |
| 
 | |
|     
 | |
|      |