diff --git a/qt/scientific_interfaces/ISISReflectometry/Reduction/ParseReflectometryStrings.cpp b/qt/scientific_interfaces/ISISReflectometry/Reduction/ParseReflectometryStrings.cpp index 3ad0a93c5b93f8bf4905833f1d76b287ec7244be..00e1775e63f6e95b208b99608d28f36ed48eab5f 100644 --- a/qt/scientific_interfaces/ISISReflectometry/Reduction/ParseReflectometryStrings.cpp +++ b/qt/scientific_interfaces/ISISReflectometry/Reduction/ParseReflectometryStrings.cpp @@ -100,11 +100,11 @@ boost::optional<boost::optional<double>> parseScaleFactor(std::string const &scaleFactor) { if (isEntirelyWhitespace(scaleFactor)) { return boost::optional<double>(boost::none); - } else { - auto value = parseDouble(scaleFactor); - if (value.is_initialized()) - return value; } + + auto value = parseDouble(scaleFactor); + if (value.is_initialized() && value != 0.0) + return value; return boost::none; } diff --git a/qt/scientific_interfaces/ISISReflectometry/Reduction/ValidateRow.cpp b/qt/scientific_interfaces/ISISReflectometry/Reduction/ValidateRow.cpp index b473c1522dc0416a162f8962737ef04f41c6d635..8fad42654867cd5132b767eb1f869a3990352b60 100644 --- a/qt/scientific_interfaces/ISISReflectometry/Reduction/ValidateRow.cpp +++ b/qt/scientific_interfaces/ISISReflectometry/Reduction/ValidateRow.cpp @@ -102,6 +102,7 @@ RowValidator::parseScaleFactor(std::vector<std::string> const &cellText) { cellText[SCALE_COLUMN]); if (!optionalScaleFactorOrNoneIfError.is_initialized()) m_invalidColumns.emplace_back(SCALE_COLUMN); + return optionalScaleFactorOrNoneIfError; } diff --git a/qt/scientific_interfaces/test/ISISReflectometry/Reduction/ParseReflectometryStringsTest.h b/qt/scientific_interfaces/test/ISISReflectometry/Reduction/ParseReflectometryStringsTest.h index 9237650cd33afb728631d8e322798c5c775c494c..e6d944aa1f90a3bab74a710927fb8cdfe3007ab5 100644 --- a/qt/scientific_interfaces/test/ISISReflectometry/Reduction/ParseReflectometryStringsTest.h +++ b/qt/scientific_interfaces/test/ISISReflectometry/Reduction/ParseReflectometryStringsTest.h @@ -140,6 +140,17 @@ public: TS_ASSERT(!result.is_initialized()); } + void testParseScaleFactorRejectsZero() { + auto result = parseScaleFactor("0.0"); + TS_ASSERT(!result.is_initialized()); + } + + void testParseScaleFactorNegative() { + auto result = parseScaleFactor("-1.0"); + TS_ASSERT(result.get().is_initialized()); + TS_ASSERT_EQUALS(result.get().get(), -1.0); + } + void testParseQRange() { auto result = parseQRange("0.05", "0.16", "0.02"); TS_ASSERT_EQUALS(result.which(), VALUE);