|
From: | Sean Charles |
Subject: | Re: Predicate ordering when using current_predicate/1 |
Date: | Fri, 22 Nov 2013 22:43:38 +0000 |
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. |
[Prev in Thread] | Current Thread | [Next in Thread] |