Newer
Older
#ifndef MAGNETICIONTEST_H_
#define MAGNETICIONTEST_H_
#include "MantidKernel/MagneticIon.h"
#include "MantidKernel/Exception.h"
#include <cxxtest/TestSuite.h>
#include <boost/lexical_cast.hpp>
using namespace Mantid::PhysicalConstants;
class MagneticIonTest : public CxxTest::TestSuite {
public:
void testGetMagneticIonWithSeparateSymbolAndCharge() {
MagneticIon temp = getMagneticIon("Am", 7);
TS_ASSERT_EQUALS(temp.symbol, "Am");
TS_ASSERT_EQUALS(temp.charge, 7);
TS_ASSERT_DELTA(temp.j0[1], 12.73, 0.001);
}
void testGetMagneticIonWithCombinedSymbolAndCharge() {
MagneticIon temp = getMagneticIon("Am7");
TS_ASSERT_EQUALS(temp.symbol, "Am");
TS_ASSERT_EQUALS(temp.charge, 7);
TS_ASSERT_DELTA(temp.j0[1], 12.73, 0.001);
void testGetJL() {
std::vector<double> temp;
temp = getJL("Am", 7);
TS_ASSERT_EQUALS(temp.size(), 8);
TS_ASSERT_DELTA(temp[1], 12.73, 0.001);
}
void testErrors() {
TS_ASSERT_THROWS(getMagneticIon("O", 2), std::runtime_error); // no such ion
TS_ASSERT_THROWS(getMagneticIon("Am", 12),
std::runtime_error); // no such charge
TS_ASSERT_THROWS(getJL("Am", 12),
std::runtime_error); // no such charge - pass to getJL
TS_ASSERT_THROWS(getJL("Am", 7, 3), std::runtime_error); // no such l
}
void test_Copied_Object_Has_Same_Attributes() {
MagneticIon ion = getMagneticIon("Am", 7);
MagneticIon copiedIon(ion);
TS_ASSERT_EQUALS(ion.symbol, copiedIon.symbol);
TS_ASSERT_EQUALS(ion.charge, copiedIon.charge);
checkVectorsEqual("Checking j0 values:", ion.j0, copiedIon.j0);
checkVectorsEqual("Checking j2 values:", ion.j2, copiedIon.j2);
checkVectorsEqual("Checking j4 values:", ion.j4, copiedIon.j4);
checkVectorsEqual("Checking j6 values:", ion.j6, copiedIon.j6);
}
void test_formFactor_Has_Expected_Value_For_Simplest_J0_L0_Case() {
Gigg, Martyn Anthony
committed
MagneticIon ion = getMagneticIon("Mn", 3);
double qsqr = 6.48;
uint16_t j = 0;
uint16_t l = 0;
TS_ASSERT_DELTA(ion.analyticalFormFactor(qsqr, j, l), 0.691958098, 1e-8);
Gigg, Martyn Anthony
committed
}
void checkVectorsEqual(const std::string &msgPrefix,
const std::vector<double> &first,
const std::vector<double> &second) {
TSM_ASSERT_EQUALS(msgPrefix + " Size match", first.size(), second.size());
if (first.size() != second.size())
return;
for (size_t i = 0; i < first.size(); ++i) {
const std::string msg = msgPrefix + " Value mismatch at element " +
boost::lexical_cast<std::string>(i);
TSM_ASSERT_DELTA(msg, first[i], second[i], 1e-12);
}
}
};
#endif // MAGNETICIONTEST_H_