/* CHANGELOG by M.Banbara
  - print_times/4 --> print_times/5
  - report_csv/2 is added.
  - rename index/1  --> my_index/1
*/

/* This program is called with "index(N)"                         */
/* It tests the efficiency of simple indexing on the 1st argument */
/* suggested value for N: 500 (interp), 2000(comp) */
/* results for Cprolog: N=500  */
/* Tloop=8.98 Tcomp=0.52 Tnet=8.47 Klips=1.24  */

my_index(N)
     :- statistics(runtime,[T1|_]),
        index_loop(N), statistics(runtime,[T2|_]),
        compens_loop(N), statistics(runtime,[T3|_]),
        print_times(index(N),T1,T2,T3,N,21).

/* loop with calls to the actual benchmark program for indexing */
index_loop(0).
index_loop(X) :- p(a), p([a]), p(s(a)), /* queries to the actual */
                 p(b), p([b]), p(t(b)), /* benchmark program     */
                 p(c), p([c]), p(u(c)),
                 p(d), p([d]), p(v(d)),
                 p(e), p([e]), p(w(e)),
                 p(f), p([f]), p(x(f)),
                 p(g), p([g]), p(y(g)),
                 Y is X - 1, index_loop(Y).

/* compensation loop */
compens_loop(0).
compens_loop(X) :- Y is X - 1, compens_loop(Y).

/* test program which can be optimised by indexing */
p(a).
p([a]).
p(s(a)).
p(b).
p([b]).
p(t(b)).
p(c).
p([c]).
p(u(c)).
p(d).
p([d]).
p(v(d)).
p(e).
p([e]).
p(w(e)).
p(f).
p([f]).
p(x(f)).
p(g).
p([g]).
p(y(g)).

%print_times(T1,T2,T3,X,I) :-        /* prints the results */
%        TT1 is T2 - T1,
%        TT2 is T3 - T2,
%        TT is TT1 - TT2,
%        write('T first loop:     '),write(TT1), nl,
%        write('T compens loop:   '),write(TT2), nl,
%        write('T net:            '),write(TT),nl,
%        write('KLips:            '),
%        Li is I * X,
%        Lips is Li / TT,
%        KLips is Lips / 1000,
%        write(KLips),nl,nl.

print_times(Name,T1,T2,T3,X,I) :-        /* prints the results */
        TT1 is T2 - T1,
        TT2 is T3 - T2,
        TT is TT1 - TT2,
        write('# Name:             '),write(Name), nl,
        write('# T first loop:     '),write(TT1), write(' msec.'),nl,
        write('# T compens loop:   '),write(TT2), write(' msec.'),nl,
        write('# T net:            '),write(TT),write(' msec.'),nl,
        write('# KLips:            '),
        Li is I * X,
        Lips is Li / TT,
        KLips is Lips / 1000,
        write(KLips),nl,
	report_csv(['###CSV###',Name,TT1,TT2,TT,KLips], ','),
	nl.

report_csv([], _) :- !.
report_csv([X], _) :- !, write(X), nl.
report_csv([X|Xs], Delim) :- write(X), write(Delim), report_csv(Xs, Delim).
