% WAM tabling smoke tests (call-by-variant).

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

:- table(path/2).
:- table(p/1).

edge(a,b).
edge(b,c).
edge(c,a).
edge(c,d).

path(X,Y) :- edge(X,Y).
path(X,Y) :- edge(X,Z), path(Z,Y).

% Left recursion: should terminate under tabling.
p(X) :- p(X).
p(1).

ok :-
  current_prolog_flag(flowlog_engine_active, wam),
  setof(X, path(a,X), Xs),
  Xs = [a,b,c,d],
  setof(Y, p(Y), Ys),
  Ys = [1].
