From 0b2958ca541a64b5efa1f56f4a637930026324b0 Mon Sep 17 00:00:00 2001
From: Matt King <matthew.king@stfc.ac.uk>
Date: Thu, 8 Oct 2015 15:00:15 +0100
Subject: [PATCH] Functional tests complete

CompactMD now throws invalid arguement exception if the min extent is greater than max
.
Refs #13508
---
 Framework/MDAlgorithms/src/CompactMD.cpp    |  8 ++++++--
 Framework/MDAlgorithms/test/CompactMDTest.h | 12 ++++++------
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/Framework/MDAlgorithms/src/CompactMD.cpp b/Framework/MDAlgorithms/src/CompactMD.cpp
index c5b55d62f11..a999f14dc89 100644
--- a/Framework/MDAlgorithms/src/CompactMD.cpp
+++ b/Framework/MDAlgorithms/src/CompactMD.cpp
@@ -17,6 +17,10 @@ createPBinStringVector(std::vector<Mantid::coord_t> minVector,
   std::vector<std::string> pBinStrVector;
   for (size_t iter = 0; iter < numDims; iter++) {
     // creating pbin string using Min and Max Centre positions
+    if (minVector[iter] > maxVector[iter]) {
+      throw std::invalid_argument(
+          "Minimum extents MUST be less than Maximum extents");
+    }
     auto pBinStr = boost::lexical_cast<std::string>(
                        minVector[iter] -
                        (inputWs->getDimension(iter)->getBinWidth() * 0.5)) +
@@ -39,7 +43,7 @@ void CompactMD::findFirstNonZeroMinMaxExtents(
     IMDHistoWorkspace_sptr inputWs, std::vector<Mantid::coord_t> &minVec,
     std::vector<Mantid::coord_t> &maxVec) {
   auto ws_iter = inputWs->createIterator();
-  while (ws_iter->next()) {
+  do {
     if (ws_iter->getSignal() == 0) {
       // if signal is 0 then go to next index
       continue;
@@ -59,7 +63,7 @@ void CompactMD::findFirstNonZeroMinMaxExtents(
         }
       }
     }
-  }
+  } while (ws_iter->next());
 }
 
 void CompactMD::init() {
diff --git a/Framework/MDAlgorithms/test/CompactMDTest.h b/Framework/MDAlgorithms/test/CompactMDTest.h
index 076bbf8afdb..ef1a18a8fa4 100644
--- a/Framework/MDAlgorithms/test/CompactMDTest.h
+++ b/Framework/MDAlgorithms/test/CompactMDTest.h
@@ -171,7 +171,7 @@ public:
      * Input structure:
      *------------------
      *  -------------
-     *  |   |   |///|
+     *  |///|   |   |
      *  -------------
      * -3-2-1 0 1 2 3
      *---------------------------
@@ -194,22 +194,22 @@ public:
     const std::string name("test");
     auto inWS = MDEventsTestHelper::makeFakeMDHistoWorkspaceGeneral(
         numDims, signal, errorSquared, numBins, min, max, name);
-    inWS->setSignalAt(2, 1.0); // set right-most bin signal to one
-
+    inWS->setSignalAt(0, 1.0); // set right-most bin signal to one
     CompactMD alg;
     alg.setChild(true);
     alg.setRethrows(true);
     alg.initialize();
     alg.setProperty("InputWorkspace", inWS);
     alg.setProperty("OutputWorkspace", "out");
-    alg.execute();
+    TS_ASSERT_THROWS_NOTHING(alg.execute());
     IMDHistoWorkspace_sptr outputWorkspace = alg.getProperty("OutputWorkspace");
+    TS_ASSERT(outputWorkspace);
     TSM_ASSERT_EQUALS("Should have a signal of 1.0: ",
                       outputWorkspace->getSignalAt(0), 1);
     TSM_ASSERT_EQUALS("Minimum should be cut to 1: ",
-                      outputWorkspace->getDimension(0)->getMinimum(), 1.0);
+                      outputWorkspace->getDimension(0)->getMinimum(), -3.0);
     TSM_ASSERT_EQUALS("Maximum should still be 3: ",
-                      outputWorkspace->getDimension(0)->getMaximum(), 3.0);
+                      outputWorkspace->getDimension(0)->getMaximum(),-1.0);
     TSM_ASSERT_EQUALS("Number of Bins should be 1 : ",
                       outputWorkspace->getDimension(0)->getNBins(), 1);
     TSM_ASSERT_EQUALS("Bin width should be consistent: ",
-- 
GitLab