[PPL-devel] [GIT] ppl/ppl(pip): Added first tests in OK() methods of PIP_Tree classes.

François Galea francois.galea at uvsq.fr
Fri Sep 11 16:26:01 CEST 2009


Module: ppl/ppl
Branch: pip
Commit: 0c02e3b5a945d83ad4760bb4e014614442769464
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=0c02e3b5a945d83ad4760bb4e014614442769464

Author: François Galea <francois.galea at uvsq.fr>
Date:   Fri Sep 11 16:24:49 2009 +0200

Added first tests in OK() methods of PIP_Tree classes.

---

 src/PIP_Tree.cc      |   80 ++++++++++++++++++++++++++++++++++++++++++++++++-
 src/PIP_Tree.defs.hh |   13 ++++----
 2 files changed, 84 insertions(+), 9 deletions(-)

diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc
index 9a768c9..b7948f5 100644
--- a/src/PIP_Tree.cc
+++ b/src/PIP_Tree.cc
@@ -97,14 +97,90 @@ PIP_Decision_Node::as_decision() {
 }
 
 bool
+PIP_Solution_Node::Tableau::OK() const {
+#ifndef NDEBUG
+  using std::endl;
+  using std::cerr;
+#endif
+
+  const dimension_type num_rows = s.num_rows();
+  if (num_rows != t.num_rows()) {
+#ifndef NDEBUG
+    cerr << "The PIP_Solution_Node::Tableau matrices do not have the "
+         << "same number of rows."
+         << endl;
+#endif
+    return false;
+  }
+  return true;
+}
+
+bool
+PIP_Tree_Node::OK() const {
+#ifndef NDEBUG
+  using std::endl;
+  using std::cerr;
+#endif
+  Constraint_System::const_iterator begin = constraints_.begin();
+  Constraint_System::const_iterator end = constraints_.end();
+
+  // Parameter constraint system should contain no strict inequalities.
+  for (Constraint_System::const_iterator c = begin; c != end; c++)
+    if (c->is_strict_inequality()) {
+#ifndef NDEBUG
+      cerr << "The feasible region of the PIP_Problem parameter context"
+           << "is defined by a constraint system containing strict "
+           << "inequalities."
+	   << endl;
+      ascii_dump(cerr);
+#endif
+      return false;
+    }
+  return true;
+}
+
+bool
 PIP_Solution_Node::OK() const {
-  /* FIXME: write me! */
+  /* FIXME: finish me! */
+#ifndef NDEBUG
+  using std::endl;
+  using std::cerr;
+#endif
+  if (!PIP_Tree_Node::OK())
+    return false;
+
+  // Check that every member used is OK.
+
+  if (!tableau.OK())
+    return false;
+
   return true;
 }
 
 bool
 PIP_Decision_Node::OK() const {
-  /* FIXME: write me! */
+  /* FIXME: finish me! */
+#ifndef NDEBUG
+  using std::endl;
+  using std::cerr;
+#endif
+  if (!PIP_Tree_Node::OK())
+    return false;
+
+  // Decision nodes with false child must have exactly one constraint
+  if (false_child) {
+    dimension_type
+        dist = std::distance(constraints_.begin(), constraints_.end());
+    if (dist != 1) {
+#ifndef NDEBUG
+      cerr << "The PIP_Decision_Node has a 'false' child but does not "
+           << "have exactly one parametric constraint. (" << dist << ")"
+           << endl;
+#endif
+      return false;
+    }
+  }
+
   return true;
 }
 
diff --git a/src/PIP_Tree.defs.hh b/src/PIP_Tree.defs.hh
index 5a3f476..acb8b2a 100644
--- a/src/PIP_Tree.defs.hh
+++ b/src/PIP_Tree.defs.hh
@@ -58,7 +58,7 @@ public:
   virtual ~PIP_Tree_Node();
 
   //! Returns \c true if and only if \p *this is well formed.
-  virtual bool OK() const = 0;
+  bool OK() const;
 
 protected:
   //! A type alias for a sequence of constraints.
@@ -69,6 +69,9 @@ protected:
   friend class PIP_Problem;
   friend class PIP_Decision_Node;
 
+  //! The local system of parameter constraints.
+  Constraint_System constraints_;
+
   /*! \brief
     Populates the parametric simplex tableau using external data, if necessary
 
@@ -206,6 +209,8 @@ private:
     Rational_Matrix s;
     //! The matrix of parameter coefficients.
     Rational_Matrix t;
+    //! Returns \c true if and only if \p *this is well formed.
+    bool OK() const;
   };
 
   //! The parametric simplex tableau.
@@ -249,9 +254,6 @@ private:
   //! A cache for computed sign values of constraint parametric RHS.
   std::vector<Row_Sign> sign;
 
-  //! The local system of parameter constraints.
-  Constraint_System constraints_;
-
   //! Determines the sign of given Row.
   static Row_Sign row_sign(const Row &x);
 
@@ -347,9 +349,6 @@ private:
   //! Pointer to the "false" child of \p *this.
   PIP_Tree_Node* false_child;
 
-  //! The local system of parameter constraints
-  Constraint_System constraints_;
-
   /*! \brief
     Constructs if \p cs then \p tcp \p else \p fcp.
 




More information about the PPL-devel mailing list