:- include('../ec_test_incl').
/*

   Test A

*/

do_test(stdtest+3) :-
     testing_msg('Test 3'),
     abdemo_special(easy,[holds_at(have(o1),t), holds_at(have(o2),t),
          holds_at(have(o3),t)], R).

do_test(stdtest+4) :-
     testing_msg('Test 4'),
     abdemo_special(easy,[holds_at(have(o1),t), holds_at(have(o2),t),
          holds_at(have(o3),t), holds_at(have(o4),t)], R).

do_test(stdtest+5) :-
     abdemo_special(easy,[holds_at(have(o1),t), holds_at(have(o2),t),
          holds_at(have(o3),t), holds_at(have(o4),t),
          holds_at(have(o5),t)], R).

do_test(stdtest+6) :-
     testing_msg('Test 6'),
     abdemo_special(easy,[holds_at(have(o1),t), holds_at(have(o2),t),
          holds_at(have(o3),t), holds_at(have(o4),t),
          holds_at(have(o5),t), holds_at(have(o6),t)], R).

do_test(stdtest+7) :-
     abdemo_special(easy,[holds_at(have(o1),t), holds_at(have(o2),t),
          holds_at(have(o3),t), holds_at(have(o4),t),
          holds_at(have(o5),t), holds_at(have(o6),t),
          holds_at(have(o7),t)], R).



do_test(stdtest+8) :-
     testing_msg('Test 8 - 111 sicstus'),
     abdemo_special(easy,[holds_at(have(o1),t), holds_at(have(o2),t),
          holds_at(have(o3),t), holds_at(have(o4),t),
          holds_at(have(o5),t), holds_at(have(o6),t),
          holds_at(have(o7),t), holds_at(have(o8),t)], R).

do_test(benchtest+9) :-
     abdemo_special(long,[holds_at(have(o1),t), holds_at(have(o2),t),
          holds_at(have(o3),t), holds_at(have(o4),t),
          holds_at(have(o5),t), holds_at(have(o6),t),
          holds_at(have(o7),t), holds_at(have(o8),t),
          holds_at(have(o9),t)], R).

do_test(benchtest+10+long) :-
     testing_msg('Test 10'),
     abdemo_special(long,[holds_at(have(o1),t), holds_at(have(o2),t),
          holds_at(have(o3),t), holds_at(have(o4),t),
          holds_at(have(o5),t), holds_at(have(o6),t),
          holds_at(have(o7),t), holds_at(have(o8),t),
          holds_at(have(o9),t), holds_at(have(o10),t)], R).

do_test(benchtest+12+long) :-
     testing_msg('Test 12'),
     abdemo_special(long,[holds_at(have(o1),t), holds_at(have(o2),t),
          holds_at(have(o3),t), holds_at(have(o4),t),
          holds_at(have(o5),t), holds_at(have(o6),t),
          holds_at(have(o7),t), holds_at(have(o8),t),
          holds_at(have(o9),t), holds_at(have(o10),t),
          holds_at(have(o11),t), holds_at(have(o12),t)], R).

do_test(benchtest+14+long) :-
     testing_msg('Test 14'),
     abdemo_special(long,[holds_at(have(o1),t), holds_at(have(o2),t),
          holds_at(have(o3),t), holds_at(have(o4),t),
          holds_at(have(o5),t), holds_at(have(o6),t),
          holds_at(have(o7),t), holds_at(have(o8),t),
          holds_at(have(o9),t), holds_at(have(o10),t),
          holds_at(have(o11),t), holds_at(have(o12),t),
          holds_at(have(o13),t), holds_at(have(o14),t)], R).

do_test(benchtest+16+long) :-
     testing_msg('Test 16'),
     abdemo_special(long,[
          holds_at(have(o1),t), 
          holds_at(have(o2),t),
          holds_at(have(o3),t), holds_at(have(o4),t),
          holds_at(have(o5),t), holds_at(have(o6),t),
          holds_at(have(o7),t), holds_at(have(o8),t),
          holds_at(have(o9),t), holds_at(have(o10),t),
          holds_at(have(o11),t), holds_at(have(o12),t),
          holds_at(have(o13),t), holds_at(have(o14),t),
          holds_at(have(o15),t), holds_at(have(o16),t)], R).


make_test_n(Max,Haves):-
  findall(holds_at(have(O),t),
    (between(1,Max,N),atom_concat(o,N,O)),Haves).
   
do_test(benchtest+19+long) :-
     testing_msg('Test 19'),
     make_test_n(19, Haves),
     dbginfo(haves=Haves),!,
     abdemo_special(long, Haves, R).

do_test(benchtest+20+long) :-
     testing_msg('Test 20'),
     make_test_n(20, Haves),
     dbginfo(haves=Haves),!,
     abdemo_special(long, Haves, R).



:- use_module(library(ec_planner/ec_loader)).

% axiom(initiates(go(X),at(X),T),[]).
% axiom(terminates(go(X),at(Y),T),[diff(X,Y)]).
event(go(store)).
fluent(at(store)).
%:- rtrace.
initiates(go(X),at(X)).
%:- break.
terminates(go(X), at(Y)) <- X \= Y.

% axiom(initiates(buy(X),have(X),T),[sells(Y,X), holds_at(at(Y),T)]).
event(buy(object)).
fluent(at(store)).
predicate(sells(store,object)).
fluent(have(object)).
initiates(buy(X), have(X)) <- sells(Y, X), at(Y).


:- 
  forall((between(1, 64, N), 
        atom_concat(s,N,S),atom_concat(o,N,O)),
    process_ec(sells(S,O))).

/*
axiom(sells(s1,o1),[]).
axiom(sells(s2,o2),[]).
axiom(sells(s3,o3),[]).
axiom(sells(s4,o4),[]).
axiom(sells(s5,o5),[]).
axiom(sells(s6,o6),[]).
axiom(sells(s7,o7),[]).
axiom(sells(s8,o8),[]).
axiom(sells(s9,o9),[]).
axiom(sells(s10,o10),[]).
axiom(sells(s11,o11),[]).
axiom(sells(s12,o12),[]).
axiom(sells(s13,o13),[]).
axiom(sells(s14,o14),[]).
axiom(sells(s15,o15),[]).
axiom(sells(s16,o16),[]).
*/





/* Abduction policy */

%abducible(dummy).
%executable(go(X)).
%executable(buy(X)).


:- listing([ec_current_domain_db, axiom]).

