Daniel,

Your answers always leave me wondering why I didn’t see the “obvious” for 
myself…sigh. Well, I immediately went and read the relevant documentation and 
so I am sure I would have figured it out had I the intelligence to find 
predicate_property/2 myself!

I smell a good “meta-level” application coming on god dammit. I am never gong 
to finish my main project at this rate as I keep getting side-tracked by other 
shiny possibilities!

Armed with this then I will attempt now to re-jig my test framework and then 
complete the Redis client and put it out there for public consumption… I will 
probably make it compatible with SWI as well as it is pretty simple.

Thanks again,
All the best.
Sean.


On 22 Nov 2013, at 16:53, Daniel Diaz <[email protected]> wrote:

> Hi,
> 
> here is a piece of code doing what you want
> 
> get_tests(L) :-
>     setof(t(File, Line, Name), get_one_test(File, Line, Name), L).
> 
> 
> get_one_test(File, Line, Name) :-
>     current_predicate(Name/0),
>     atom_concat('test_', _, Name),
>     predicate_property(Name, prolog_file(File)),
>     predicate_property(Name, prolog_line(Line)).
> 
> 
> This returns a list containing triplets t(File, Line, Name) where File is the 
> file pathname of the test, Line is the line number in the source file and 
> Name the test name (beginning by test_). The list is sorted on File and then 
> on Line.
> 
> I keep the File in case your tests reside in different files, if it is not 
> the case you simplify the code by removing everything related to File 
> (including predicate_property(..., prolog_line(Line))).
> 
> If you only need the list of test names (and don't want the File and Line), 
> you can define 
> 
> get_tests_name(AllTests) :-
>     get_tests(L),
>     findall(Name, member(t(_,_,Name), L), AllTests).
> 
> 
> Then get_test_names does the job.
> 
> Daniel
> 
> 
> 
> Le 21/11/2013 16:48, emacstheviking a écrit :
>> Hi,
>> 
>> There is no mention of the actual order of returned predicates, recently I 
>> created a testing framework and it has this line of code thanks to Daniel,
>> 
>> findall(Name,(current_predicate(Name/0), atom_concat('test_', _, 
>> Name)),AllTests)
>> 
>> I am writing tests now that rely upon them being executed in the order that 
>> they are defined in the source file i.e. the temporal order in which they 
>> were added to the database I presume.
>> 
>> However, they do not seem to come out in the expected order unless I have 
>> done something wrong but the above line of code is what dictates the order 
>> of execution.
>> 
>> Sean.
>> 
> 
> 
> -- 
> Ce message a été vérifié par MailScanner pour des virus ou des polluriels et 
> rien de suspect n'a été trouvé.

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

Reply via email to