% vim: syntax=prolog :- module(test, [ test_main/0, test_main/1]). :- use_module(library(format)). test_main :- findall(test(Name, Goal), test(Name, Goal), Tests), run_tests(Tests, Failed), show_failed(Failed), halt. test_main(Tests) :- run_tests(Tests, Failed), show_failed(Failed), halt. portray_failed_([]) --> []. portray_failed_([F|Fs]) --> "\"", F, "\"", "\n", portray_failed_(Fs). portray_failed([]) --> []. portray_failed([F|Fs]) --> "\n", "Failed tests:", "\n", portray_failed_([F|Fs]). show_failed(Failed) :- phrase(portray_failed(Failed), F), format("~s", [F]). run_tests([], []). run_tests([test(Name, Goal)|Tests], Failed) :- format("Running test \"~s\"~n", [Name]), ( call(Goal) -> Failed = Failed1 ; format("Failed test \"~s\"~n", [Name]), Failed = [Name|Failed1] ), run_tests(Tests, Failed1). run_tests_quiet([], []). run_tests_quiet([test(Name, Goal)|Tests], Failed) :- ( call(Goal) -> Failed = Failed1 ; Failed = [Name|Failed1] ), run_tests_quiet(Tests, Failed1). assert_p(A, B) :- phrase(portray_clause_(A), Portrayed), phrase((B, ".\n"), Portrayed). call_residual_goals(Goal, ResidualGoals) :- call_residue_vars(Goal, Vars), variables_residual_goals(Vars, ResidualGoals). variables_residual_goals(Vars, Goals) :- phrase(variables_residual_goals(Vars), Goals). variables_residual_goals([]) --> []. variables_residual_goals([Var|Vars]) --> dif:attribute_goals(Var), variables_residual_goals(Vars).