Skip to content
Snippets Groups Projects
Commit e8fe1055 authored by Robert Applin's avatar Robert Applin
Browse files

More unit tests and improve mask bins fix Refs #23463

parent 99a4c32b
No related branches found
No related tags found
No related merge requests found
...@@ -166,23 +166,44 @@ std::pair<double, double> getBinRange(MatrixWorkspace_sptr workspace) { ...@@ -166,23 +166,44 @@ std::pair<double, double> getBinRange(MatrixWorkspace_sptr workspace) {
return std::make_pair(workspace->x(0).front(), workspace->x(0).back()); return std::make_pair(workspace->x(0).front(), workspace->x(0).back());
} }
std::string std::vector<std::string> splitStringBy(std::string const &str,
constructExcludeRegionString(const std::vector<std::size_t> &bounds) { std::string const &delimiter) {
std::vector<std::string> subStrings;
boost::split(subStrings, str, boost::is_any_of(delimiter));
return subStrings;
}
double convertBoundToDoubleAndFormat(std::string const &str) {
return std::round(std::stod(str) * 10) / 10;
}
std::string constructExcludeRegionString(std::vector<double> const &bounds) {
std::string excludeRegion; std::string excludeRegion;
for (auto it = bounds.begin(); it < bounds.end(); ++it) { for (auto it = bounds.begin(); it < bounds.end(); ++it) {
excludeRegion += std::to_string(*it); auto splitDouble = splitStringBy(std::to_string(*it), ".");
excludeRegion += splitDouble[0] + "." + splitDouble[1].front();
excludeRegion += it == bounds.end() - 1 ? "" : ","; excludeRegion += it == bounds.end() - 1 ? "" : ",";
} }
return excludeRegion; return excludeRegion;
} }
std::string orderExcludeRegionString(std::vector<std::size_t> &bounds) { std::string orderExcludeRegionString(std::vector<double> &bounds) {
for (auto it = bounds.begin(); it < bounds.end() - 1; it += 2) for (auto it = bounds.begin(); it < bounds.end() - 1; it += 2)
if (*it > *(it + 1)) if (*it > *(it + 1))
std::iter_swap(it, it + 1); std::iter_swap(it, it + 1);
return constructExcludeRegionString(bounds); return constructExcludeRegionString(bounds);
} }
std::string arrangeExcludeRegionString(std::string const &excludeRegionString) {
auto boundStrings = splitStringBy(excludeRegionString, ", ");
std::vector<double> bounds;
for (auto bound : boundStrings)
if (!bound.empty())
bounds.emplace_back(convertBoundToDoubleAndFormat(bound));
return orderExcludeRegionString(bounds);
}
} // namespace } // namespace
namespace MantidQt { namespace MantidQt {
...@@ -236,7 +257,9 @@ std::size_t IndirectFitData::numberOfSpectra() const { ...@@ -236,7 +257,9 @@ std::size_t IndirectFitData::numberOfSpectra() const {
} }
bool IndirectFitData::zeroSpectra() const { bool IndirectFitData::zeroSpectra() const {
return boost::apply_visitor(CheckZeroSpectrum(), m_spectra); if (m_workspace->getNumberHistograms())
return boost::apply_visitor(CheckZeroSpectrum(), m_spectra);
return true;
} }
std::pair<double, double> std::pair<double, double>
...@@ -265,7 +288,7 @@ void IndirectFitData::setSpectra(const std::string &spectra) { ...@@ -265,7 +288,7 @@ void IndirectFitData::setSpectra(const std::string &spectra) {
setSpectra(spec); setSpectra(spec);
} catch (std::exception &ex) { } catch (std::exception &ex) {
throw std::runtime_error("Spectra too large for cast: " + throw std::runtime_error("Spectra too large for cast: " +
QString(ex.what()).toStdString()); std::string(ex.what()));
} }
} }
...@@ -291,7 +314,8 @@ void IndirectFitData::validateSpectra(const Spectra &spectra) { ...@@ -291,7 +314,8 @@ void IndirectFitData::validateSpectra(const Spectra &spectra) {
} }
} }
void IndirectFitData::setStartX(double startX, std::size_t spectrum) { void IndirectFitData::setStartX(double const &startX,
std::size_t const &spectrum) {
const auto range = m_ranges.find(spectrum); const auto range = m_ranges.find(spectrum);
if (range != m_ranges.end()) if (range != m_ranges.end())
range->second.first = startX; range->second.first = startX;
...@@ -302,7 +326,7 @@ void IndirectFitData::setStartX(double startX, std::size_t spectrum) { ...@@ -302,7 +326,7 @@ void IndirectFitData::setStartX(double startX, std::size_t spectrum) {
"Unable to set StartX: Workspace no longer exists."); "Unable to set StartX: Workspace no longer exists.");
} }
void IndirectFitData::setEndX(double endX, std::size_t spectrum) { void IndirectFitData::setEndX(double const &endX, std::size_t const &spectrum) {
const auto range = m_ranges.find(spectrum); const auto range = m_ranges.find(spectrum);
if (range != m_ranges.end()) if (range != m_ranges.end())
range->second.second = endX; range->second.second = endX;
...@@ -313,20 +337,12 @@ void IndirectFitData::setEndX(double endX, std::size_t spectrum) { ...@@ -313,20 +337,12 @@ void IndirectFitData::setEndX(double endX, std::size_t spectrum) {
} }
void IndirectFitData::setExcludeRegionString( void IndirectFitData::setExcludeRegionString(
const std::string &excludeRegionString, std::size_t spectrum) { std::string const &excludeRegionString, std::size_t const &spectrum) {
m_excludeRegions[spectrum] = validateExcludeRegionString(excludeRegionString); if (!excludeRegionString.empty())
} m_excludeRegions[spectrum] =
arrangeExcludeRegionString(excludeRegionString);
std::string IndirectFitData::validateExcludeRegionString( else
const std::string &excludeRegionString) const { m_excludeRegions[spectrum] = excludeRegionString;
std::vector<std::string> boundStrings;
boost::split(boundStrings, excludeRegionString, boost::is_any_of(", "));
std::vector<std::size_t> bounds;
for (auto bound : boundStrings)
if (!bound.empty())
bounds.emplace_back(std::stoull(bound));
return orderExcludeRegionString(bounds);
} }
IndirectFitData &IndirectFitData::combine(const IndirectFitData &fitData) { IndirectFitData &IndirectFitData::combine(const IndirectFitData &fitData) {
......
...@@ -66,6 +66,9 @@ public: ...@@ -66,6 +66,9 @@ public:
} }
typename std::vector<T>::const_iterator end() const { return m_vec.end(); } typename std::vector<T>::const_iterator end() const { return m_vec.end(); }
const T &operator[](std::size_t index) const { return m_vec[index]; } const T &operator[](std::size_t index) const { return m_vec[index]; }
bool operator==(DiscontinuousSpectra<std::size_t> const &spec) const {
return this->getString() == spec.getString();
}
private: private:
std::string m_str; std::string m_str;
...@@ -184,18 +187,16 @@ public: ...@@ -184,18 +187,16 @@ public:
ApplyEnumeratedSpectra<F>(std::forward<F>(functor), start), m_spectra); ApplyEnumeratedSpectra<F>(std::forward<F>(functor), start), m_spectra);
} }
void setSpectra(const std::string &spectra); void setSpectra(std::string const &spectra);
void setSpectra(Spectra &&spectra); void setSpectra(Spectra &&spectra);
void setSpectra(const Spectra &spectra); void setSpectra(Spectra const &spectra);
void setStartX(double startX, std::size_t index); void setStartX(double const &startX, std::size_t const &index);
void setEndX(double endX, std::size_t spectrum); void setEndX(double const &endX, std::size_t const &spectrum);
void setExcludeRegionString(const std::string &excludeRegion, void setExcludeRegionString(std::string const &excludeRegion,
std::size_t spectrum); std::size_t const &spectrum);
std::string
validateExcludeRegionString(const std::string &excludeRegionString) const;
private: private:
void validateSpectra(const Spectra &spectra); void validateSpectra(Spectra const &spectra);
Mantid::API::MatrixWorkspace_sptr m_workspace; Mantid::API::MatrixWorkspace_sptr m_workspace;
Spectra m_spectra; Spectra m_spectra;
......
...@@ -78,6 +78,8 @@ IndirectSpectrumSelectionPresenter::IndirectSpectrumSelectionPresenter( ...@@ -78,6 +78,8 @@ IndirectSpectrumSelectionPresenter::IndirectSpectrumSelectionPresenter(
SLOT(displayBinMask())); SLOT(displayBinMask()));
connect(m_view.get(), SIGNAL(maskChanged(const std::string &)), this, connect(m_view.get(), SIGNAL(maskChanged(const std::string &)), this,
SLOT(setBinMask(const std::string &))); SLOT(setBinMask(const std::string &)));
connect(m_view.get(), SIGNAL(maskChanged(const std::string &)), this,
SLOT(displayBinMask()));
connect(m_view.get(), SIGNAL(maskChanged(const std::string &)), this, connect(m_view.get(), SIGNAL(maskChanged(const std::string &)), this,
SIGNAL(maskChanged(const std::string &))); SIGNAL(maskChanged(const std::string &)));
......
...@@ -5,11 +5,13 @@ ...@@ -5,11 +5,13 @@
#include "IndirectFitData.h" #include "IndirectFitData.h"
#include "MantidAPI/MatrixWorkspace.h" #include "MantidAPI/MatrixWorkspace.h"
#include "MantidDataObjects/Workspace2D.h"
#include "MantidTestHelpers/WorkspaceCreationHelper.h" #include "MantidTestHelpers/WorkspaceCreationHelper.h"
#include <iostream> #include <iostream>
using namespace Mantid::API; using namespace Mantid::API;
using namespace Mantid::DataObjects;
using namespace MantidQt::CustomInterfaces::IDA; using namespace MantidQt::CustomInterfaces::IDA;
namespace { namespace {
...@@ -23,6 +25,30 @@ IndirectFitData getIndirectFitData(const std::size_t &numberOfSpectra, ...@@ -23,6 +25,30 @@ IndirectFitData getIndirectFitData(const std::size_t &numberOfSpectra,
return data; return data;
} }
/// Simple class to set up the ADS with the configuration required
class SetUpADSWithWorkspace {
public:
SetUpADSWithWorkspace(std::string const &inputWSName,
IndirectFitData const &data) {
AnalysisDataService::Instance().addOrReplace(inputWSName, data.workspace());
};
~SetUpADSWithWorkspace() { AnalysisDataService::Instance().clear(); };
};
/// This is used to compare Spectra which is implemented as a boost::variant
class AreSpectraEqual : public boost::static_visitor<bool> {
public:
template <typename T, typename U>
bool operator()(const T &, const U &) const {
return false; // cannot compare different types
}
template <typename T> bool operator()(const T &lhs, const T &rhs) const {
return lhs == rhs;
}
};
} // namespace } // namespace
class IndirectFitDataTest : public CxxTest::TestSuite { class IndirectFitDataTest : public CxxTest::TestSuite {
...@@ -46,13 +72,22 @@ public: ...@@ -46,13 +72,22 @@ public:
TS_ASSERT_EQUALS(data.workspace()->getNumberHistograms(), 1); TS_ASSERT_EQUALS(data.workspace()->getNumberHistograms(), 1);
} }
void test_data_is_stored_correctly_in_the_ADS() {
const auto data = getIndirectFitData(1, 3);
SetUpADSWithWorkspace ads("WorkspaceName", data);
TS_ASSERT(AnalysisDataService::Instance().doesExist("WorkspaceName"));
MatrixWorkspace_sptr workspace =
boost::dynamic_pointer_cast<MatrixWorkspace>(
AnalysisDataService::Instance().retrieve("WorkspaceName"));
TS_ASSERT_EQUALS(workspace->getNumberHistograms(), 1);
}
void test_displayName_returns_correct_name() { void test_displayName_returns_correct_name() {
const auto data = getIndirectFitData(1, 3); const auto data = getIndirectFitData(1, 3);
std::vector<std::string> formatStrings; std::vector<std::string> formatStrings{
formatStrings.emplace_back("%1%_s%2%_Result"); "%1%_s%2%_Result", "%1%_f%2%,s%2%_Parameter", "%1%_s%2%_Parameter"};
formatStrings.emplace_back("%1%_f%2%,s%2%_Parameter");
formatStrings.emplace_back("%1%_s%2%_Parameter");
const std::string rangeDelimiter = "_to_"; const std::string rangeDelimiter = "_to_";
const std::size_t spectrum = 1; const std::size_t spectrum = 1;
...@@ -64,6 +99,22 @@ public: ...@@ -64,6 +99,22 @@ public:
"_s1_Parameter"); "_s1_Parameter");
} }
void test_displayName_removes_correct_part_of_workspace_name() {
const auto data = getIndirectFitData(1, 3);
SetUpADSWithWorkspace ads("Workspace_3456_red", data);
const std::string formatString = "%1%_s%2%_Result";
const std::string rangeDelimiter = "_to_";
TS_ASSERT_EQUALS(data.displayName(formatString, rangeDelimiter),
"Workspace_3456_s0_Result");
}
void test_that_correct_number_of_spectra_is_returned() {
const auto data = getIndirectFitData(10, 3);
TS_ASSERT_EQUALS(data.numberOfSpectra(), 10);
}
void test_that_correct_spectrum_number_is_returned() { void test_that_correct_spectrum_number_is_returned() {
const auto data = getIndirectFitData(4, 3); const auto data = getIndirectFitData(4, 3);
...@@ -73,19 +124,27 @@ public: ...@@ -73,19 +124,27 @@ public:
} }
} }
void test_that_correct_number_of_spectra_is_returned() { void
const auto data = getIndirectFitData(10, 3); test_that_true_is_returned_from_zeroSpectra_if_data_contains_empty_workspace() {
TS_ASSERT_EQUALS(data.numberOfSpectra(), 10); auto workspace = boost::make_shared<Workspace2D>();
const Spectra spec = std::make_pair(0u, 0u);
const IndirectFitData data(workspace, spec);
TS_ASSERT_EQUALS(data.zeroSpectra(), true);
} }
void test_that_true_is_returned_if_data_contains_zero_spectra() { void
auto data = getIndirectFitData(1, 3); test_that_true_is_returned_from_zeroSpectra_if_data_contains_empty_spectra() {
// NOT FINISHED - set number of spectra to zero const auto workspace = WorkspaceCreationHelper::create2DWorkspace123(1, 3);
const DiscontinuousSpectra<std::size_t> spec("");
const IndirectFitData data(workspace, spec);
TS_ASSERT_EQUALS(data.zeroSpectra(), true); TS_ASSERT_EQUALS(data.zeroSpectra(), true);
} }
void test_that_false_is_returned_if_data_contains_one_or_more_spectra() { void
for (auto i = 1; i < 10; ++i) { test_that_false_is_returned_from_zeroSpectra_if_data_contains_one_or_more_spectra() {
for (auto i = 1u; i < 10; ++i) {
const auto data = getIndirectFitData(i, 3); const auto data = getIndirectFitData(i, 3);
TS_ASSERT_EQUALS(data.zeroSpectra(), false); TS_ASSERT_EQUALS(data.zeroSpectra(), false);
} }
...@@ -94,43 +153,50 @@ public: ...@@ -94,43 +153,50 @@ public:
void void
test_that_correct_excludeRegion_is_returned_when_regions_are_in_correct_order() { test_that_correct_excludeRegion_is_returned_when_regions_are_in_correct_order() {
/// When each pair of numbers in the string are in order, then the whole /// When each pair of numbers in the string are in order, then the whole
/// string is in the correct order (unordered: 5,6,9,7 ordered:5,6,7,9) /// string is in the correct order(unordered: 10,11 9,7 ordered:10,11,7,9)
auto data = getIndirectFitData(4, 3); auto data = getIndirectFitData(4, 3);
data.setExcludeRegionString("1,8", 0); data.setExcludeRegionString("1,8", 0);
data.setExcludeRegionString("2,5", 1); data.setExcludeRegionString("2,5", 1);
data.setExcludeRegionString("1,2,5,6,3,4", 2); data.setExcludeRegionString("1,2,5,6,3,4", 2);
std::vector<double> regionVector1; TS_ASSERT_EQUALS(data.getExcludeRegion(0), "1.0,8.0");
regionVector1.emplace_back(1.0); TS_ASSERT_EQUALS(data.getExcludeRegion(1), "2.0,5.0");
regionVector1.emplace_back(8.0); TS_ASSERT_EQUALS(data.getExcludeRegion(2), "1.0,2.0,5.0,6.0,3.0,4.0");
std::vector<double> regionVector2;
regionVector2.emplace_back(2.0);
regionVector2.emplace_back(5.0);
TS_ASSERT_EQUALS(data.getExcludeRegion(0), "1,8");
TS_ASSERT_EQUALS(data.getExcludeRegion(1), "2,5");
TS_ASSERT_EQUALS(data.getExcludeRegion(2), "1,2,5,6,3,4");
TS_ASSERT_EQUALS(data.getExcludeRegion(3), ""); TS_ASSERT_EQUALS(data.getExcludeRegion(3), "");
}
void
test_that_correct_excludeRegionVector_is_returned_when_regions_are_in_correct_order() {
/// When each pair of numbers in the string are in order, then the whole
/// string is in the correct order(unordered: 10,11 9,7 ordered:10,11,7,9)
auto data = getIndirectFitData(4, 3);
data.setExcludeRegionString("1,8", 0);
data.setExcludeRegionString("2,5", 1);
std::vector<double> regionVector1{1.0, 8.0};
std::vector<double> regionVector2{2.0, 5.0};
TS_ASSERT_EQUALS(data.excludeRegionsVector(0), regionVector1); TS_ASSERT_EQUALS(data.excludeRegionsVector(0), regionVector1);
TS_ASSERT_EQUALS(data.excludeRegionsVector(1), regionVector2); TS_ASSERT_EQUALS(data.excludeRegionsVector(1), regionVector2);
TS_ASSERT_EQUALS(data.excludeRegionsVector(3).empty(), true); TS_ASSERT_EQUALS(data.excludeRegionsVector(3).empty(), true);
} }
void test_that_excludeRegion_is_stored_in_correct_order() { void test_that_excludeRegion_pairs_are_stored_in_correct_order() {
/// Example: unordered: 10,11 9,7 ordered: 10,11,7,9
auto data = getIndirectFitData(3, 3); auto data = getIndirectFitData(3, 3);
data.setExcludeRegionString("6,2", 0); data.setExcludeRegionString("6,2", 0);
data.setExcludeRegionString("6,2,1,2,3,4,7,6", 1); data.setExcludeRegionString("6,2,1,2,3,4,7,6", 1);
data.setExcludeRegionString("1,2,2,3,20,18,21,22,7,8", 2); data.setExcludeRegionString("1,2,2,3,20,18,21,22,7,8", 2);
std::vector<double> regionVector; std::vector<double> regionVector{2.0, 6.0};
regionVector.emplace_back(2.0);
regionVector.emplace_back(6.0);
TS_ASSERT_EQUALS(data.getExcludeRegion(0), "2,6"); TS_ASSERT_EQUALS(data.getExcludeRegion(0), "2.0,6.0");
TS_ASSERT_EQUALS(data.getExcludeRegion(1), "2,6,1,2,3,4,6,7"); TS_ASSERT_EQUALS(data.getExcludeRegion(1),
TS_ASSERT_EQUALS(data.getExcludeRegion(2), "1,2,2,3,18,20,21,22,7,8"); "2.0,6.0,1.0,2.0,3.0,4.0,6.0,7.0");
TS_ASSERT_EQUALS(data.getExcludeRegion(2),
"1.0,2.0,2.0,3.0,18.0,20.0,21.0,22.0,7.0,8.0");
TS_ASSERT_EQUALS(data.excludeRegionsVector(0), regionVector); TS_ASSERT_EQUALS(data.excludeRegionsVector(0), regionVector);
} }
...@@ -142,24 +208,33 @@ public: ...@@ -142,24 +208,33 @@ public:
data.setExcludeRegionString("6, 2,1 ,2, 3,4 ,7,6", 1); data.setExcludeRegionString("6, 2,1 ,2, 3,4 ,7,6", 1);
data.setExcludeRegionString("1,2 ,2,3, 20, 18,21,22,7, 8 ", 2); data.setExcludeRegionString("1,2 ,2,3, 20, 18,21,22,7, 8 ", 2);
TS_ASSERT_EQUALS(data.getExcludeRegion(0), "2,6"); TS_ASSERT_EQUALS(data.getExcludeRegion(0), "2.0,6.0");
TS_ASSERT_EQUALS(data.getExcludeRegion(1), "2,6,1,2,3,4,6,7"); TS_ASSERT_EQUALS(data.getExcludeRegion(1),
TS_ASSERT_EQUALS(data.getExcludeRegion(2), "1,2,2,3,18,20,21,22,7,8"); "2.0,6.0,1.0,2.0,3.0,4.0,6.0,7.0");
TS_ASSERT_EQUALS(data.getExcludeRegion(2),
"1.0,2.0,2.0,3.0,18.0,20.0,21.0,22.0,7.0,8.0");
}
void
test_that_setExcludeRegion_correctly_rounds_the_numbers_in_the_input_string() {
auto data = getIndirectFitData(2, 3);
data.setExcludeRegionString("6.29,2.93", 0);
data.setExcludeRegionString("2.6,2.3,1.99,3.01", 1);
TS_ASSERT_EQUALS(data.getExcludeRegion(0), "2.9,6.3");
TS_ASSERT_EQUALS(data.getExcludeRegion(1), "2.3,2.6,2.0,3.0");
} }
void test_throws_when_setSpectra_is_provided_an_out_of_range_spectra() { void test_throws_when_setSpectra_is_provided_an_out_of_range_spectra() {
auto data = getIndirectFitData(10, 3); auto data = getIndirectFitData(10, 3);
std::vector<Spectra> spectraPairs; std::vector<Spectra> spectraPairs{std::make_pair(0u, 11u),
spectraPairs.emplace_back(std::make_pair(0u, 11u)); std::make_pair(0u, 1000000000000000000u),
spectraPairs.emplace_back(std::make_pair(0u, 1000000000000000000u)); std::make_pair(10u, 10u)};
spectraPairs.emplace_back(std::make_pair(10u, 10u)); std::vector<std::string> spectraStrings{"-1", "10",
std::vector<std::string> spectraStrings; "100000000000000000000000000000",
spectraStrings.emplace_back("-1"); "1,5,10", "1,2,3,4,5,6,22"};
spectraStrings.emplace_back("10");
spectraStrings.emplace_back("100000000000000000000000000000");
spectraStrings.emplace_back("1,5,10,20,30,60,80,100");
spectraStrings.emplace_back("1,2,3,4,5,6,22");
for (auto i = 0u; i < spectraPairs.size(); ++i) for (auto i = 0u; i < spectraPairs.size(); ++i)
TS_ASSERT_THROWS(data.setSpectra(spectraPairs[i]), std::runtime_error); TS_ASSERT_THROWS(data.setSpectra(spectraPairs[i]), std::runtime_error);
...@@ -170,15 +245,10 @@ public: ...@@ -170,15 +245,10 @@ public:
void test_no_throw_when_setSpectra_is_provided_a_valid_spectra() { void test_no_throw_when_setSpectra_is_provided_a_valid_spectra() {
auto data = getIndirectFitData(10, 3); auto data = getIndirectFitData(10, 3);
std::vector<Spectra> spectraPairs; std::vector<Spectra> spectraPairs{
spectraPairs.emplace_back(std::make_pair(0u, 9u)); std::make_pair(0u, 9u), std::make_pair(4u, 4u), std::make_pair(7u, 4u)};
spectraPairs.emplace_back(std::make_pair(4u, 4u)); std::vector<std::string> spectraStrings{"0", "9", "0,9,6,4,5",
spectraPairs.emplace_back(std::make_pair(7u, 4u)); "1,2,3,4,5,6"};
std::vector<std::string> spectraStrings;
spectraStrings.emplace_back("0");
spectraStrings.emplace_back("9");
spectraStrings.emplace_back("0,9,6,4,5");
spectraStrings.emplace_back("1,2,3,4,5,6");
for (auto i = 0u; i < spectraPairs.size(); ++i) for (auto i = 0u; i < spectraPairs.size(); ++i)
TS_ASSERT_THROWS_NOTHING(data.setSpectra(spectraPairs[i])); TS_ASSERT_THROWS_NOTHING(data.setSpectra(spectraPairs[i]));
...@@ -186,22 +256,111 @@ public: ...@@ -186,22 +256,111 @@ public:
TS_ASSERT_THROWS_NOTHING(data.setSpectra(spectraStrings[i])); TS_ASSERT_THROWS_NOTHING(data.setSpectra(spectraStrings[i]));
} }
void test_throws_when_you_try_setStartX_with_no_workspace() { void
auto data = getIndirectFitData(1, 3); test_no_throw_when_setStartX_is_provided_a_valid_xValue_and_spectrum_number() {
// NOT FINISHED - delete workspace auto data = getIndirectFitData(10, 3);
TS_ASSERT_THROWS(data.setStartX(0.0, 50), std::runtime_error);
TS_ASSERT_THROWS_NOTHING(data.setStartX(0.0, 0));
TS_ASSERT_THROWS_NOTHING(data.setStartX(-5.0, 0));
TS_ASSERT_THROWS_NOTHING(data.setStartX(5000000, 10));
}
void test_correct_startX_is_stored_in_rangeafter_using_setStartX() {
auto data = getIndirectFitData(3, 3);
data.setStartX(-5.0, 0);
data.setStartX(6.53, 1);
data.setStartX(100000000000000.0, 2);
TS_ASSERT_EQUALS(data.getRange(0).first, -5.0);
TS_ASSERT_EQUALS(data.getRange(1).first, 6.53);
TS_ASSERT_EQUALS(data.getRange(2).first, 100000000000000.0);
} }
void void
test_no_throw_when_setStartX_is_provided_a_valid_xValue_and_spectrum_number() { test_no_throw_when_setEndX_is_provided_a_valid_xValue_and_spectrum_number() {
/// A spectrum number above the workspace numberOfSpectra wouldn't be
/// allowed when called from the interface - hence a check isn't required
auto data = getIndirectFitData(10, 3); auto data = getIndirectFitData(10, 3);
TS_ASSERT_THROWS_NOTHING(data.setStartX(0.0, 0)); TS_ASSERT_THROWS_NOTHING(data.setStartX(0.0, 0));
TS_ASSERT_THROWS_NOTHING(data.setStartX(-5.0, 0)); TS_ASSERT_THROWS_NOTHING(data.setStartX(-5.0, 0));
TS_ASSERT_THROWS_NOTHING(data.setStartX(5000000, 10)); TS_ASSERT_THROWS_NOTHING(data.setStartX(5000000, 10));
} }
void test_correct_endX_is_stored_in_rangeafter_using_setEndX() {
auto data = getIndirectFitData(3, 3);
data.setEndX(-5.0, 0);
data.setEndX(6.53, 1);
data.setEndX(100000000000000.0, 2);
TS_ASSERT_EQUALS(data.getRange(0).second, -5.0);
TS_ASSERT_EQUALS(data.getRange(1).second, 6.53);
TS_ASSERT_EQUALS(data.getRange(2).second, 100000000000000.0);
}
void test_that_the_startX_of_two_data_sets_are_combined_correctly() {
auto data1 = getIndirectFitData(2, 3);
auto data2 = getIndirectFitData(2, 3);
data1.setStartX(6.53, 0);
data2.setStartX(5.0, 1);
auto combinedData = data2.combine(data1);
TS_ASSERT_EQUALS(combinedData.getRange(0).first, 6.53);
TS_ASSERT_EQUALS(combinedData.getRange(1).first, 5.0);
}
void test_that_the_endX_of_two_datasets_are_combined_correctly() {
auto data1 = getIndirectFitData(2, 3);
auto data2 = getIndirectFitData(2, 3);
data1.setEndX(2.34, 0);
data2.setEndX(5.9, 1);
auto combinedData = data2.combine(data1);
TS_ASSERT_EQUALS(combinedData.getRange(0).second, 2.34);
TS_ASSERT_EQUALS(combinedData.getRange(1).second, 5.9);
}
void test_that_the_excludeRegion_of_two_datasets_are_combined_correctly() {
auto data1 = getIndirectFitData(2, 3);
auto data2 = getIndirectFitData(2, 3);
data1.setExcludeRegionString("1,2,6,5", 0);
data1.setExcludeRegionString("6,2", 1);
auto combinedData = data2.combine(data1);
TS_ASSERT_EQUALS(combinedData.getExcludeRegion(0), "1.0,2.0,5.0,6.0");
TS_ASSERT_EQUALS(combinedData.getExcludeRegion(1), "2.0,6.0");
}
void
test_that_the_spectra_of_two_datasets_are_combined_correctly_when_spectra_do_not_overlap() {
auto data1 = getIndirectFitData(10, 3);
auto data2 = getIndirectFitData(10, 3);
data1.setSpectra(std::make_pair(0u, 4u));
data2.setSpectra(std::make_pair(5u, 9u));
auto combinedData = data2.combine(data1);
Spectra spec(std::make_pair(0u, 9u));
TS_ASSERT(
boost::apply_visitor(AreSpectraEqual(), combinedData.spectra(), spec));
}
void
test_that_the_spectra_of_two_datasets_with_discontinous_spectra_are_combined_correctly_when_spectra_do_not_overlap() {
auto data1 = getIndirectFitData(10, 3);
auto data2 = getIndirectFitData(10, 3);
data1.setSpectra(DiscontinuousSpectra<std::size_t>("1,4"));
data2.setSpectra(DiscontinuousSpectra<std::size_t>("5,9"));
auto combinedData = data2.combine(data1);
Spectra spec(DiscontinuousSpectra<std::size_t>("5,9,1,4"));
TS_ASSERT(
boost::apply_visitor(AreSpectraEqual(), combinedData.spectra(), spec));
}
}; };
#endif #endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment