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