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 ) ).
 | 
						|
 | 
						|
    
 | 
						|
     |