Daniel, I knew you’d have an answer!
Thanks again, Sean. On 6 Nov 2013, at 16:06, Daniel Diaz <[email protected]> wrote: > Hi Sean, > > you can use current_predicate to get the Name/Arity of present predicates and > then test the Name. > For instance, to get a predicate starting with 'test_' you can use the > following (reexecutable by backtracking) : > > | ?- current_predicate(Name/_Arity), atom_concat('test_', _, Name). > > Name = test_blabla1 ; > Name = test_blabla2 ; > ... > > You can then collect them in a list L with: > > | ?- findall(Name, (current_predicate(Name/_Arity), atom_concat('test_', _, > Name)), L). > > L = [test_blabla1,test_blabla2,...] > > To check if the name ends by '_test' simply use atom_concat(_, '_test', > Name). > > If you want to only collect predicates without arguments simply replace > _Arity by 0. > > Daniel > > > Le 05/11/2013 22:27, Sean Charles a écrit : >> Hi, >> >> I just wrote a *really simple* testing framework for my project, it looks >> like this at the test script end: >> >> test_package([it('should ensure that global values have expected settings', >> defaults_correctly_set_test) >> ,it('should correctly set the quiet flag on "-q"', respect_quiet('-q')) >> ,it('should correctly set the quiet flag on "--quiet"', >> respect_quiet('--quiet')) >> ,it('should correctly set the wrap flag on "--wrap"', respect_wrap) >> ,it('should correctly set the check flag on "--nocheck"', >> respect_check) >> ,it('should add unhandled options as source filenames', filename_check) >> ,it('should throw exceptions on unknown options', >> handle_unknown_options) >> ]). >> >> The test_package predicate is called from the framework by the script, the >> script pulls in the file and that has an initialisation instruction: >> >> :- initialization(run_tests). >> >> run_tests :- >> test_package(AllTests), >> maplist(call, AllTests), >> ink(normal, '*done*'), >> stop. >> >> >> What would have made it *really* nice was to have been able to find all >> predicates starting with test_ or ending with _test etc. so that I would not >> have needed to make the test_package predicate unify the variable with the >> list of tests to be run. Some tests mentioned above... >> >> defaults_correctly_set_test :- >> cl_set_defaults, >> get_all_globals([],[],user_input,user_output,php,nowrap,check,plain,noisy). >> >> >> respect_quiet(Flag) :- >> cl_set_defaults, >> process_option(Flag), >> get_all_globals(_,_,_,_,_,_,_,_,quiet). >> >> >> As you can see, having to enter the test predicate AND enter it in the test >> package isn’t ideal ALTHOUGH it does allow me to provide a nice label but I >> could have done that with a really long predicate name anyway. >> >> So, how would I do that in GNU Prolog…if it is possible. The listing() >> predicate is not much help in this instance… >> >> Thanks, >> 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 > > > -- > 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
