diff --git a/Framework/Algorithms/CMakeLists.txt b/Framework/Algorithms/CMakeLists.txt index 7389c90741fb6f3cdce35be4edf39540fad0770f..7fc8e0613ae57fcced8196f9b182302a770332e6 100644 --- a/Framework/Algorithms/CMakeLists.txt +++ b/Framework/Algorithms/CMakeLists.txt @@ -655,6 +655,7 @@ set ( TEST_FILES CalculateEfficiencyTest.h CalculateFlatBackgroundTest.h CalculateResolutionTest.h + CalculateSlitsTest.h CalculateTransmissionBeamSpreaderTest.h CalculateTransmissionTest.h CalculateZscoreTest.h diff --git a/Framework/Algorithms/test/CalculateSlitsTest.h b/Framework/Algorithms/test/CalculateSlitsTest.h new file mode 100644 index 0000000000000000000000000000000000000000..dbeed34184d3b1a081f6aa1029499a9daef6f680 --- /dev/null +++ b/Framework/Algorithms/test/CalculateSlitsTest.h @@ -0,0 +1,110 @@ +#ifndef CALCULATESLITSTEST_H_ +#define CALCULATESLITSTEST_H_ + +#include <cxxtest/TestSuite.h> + +#include "MantidAlgorithms/CalculateSlits.h" + +using namespace Mantid::Algorithms; + +class CalculateSlitsTest : public CxxTest::TestSuite { +public: + + void test_sensible_values() { + CalculateSlits alg; + alg.initialize(); + alg.setProperty("Slit1Slit2", 1940.5); + alg.setProperty("Slit2SA", 364.); + alg.setProperty("Angle", 0.7); + alg.setProperty("Footprint", 50.); + alg.setProperty("Resolution", 0.03); + + TS_ASSERT_THROWS_NOTHING(alg.execute()); + TS_ASSERT(alg.isExecuted()); + + const double slit1 = alg.getProperty("Slit1"); + TS_ASSERT_EQUALS(slit1, 1.0784367635946033); + + const double slit2 = alg.getProperty("Slit2"); + TS_ASSERT_EQUALS(slit2, 0.34402409376933002); + } + + void test_with_negative_angle() { + CalculateSlits alg; + alg.initialize(); + alg.setProperty("Slit1Slit2", 1940.5); + alg.setProperty("Slit2SA", 364.); + alg.setProperty("Angle", -0.7); + alg.setProperty("Footprint", 50.); + alg.setProperty("Resolution", 0.03); + + TS_ASSERT_THROWS_NOTHING(alg.execute()); + TS_ASSERT(alg.isExecuted()); + + const double slit1 = alg.getProperty("Slit1"); + TS_ASSERT_EQUALS(slit1, -1.0784367635946033); + + const double slit2 = alg.getProperty("Slit2"); + TS_ASSERT_EQUALS(slit2, -0.34402409376933002); + } + + void test_with_angle_zero() { + CalculateSlits alg; + alg.initialize(); + alg.setProperty("Slit1Slit2", 1940.5); + alg.setProperty("Slit2SA", 364.); + alg.setProperty("Angle", 0.); + alg.setProperty("Footprint", 50.); + alg.setProperty("Resolution", 0.03); + + TS_ASSERT_THROWS_NOTHING(alg.execute()); + TS_ASSERT(alg.isExecuted()); + + const double slit1 = alg.getProperty("Slit1"); + TS_ASSERT_EQUALS(slit1, 0.0); + + const double slit2 = alg.getProperty("Slit2"); + TS_ASSERT_EQUALS(slit2, 0.0); + } + + void test_with_nan_and_inf() { + const double nan= std::numeric_limits<double>::quiet_NaN(); + const double inf = std::numeric_limits<double>::infinity(); + const double ninf = -inf; + + CalculateSlits alg; + alg.initialize(); + alg.setProperty("Slit1Slit2", nan); + alg.setProperty("Slit2SA", nan); + alg.setProperty("Angle", inf); + alg.setProperty("Footprint", inf); + alg.setProperty("Resolution", ninf); + + TS_ASSERT_THROWS_NOTHING(alg.execute()); + TS_ASSERT(alg.isExecuted()); + + const double slit1 = alg.getProperty("Slit1"); + TS_ASSERT(isnan(slit1)); + + const double slit2 = alg.getProperty("Slit2"); + TS_ASSERT(isnan(slit2)); + } + + void test_with_no_args() { + CalculateSlits alg; + alg.initialize(); + + TS_ASSERT_THROWS_NOTHING(alg.execute()); + TS_ASSERT(alg.isExecuted()); + + const double slit1 = alg.getProperty("Slit1"); + TS_ASSERT(isnan(slit1)); + + const double slit2 = alg.getProperty("Slit2"); + TS_ASSERT(isnan(slit2)); + } + +}; + + +#endif /*CALCULATESLITSTEST_H_*/