
Module: ppl/ppl Branch: master Commit: 8ceb0b7e208be8a99d61372f883c1853ce390952 URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=8ceb0b7e208be...
Author: Patricia Hill p.m.hill@leeds.ac.uk Date: Sat Mar 20 21:49:18 2010 +0000
Added missing code for logic_error exception.
---
interfaces/Prolog/ppl_prolog_common.defs.hh | 3 + tests/Grid/frequency1.cc | 64 +++++++++++++++++++++++++++ tests/Octagonal_Shape/frequency1.cc | 31 +++++++++++++ 3 files changed, 98 insertions(+), 0 deletions(-)
diff --git a/interfaces/Prolog/ppl_prolog_common.defs.hh b/interfaces/Prolog/ppl_prolog_common.defs.hh index bb3e245..ce3fb55 100644 --- a/interfaces/Prolog/ppl_prolog_common.defs.hh +++ b/interfaces/Prolog/ppl_prolog_common.defs.hh @@ -413,6 +413,9 @@ void handle_exception(const std::length_error& e);
void +handle_exception(const std::logic_error& e); + +void handle_exception(const std::bad_alloc&);
void diff --git a/tests/Grid/frequency1.cc b/tests/Grid/frequency1.cc index d4727e4..1ee313e 100644 --- a/tests/Grid/frequency1.cc +++ b/tests/Grid/frequency1.cc @@ -267,6 +267,67 @@ test11() { return ok && (gr == known_gr); }
+bool +test12() { + Variable A(0); + Variable B(1); + + Grid gr(2); + gr.add_constraint(A == 0); + gr.add_congruence(B %= 0); + + Coefficient num; + Coefficient den; + Coefficient valn; + Coefficient vald; + bool ok = (gr.frequency(Linear_Expression(A), num, den, valn, vald) + && num == 0 && den == 1 && valn == 0 && vald == 1); + print_congruences(gr, "*** gr ***"); + + return ok; +} + +bool +test13() { + Variable A(0); + Variable B(1); + + Grid gr(2); + gr.add_constraint(A == 0); + gr.add_constraint(B == 0); + + Coefficient num; + Coefficient den; + Coefficient valn; + Coefficient vald; + bool ok = (gr.frequency(Linear_Expression(A), num, den, valn, vald) + && num == 0 && den == 1 && valn == 0 && vald == 1); + print_congruences(gr, "*** gr ***"); + + return ok; +} + +bool +test14() { + Variable A(0); + Variable B(1); + + Grid gr(2); + gr.add_congruence((A %= 0) / 1); + gr.add_congruence((2*A - B %= 0) / 2); + print_congruences(gr, "*** gr ***"); + + Coefficient num; + Coefficient den; + Coefficient valn; + Coefficient vald; + bool ok = (gr.frequency(Linear_Expression(B), num, den, valn, vald) + && num == 2 && den == 1 && valn == 0 && vald == 1); + print_congruences(gr, "*** gr ***"); + nout << num << den; + return ok; +} + } // namespace
BEGIN_MAIN @@ -281,4 +342,7 @@ BEGIN_MAIN DO_TEST(test09); DO_TEST(test10); DO_TEST(test11); + DO_TEST(test12); + DO_TEST(test13); + DO_TEST(test14); END_MAIN diff --git a/tests/Octagonal_Shape/frequency1.cc b/tests/Octagonal_Shape/frequency1.cc index 8184a0c..652a5e0 100644 --- a/tests/Octagonal_Shape/frequency1.cc +++ b/tests/Octagonal_Shape/frequency1.cc @@ -291,6 +291,36 @@ test12() { return ok; }
+bool +test13() { + Variable A(0); + Variable B(1); + Variable C(2); + + TOctagonal_Shape os(3); + os.add_constraint(4*A - 4*B == 1); + o.add_constraint(3*C == 1); + o.add_constraint(B <= 2); + + Coefficient num; + Coefficient den; + Coefficient valn; + Coefficient vald; + bool discrete = os.frequency(Linear_Expression(A - B), + num, den, valn, vald); + // If the shape is based on an integral coefficient type, then + // approximations will induce non discreteness of the linear expression. + bool ok + = std::numeric_limits<TOctagonal_Shape::coefficient_type_base>::is_integer + ? (!discrete && num == 0 && den == 0 && valn == 0 && vald == 0) + : (discrete && num == 0 && den == 1 && valn == 1 && vald == 4); + print_constraints(os, "*** os ***"); + nout << "num " << num << ", den " << den << endl; + nout << "valn " << valn << ", vald " << vald << endl; + + return ok; +} + } // namespace
BEGIN_MAIN @@ -306,4 +336,5 @@ BEGIN_MAIN DO_TEST(test10); DO_TEST(test11); DO_TEST(test12); + DO_TEST(test13); END_MAIN