Danieal,

Mission accomplished!

I ran with what you gave me and I now have a process that executes tests in the 
same order as they are declared in the source text. I had to learn (very 
quickly) about the A-B pair notation, something I had not seen before but as 
with the predicate indicator thing, once you know how it works the rest is 
easy…easier.

Here’s what I ended up with:
run_tests :-
        get_all_tests(AllTests),
        keysort(AllTests, SortedTests),
        maplist(exec_test, SortedTests),

The get_all_tests/1 predicate and the supporting acts look like this:
get_all_tests(Tests) :-
        setof(Line-Name, get_one_test(Name, Line), Tests).


get_one_test(Name, Line) :-
        current_predicate(Name/0),
        atom_concat('test_', _, Name),
        predicate_property(Name, prolog_line(Line)).


exec_test(_-TestFunction) :- /* omitted for brevity! */

Essentially I get all the test_ predicates then keysort/2 them into line number 
order and then maplist/2 over the exec_test/1 function which is now modified to 
accept a pair. Damn that’s useful to know!

So, once again, thank you very mud for your support in helping me out.

I am going to try to finish my Redis tests over the weekend and then I am going 
to update my “main” project with this improved code. in fact, I might even 
create a little github project and then include it as a dependency or something 
like that later on.

Have a great weekend!
:)
Sean.




_______________________________________________
Users-prolog mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/users-prolog

Reply via email to