Determinate tests are tests that must succeed exactly once, leaving no choicepoints behind. The test-body supplies proper values for the input arguments and verifies the output arguments. Verification can use test-options or be explicit in the test-body. The tests in the example below are equivalent.
test(add1) :-
A is 1 + 2,
A =:= 3.
test(add2, [true(A =:= 3)]) :-
A is 1 + 2.
The test engine verifies that the test-body does not leave a choicepoint. We illustrate this using the test below:
test(member1) :-
member(b, [a,b,c]).
Although this test succeeds, member/2 leaves a choicepoint
behind, which is reported by the test harness. To make the test
silent, use one of the alternatives below.
test(member2) :-
memberchk(b, [a,b,c]).
test(member3) :-
member(b, [a,b,c]), !.
test(member4, [nondet]) :-
member(b, [a,b,c]).