[GIT] ppl/ppl(master): Added unit tests for inner class PIP_Tree_Node:: Artificial_Parameter.

Module: ppl/ppl Branch: master Commit: b89a40da063ca44e5e28e0fad8a1001361cc131c URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=b89a40da063ca...
Author: Enea Zaffanella zaffanella@cs.unipr.it Date: Tue Feb 16 14:38:15 2010 +0100
Added unit tests for inner class PIP_Tree_Node::Artificial_Parameter. Added operator!=() and swap() methods: the last was necessary as we were inheriting it from Linear_Expression.
---
src/PIP_Tree.cc | 13 ++++++++-- src/PIP_Tree.defs.hh | 14 +++++++++-- src/PIP_Tree.inlines.hh | 6 +++++ tests/PIP_Problem/ascii_dump_load1.cc | 22 ++++++++++++++++++ tests/PIP_Problem/exceptions1.cc | 19 +++++++++++++++ tests/PIP_Problem/pipproblem2.cc | 40 +++++++++++++++++++++++++++++++++ 6 files changed, 108 insertions(+), 6 deletions(-)
diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc index 8a38aca..e92664f 100644 --- a/src/PIP_Tree.cc +++ b/src/PIP_Tree.cc @@ -291,8 +291,9 @@ PIP_Tree_Node::PIP_Tree_Node(const PIP_Tree_Node& y) }
bool -operator==(const PIP_Tree_Node::Artificial_Parameter& x, - const PIP_Tree_Node::Artificial_Parameter& y) { +PIP_Tree_Node::Artificial_Parameter +::operator==(const PIP_Tree_Node::Artificial_Parameter& y) const { + const Artificial_Parameter& x = *this; if (x.space_dimension() != y.space_dimension()) return false; if (x.denominator != y.denominator) @@ -305,6 +306,12 @@ operator==(const PIP_Tree_Node::Artificial_Parameter& x, return true; }
+bool +PIP_Tree_Node::Artificial_Parameter +::operator!=(const PIP_Tree_Node::Artificial_Parameter& y) const { + return !operator==(y); +} + void PIP_Tree_Node::Artificial_Parameter::ascii_dump(std::ostream& s) const { s << "artificial_parameter "; @@ -1809,7 +1816,7 @@ PIP_Solution_Node::solve(const PIP_Problem& problem, // Do nothing if the j-th pivot element is zero. if (s_pivot_j == 0) continue; - // ENEA: FIXME: why iterating downwards makes a difference? + // FIXME: why iterating downwards makes a difference? // for (dimension_type i = num_rows; i-- > 0; ) { for (dimension_type i = 0; i < num_rows; ++i) { Row& s_i = tableau.s[i]; diff --git a/src/PIP_Tree.defs.hh b/src/PIP_Tree.defs.hh index b7b8577..cfaed23 100644 --- a/src/PIP_Tree.defs.hh +++ b/src/PIP_Tree.defs.hh @@ -243,9 +243,17 @@ public: //! Returns the normalized (i.e., positive) denominator. Coefficient_traits::const_reference get_denominator() const;
- //! Returns \b true if \p x and \p y are equal. - friend bool operator==(const Artificial_Parameter& x, - const Artificial_Parameter& y); + //! Swaps \p *this with \p y. + void swap(Artificial_Parameter& y); + + //! Returns \c true if and only if \p *this and \p y are equal. + /*! + Note that two artificial parameters having different space dimensions + are considered to be different. + */ + bool operator==(const Artificial_Parameter& y) const; + //! Returns \c true if and only if \p *this and \p y are different. + bool operator!=(const Artificial_Parameter& y) const;
PPL_OUTPUT_DECLARATIONS
diff --git a/src/PIP_Tree.inlines.hh b/src/PIP_Tree.inlines.hh index 6544e59..9c86647 100644 --- a/src/PIP_Tree.inlines.hh +++ b/src/PIP_Tree.inlines.hh @@ -145,6 +145,12 @@ PIP_Tree_Node::Artificial_Parameter::get_denominator() const { return denominator; }
+inline void +PIP_Tree_Node::Artificial_Parameter::swap(Artificial_Parameter& y) { + Linear_Expression::swap(y); + std::swap(denominator, y.denominator); +} + } // namespace Parma_Polyhedra_Library
#endif // !defined(PPL_PIP_Tree_inlines_hh) diff --git a/tests/PIP_Problem/ascii_dump_load1.cc b/tests/PIP_Problem/ascii_dump_load1.cc index d4c814e..d0cbceb 100644 --- a/tests/PIP_Problem/ascii_dump_load1.cc +++ b/tests/PIP_Problem/ascii_dump_load1.cc @@ -224,6 +224,27 @@ test07() { return ok; }
+bool +test08() { + typedef PIP_Tree_Node::Artificial_Parameter Art_Param; + + Variable A(0); + + Art_Param ap1(3*A + 8, -5); + std::stringstream ss1; + ap1.ascii_dump(ss1); + + Art_Param ap2; + bool ok = ap2.ascii_load(ss1); + + std::stringstream ss2; + ap2.ascii_dump(ss2); + + ok &= (ap1 == ap2) && (ss1.str() == ss2.str()); + + return ok; +} + } // namespace
BEGIN_MAIN @@ -234,4 +255,5 @@ BEGIN_MAIN DO_TEST(test05); DO_TEST(test06); DO_TEST(test07); + DO_TEST(test08); END_MAIN diff --git a/tests/PIP_Problem/exceptions1.cc b/tests/PIP_Problem/exceptions1.cc index 5b27b09..3f01ab1 100644 --- a/tests/PIP_Problem/exceptions1.cc +++ b/tests/PIP_Problem/exceptions1.cc @@ -258,6 +258,24 @@ test11() { return false; }
+bool +test12() { + typedef PIP_Tree_Node::Artificial_Parameter Art_Param; + Variable A(0); + + try { + // Trying to set an invalid (zero) denominator. + Art_Param ap(3*A + 8, 0); + } + catch (std::invalid_argument& e) { + nout << "invalid_argument: " << e.what() << endl << endl; + return true; + } + catch (...) { + } + return false; +} + } // namespace
BEGIN_MAIN @@ -272,4 +290,5 @@ BEGIN_MAIN DO_TEST(test09); DO_TEST(test10); DO_TEST(test11); + DO_TEST(test12); END_MAIN diff --git a/tests/PIP_Problem/pipproblem2.cc b/tests/PIP_Problem/pipproblem2.cc index 06ae7f7..8f476e4 100644 --- a/tests/PIP_Problem/pipproblem2.cc +++ b/tests/PIP_Problem/pipproblem2.cc @@ -244,6 +244,45 @@ test13() { return ok; }
+bool +test14() { + // Some unit testing on inner class Artificial_Parameter. + typedef PIP_Tree_Node::Artificial_Parameter Art_Param; + + Variable A(0); + + Art_Param ap0; + Art_Param ap1(3*A + 8, -5); + Art_Param ap2(ap1); + + bool ok = ap0.OK() && ap1.OK() && ap2.OK(); + + ok &= (ap0 != ap1) && (ap1 == ap2); + ok &= (ap0.get_denominator() == 1) && (ap1.get_denominator() == 5); + + ap0.swap(ap2); + ok &= (ap0 == ap1) && (ap2.get_denominator() == 1); + + using namespace IO_Operators; + nout << ap1; + + ok &= (ap1.external_memory_in_bytes() < ap1.total_memory_in_bytes()); + + // Difference found in space dimension. + ok &= (ap1 != ap2); + // Difference found in denominator. + Art_Param ap3(3*A + 8, -6); + ok &= (ap1 != ap3); + // Difference found in inhomogeneous term. + Art_Param ap4(3*A + 7, -5); + ok &= (ap1 != ap4); + // Difference found in A's coefficient. + Art_Param ap5(2*A + 8, -5); + ok &= (ap1 != ap5); + + return ok; +} + } // namespace
BEGIN_MAIN @@ -260,4 +299,5 @@ BEGIN_MAIN DO_TEST(test11); DO_TEST(test12); DO_TEST(test13); + DO_TEST(test14); END_MAIN
participants (1)
-
Enea Zaffanella