[GIT] ppl/ppl(master): Added interface predicate for frequency().

Module: ppl/ppl Branch: master Commit: 490c97b15454bb992503324f57656f0f1c94d566 URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=490c97b15454b...
Author: Patricia Hill p.m.hill@leeds.ac.uk Date: Wed Mar 24 08:34:57 2010 +0000
Added interface predicate for frequency(). Generated test added.
---
.../ppl_interface_generator_prolog_cc_code.m4 | 28 +++++++++++++++++ .../ppl_interface_generator_prolog_hh_code.m4 | 8 +++++ ...erface_generator_prolog_procedure_generators.m4 | 1 + ...face_generator_prolog_generated_test_pl_code.m4 | 25 +++++++++++++++ .../tests/ppl_prolog_generated_test_common.pl | 33 ++++++++++++++++++++ 5 files changed, 95 insertions(+), 0 deletions(-)
diff --git a/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4 b/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4 index 8693093..89177df 100644 --- a/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4 +++ b/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4 @@ -1927,3 +1927,31 @@ m4_define(`ppl_@CLASS@_wrap_assign_code', }
') + +m4_define(`ppl_@CLASS@_frequency_code', + `extern "C" Prolog_foreign_return_type + ppl_@CLASS@_frequency(Prolog_term_ref t_ph, + Prolog_term_ref t_le_expr, + Prolog_term_ref t_freqn, Prolog_term_ref t_freqd, + Prolog_term_ref t_valn, Prolog_term_ref t_vald) { + static const char* where = "ppl_@CLASS@_frequency/6"; + try { + const @CPP_CLASS@* ph = term_to_handle<@CPP_CLASS@ >(t_ph, where); + PPL_CHECK(ph); + const Linear_Expression le = build_linear_expression(t_le_expr, where); + PPL_DIRTY_TEMP_COEFFICIENT(freqn); + PPL_DIRTY_TEMP_COEFFICIENT(freqd); + PPL_DIRTY_TEMP_COEFFICIENT(valn); + PPL_DIRTY_TEMP_COEFFICIENT(vald); + if (ph->frequency(le, freqn, freqd, valn, vald)) { + if (Prolog_unify_Coefficient(t_freqn, freqn) + && Prolog_unify_Coefficient(t_freqd, freqd) + && Prolog_unify_Coefficient(t_valn, valn) + && Prolog_unify_Coefficient(t_vald, vald)) + return PROLOG_SUCCESS; + } + } + CATCH_ALL; +} + +') diff --git a/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4 b/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4 index edf7a6a..1d3f594 100644 --- a/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4 +++ b/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4 @@ -572,3 +572,11 @@ m4_define(`ppl_@CLASS@_wrap_assign_code', Prolog_term_ref t_ind);
') + +m4_define(`ppl_@CLASS@_frequency_code', + `extern "C" Prolog_foreign_return_type + ppl_@CLASS@_frequency(Prolog_term_ref t_ph, Prolog_term_ref t_le_expr, + Prolog_term_ref t_freqn, Prolog_term_ref t_freqd, + Prolog_term_ref t_valn, Prolog_term_ref t_vald); + +') diff --git a/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4 b/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4 index 685844f..9e99852 100644 --- a/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4 +++ b/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4 @@ -87,6 +87,7 @@ ppl_MIP_Problem_ascii_dump/1`'dnl
m4_define(`m4_procedure_list', `m4_echo_unquoted(`m4_common_procedure_list', +ppl_@CLASS@_frequency/6 +simple, ppl_termination_test_@TERMINATION_ID@_@TOPOLOGY@@CLASS@/1 +simple, ppl_one_affine_ranking_function_@TERMINATION_ID@_@TOPOLOGY@@CLASS@/2 +simple, ppl_all_affine_ranking_functions_@TERMINATION_ID@_@TOPOLOGY@@CLASS@/2 +simple, diff --git a/interfaces/Prolog/tests/ppl_interface_generator_prolog_generated_test_pl_code.m4 b/interfaces/Prolog/tests/ppl_interface_generator_prolog_generated_test_pl_code.m4 index 70f7fe9..4ed6891 100644 --- a/interfaces/Prolog/tests/ppl_interface_generator_prolog_generated_test_pl_code.m4 +++ b/interfaces/Prolog/tests/ppl_interface_generator_prolog_generated_test_pl_code.m4 @@ -905,6 +905,31 @@ ppl_@CLASS@_@MAXMIN@_with_point_6_test :- ).
') +m4_define(`ppl_@CLASS@_frequency_code', +` +ppl_@CLASS@_frequency_6_test :- + ( + choose_test(TEST_DATA, Space_Dim), + ( + ppl_@TOPOLOGY@@CLASS@_build_test_object(TEST_DATA, PS, Space_Dim), + ppl_frequency_test_data(TEST_DATA, t_@TOPOLOGY@, @CONSTRAINER@, + LE, F_Nexptd, F_Dexptd, V_Nexptd, V_Dexptd, + SuccessFlag), + (SuccessFlag == true + -> + (ppl_@CLASS@_frequency(PS, LE, F_N, F_D, V_N, V_D), + F_N == F_Nexptd, F_D == F_Dexptd, + V_N == V_Nexptd, V_D == V_Dexptd) + ; + + ppl_@CLASS@_frequency(PS, LE, F_N, F_D, V_N, V_D) + ), + ppl_@CLASS@_OK(PS), + ppl_delete_@CLASS@(PS) + -> + fail ; true) + ). + +')
m4_define(`ppl_@CLASS@_@COMPARISON@_@CLASS@_code', ` diff --git a/interfaces/Prolog/tests/ppl_prolog_generated_test_common.pl b/interfaces/Prolog/tests/ppl_prolog_generated_test_common.pl index 8fe7451..589e664 100644 --- a/interfaces/Prolog/tests/ppl_prolog_generated_test_common.pl +++ b/interfaces/Prolog/tests/ppl_prolog_generated_test_common.pl @@ -140,6 +140,7 @@ choose_2_tests(TEST_DATA1, TEST_DATA2, Dim) :- :- discontiguous(ppl_property_test_data/4). :- discontiguous(ppl_bounds_test_data/5). :- discontiguous(ppl_maxmin_test_data/10). +:- discontiguous(ppl_frequency_test_data/9). :- discontiguous(ppl_constrains_test_data/3). :- dynamic(all_class_dependent_predicates/1). :- discontiguous(all_class_dependent_predicates/1). @@ -195,6 +196,8 @@ ppl_bounds_test_data(test00, _, 0, _, true).
ppl_maxmin_test_data(test00, _Topology, _, _, 0, _, _, _, _, false).
+ppl_frequency_test_data(test00, _Topology, _, 0, _, _, _, _, false). + /* Test data for test test01 (an empty object in 1 dimension) */
ppl_build_test_data(test01, _Topology, constraints, CS) :- @@ -240,6 +243,8 @@ ppl_bounds_test_data(test01, _, A, _, true) :-
ppl_maxmin_test_data(test01, _Topology, _, _, 0, _, _, _, _, false).
+ppl_frequency_test_data(test01, _Topology, _, 0, _, _, _, _, false). + ppl_constrains_test_data(test01, _, true).
/* Test data for test test02 (a universe object in 0 dimensions) */ @@ -273,6 +278,8 @@ ppl_maxmin_test_data(test02, _Topology, constraint, _, 0, 0, 1, true, ppl_maxmin_test_data(test02, _Topology, congruence, _, 0, 0, 1, true, grid_point(0), true).
+ppl_frequency_test_data(test02, _Topology, _, 0, 0, 1, 0, 1, true). + /* Test data for test test03 (a universe object in 1 dimension) */
ppl_build_test_data(test03, _Topology, constraints, CS) :- @@ -307,6 +314,8 @@ ppl_bounds_test_data(test03, _, A, _, false) :- ppl_maxmin_test_data(test03, _Topology, _, _, A, _, _, _, _, false) :- make_vars(1, [A]).
+ppl_frequency_test_data(test03, _Topology, _, 0, 0, 1, 0, 1, true). + ppl_constrains_test_data(test03, _, false).
/* Test data for test test04 and test05 @@ -351,6 +360,9 @@ ppl_maxmin_test_data(test04, _Topology, congruence, _, A, 1, 1, true, grid_point(A), true) :- make_vars(1, [A]).
+ppl_frequency_test_data(test04, _Topology, _, A, 0, 1, 1, 1, true) :- + make_vars(1, [A]). + ppl_constrains_test_data(test04, _, true).
ppl_build_test_data(test05, _Topology, constraints, CS) :- @@ -391,6 +403,9 @@ ppl_maxmin_test_data(test05, _Topology, congruence, _, A, -1, 1, true, grid_point(-1*A), true) :- make_vars(1, [A]).
+ppl_frequency_test_data(test05, _Topology, _, A, 0, 1, -1, 1, true) :- + make_vars(1, [A]). + ppl_constrains_test_data(test05, _, true).
/* Test data for test test06, @@ -456,6 +471,12 @@ ppl_maxmin_test_data(test06, t_NNC_, constraint, minimize, A, 0, 1, false, ppl_maxmin_test_data(test06, _, congruence, _, A, _, _, _, _, false) :- make_vars(1, [A]).
+ppl_frequency_test_data(test06, _Topology, constraint, A, _, _, _, _, false) :- + make_vars(1, [A]). + +ppl_frequency_test_data(test06, _Topology, congruence, A, 1, 1, 0, 1, true) :- + make_vars(1, [A]). + ppl_constrains_test_data(test06, _, true).
/* Test data for test test07, @@ -521,6 +542,12 @@ ppl_maxmin_test_data(test07, t_NNC_, constraint, maximize, A, 0, 1, false, ppl_maxmin_test_data(test07, _, congruence, _, A, _, _, _, _, false) :- make_vars(1, [A]).
+ppl_frequency_test_data(test07, _Topology, constraint, A, _, _, _, _, false) :- + make_vars(1, [A]). + +ppl_frequency_test_data(test07, _Topology, congruence, A, 1, 1, 0, 1, true) :- + make_vars(1, [A]). + ppl_constrains_test_data(test07, _, true).
/* Test data for test test08, @@ -589,6 +616,12 @@ ppl_maxmin_test_data(test08, t_NNC_, constraint, maximize, A, 5, 1, false, ppl_maxmin_test_data(test08, _, congruence, _, A, _, _, _, _, false) :- make_vars(1, [A]).
+ppl_frequency_test_data(test07, _Topology, constraint, A, _, _, _, _, false) :- + make_vars(1, [A]). + +ppl_frequency_test_data(test07, _Topology, congruence, A, 7, 2, 3, 2, true) :- + make_vars(1, [A]). + ppl_constrains_test_data(test08, _, true).
/* boxes */
participants (1)
-
Patricia Hill