Newer
Older
#ifndef MANTID_MDEVENTS_REFLECTOMETRYTRANFORMQXQZTEST_H_
#define MANTID_MDEVENTS_REFLECTOMETRYTRANFORMQXQZTEST_H_
#include "MantidMDAlgorithms/ReflectometryTransformQxQz.h"
using namespace Mantid::MDAlgorithms;
class ReflectometryTransformQxQzTest : public CxxTest::TestSuite {
public:
// This pair of boilerplate methods prevent the suite being created statically
// This means the constructor isn't called when running other tests
static ReflectometryTransformQxQzTest *createSuite() {
return new ReflectometryTransformQxQzTest();
}
static void destroySuite(ReflectometryTransformQxQzTest *suite) {
delete suite;
}
void test_qxmin_greater_than_qxmax_throws() {
double qxMax = 1; // Smaller than qxMin!
double qzMin = 1;
double qzMax = 2;
double incidentTheta = 1;
TS_ASSERT_THROWS(
ReflectometryTransformQxQz(qxMin, qxMax, qzMin, qzMax, incidentTheta),
std::invalid_argument);
void test_qxmin_equal_to_qxmax_throws() {
double qzMin = 1;
double qzMax = 2;
double incidentTheta = 1;
TS_ASSERT_THROWS(
ReflectometryTransformQxQz(qxMin, qxMax, qzMin, qzMax, incidentTheta),
std::invalid_argument);
void test_qzmin_greater_than_qzmax_throws() {
double qzMax = 1; // Smaller than qzMin!
TS_ASSERT_THROWS(
ReflectometryTransformQxQz(qxMin, qxMax, qzMin, qzMax, incidentTheta),
std::invalid_argument);
void test_qzmin_equal_to_qzmax_throws() {
TS_ASSERT_THROWS(
ReflectometryTransformQxQz(qxMin, qxMax, qzMin, qzMax, incidentTheta),
std::invalid_argument);
double qzMax = 3;
double incidentTheta = -0.001; // Negative
TS_ASSERT_THROWS(
ReflectometryTransformQxQz(qxMin, qxMax, qzMin, qzMax, incidentTheta),
std::out_of_range);
double qzMax = 3;
double incidentTheta = 90.001; // Too large
TS_ASSERT_THROWS(
ReflectometryTransformQxQz(qxMin, qxMax, qzMin, qzMax, incidentTheta),
std::out_of_range);
double qzMin = 1;
double qzMax = 2;
double incidentTheta = 1;
TS_ASSERT_THROWS_NOTHING(
ReflectometryTransformQxQz(qxMin, qxMax, qzMin, qzMax, incidentTheta));
//---- Tests for Qx Calculator ---- //
void test_calculate_Qx() {
// Set up calculation so that it collapses down to 2*M_PI/wavelength by
// setting initial theta to M_PI/2 and final theta to zero
CalculateReflectometryQxQz calculator;
calculator.setThetaIncident(90);
double qx;
const double wavelength = 0.1;
TS_ASSERT_THROWS_NOTHING(calculator.setThetaFinal(0));
TS_ASSERT_THROWS_NOTHING(qx = calculator.calculateDim0(wavelength));
TS_ASSERT_DELTA(2 * M_PI / wavelength, qx, 0.0001);
CalculateReflectometryQxQz calculator;
calculator.setThetaIncident(0);
calculator.setThetaFinal(0);
const double wavelength = 0.1;
TS_ASSERT_DELTA(0, calculator.calculateDim0(wavelength), 0.0001);
// Now reset the final theta and should be able to re-execute
TS_ASSERT_DELTA(-2 * M_PI / wavelength,
calculator.calculateDim0(wavelength), 0.0001);
}
//---- End Tests for Qx Calculator ---- //
//---- Tests for Qz Calculator ---- //
void test_calculate_Qz() {
// Set up calculation so that it collapses down to 2*M_PI/wavelength
CalculateReflectometryQxQz calculator;
calculator.setThetaIncident(0);
double qx;
const double wavelength = 0.1;
TS_ASSERT_THROWS_NOTHING(calculator.setThetaFinal(90));
TS_ASSERT_THROWS_NOTHING(qx = calculator.calculateDim1(wavelength));
TS_ASSERT_DELTA(2 * M_PI / wavelength, qx, 0.0001);
CalculateReflectometryQxQz calculator;
calculator.setThetaIncident(90);
calculator.setThetaFinal(90);
const double wavelength = 0.1;
TS_ASSERT_DELTA(2 * (2 * M_PI / wavelength),
calculator.calculateDim1(wavelength), 0.001);
// Now reset the final theta and should be able to re-execute
TS_ASSERT_DELTA(2 * M_PI / wavelength, calculator.calculateDim1(wavelength),
}
//---- End Tests for Qz Calculator ---- //
#endif /* MANTID_MDEVENTS_REFLECTOMETRYTRANFORMQXQZTEST_H_ */