% WAM-lite dynamic database predicates (assert*/retract*/abolish/clause) smoke tests.

:- catch(set_prolog_flag(flowlog_engine, wam), _, true).

ok :-
    set_prolog_flag(unknown, fail),

    % Start from a clean slate (undefined predicates are ok for retractall/1).
    retractall(p(_)),
    retractall(q(_)),

    asserta(p(a)),
    assertz(p(b)),
    findall(X, p(X), Xs),
    Xs = [a, b],

    retract(p(a)),
    findall(X, p(X), Xs2),
    Xs2 = [b],

    assertz((q(b) :- p(b))),
    clause(q(b), Body),
    Body = p(b),

    abolish(q/1),
    \+ current_predicate(q/1),
    !.

