1:- module(tap_expand, []).    2
    3:- use_module(library(tap/raw), [term_wants_tap_expansion/0]).    4
    5:- dynamic test_case/1.    6:- dynamic user:term_skips_tap_expansion/1.    7user:term_expansion(Clause, _) :-
    8    Clause = (Head :- _),
    9    % collect test cases with explicit names
   10    term_wants_tap_expansion,
   11    \+ term_skips_tap_expansion(Clause),
   12    tap:assertz(test_case(Head)),
   13    fail.  % do no real expansion
   14user:term_expansion(Clause, (Head :- Clause)) :-
   15    % collect test cases whose name is the test content
   16    term_wants_tap_expansion,
   17    \+ functor(Clause, :-, _),
   18    Clause \== end_of_file,
   19    \+ term_skips_tap_expansion(Clause),
   20    format(atom(Head), "~w", [Clause]),
   21    Head \== Clause,
   22    tap:assertz(test_case(Head)).
   23user:term_expansion(Fact, (Fact :- true)) :-
   24    % collect test cases which are just facts
   25    term_wants_tap_expansion,
   26    functor(Fact, _, 0),
   27    Fact \== end_of_file,
   28    \+ term_skips_tap_expansion(Fact),
   29    tap:assertz(test_case(Fact))