[PPL-devel] [GIT] ppl/ppl(master): Adding no space dims should not invalidate previously computed solution.

Enea Zaffanella zaffanella at cs.unipr.it
Sat Feb 20 12:53:13 CET 2010


Module: ppl/ppl
Branch: master
Commit: 511e9e86f96884b311d7b053aac33afb977129bb
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=511e9e86f96884b311d7b053aac33afb977129bb

Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date:   Sat Feb 20 12:52:19 2010 +0100

Adding no space dims should not invalidate previously computed solution.

---

 src/PIP_Problem.cc               |    5 +++++
 tests/PIP_Problem/pipproblem2.cc |   13 +++++++++++++
 2 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/src/PIP_Problem.cc b/src/PIP_Problem.cc
index 8dbae6d..6c3609e 100644
--- a/src/PIP_Problem.cc
+++ b/src/PIP_Problem.cc
@@ -510,6 +510,11 @@ void
 PPL::PIP_Problem
 ::add_space_dimensions_and_embed(const dimension_type m_vars,
                                  const dimension_type m_params) {
+  // Adding no space dims at all is a no-op:
+  // this avoids invalidating problem status (if it was optimized).
+  if (m_vars == 0 && m_params == 0)
+    return;
+
   // The space dimension of the resulting PIP problem should not
   // overflow the maximum allowed space dimension.
   dimension_type available = max_space_dimension() - space_dimension();
diff --git a/tests/PIP_Problem/pipproblem2.cc b/tests/PIP_Problem/pipproblem2.cc
index 8a20535..777c3bc 100644
--- a/tests/PIP_Problem/pipproblem2.cc
+++ b/tests/PIP_Problem/pipproblem2.cc
@@ -286,6 +286,18 @@ test14() {
   return ok;
 }
 
+bool
+test15() {
+  PIP_Problem pip;
+  bool ok = (pip.solve() == OPTIMIZED_PIP_PROBLEM);
+  // Adding no space dimension at all is a no-op:
+  // it does not invalidate the solution computed before.
+  pip.add_space_dimensions_and_embed(0, 0);
+  // This would throw an exception if the solution was invalidated.
+  pip.print_solution(nout);
+  return ok;
+}
+
 } // namespace
 
 BEGIN_MAIN
@@ -303,4 +315,5 @@ BEGIN_MAIN
   DO_TEST(test12);
   DO_TEST(test13);
   DO_TEST(test14);
+  DO_TEST(test15);
 END_MAIN




More information about the PPL-devel mailing list