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_*/