Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ConvertFromDistributionTest.h 1.98 KiB
#ifndef CONVERTFROMDISTRIBUTIONTEST_H_
#define CONVERTFROMDISTRIBUTIONTEST_H_

#include <cxxtest/TestSuite.h>
#include "MantidTestHelpers/WorkspaceCreationHelper.h"

#include "MantidAlgorithms/ConvertFromDistribution.h"
#include "MantidAPI/AnalysisDataService.h"

using namespace Mantid::API;
using Mantid::Algorithms::ConvertFromDistribution;

class ConvertFromDistributionTest : public CxxTest::TestSuite {
public:
  static ConvertFromDistributionTest *createSuite() {
    return new ConvertFromDistributionTest();
  }
  static void destroySuite(ConvertFromDistributionTest *suite) { delete suite; }

  ConvertFromDistributionTest() : dist("dist") {
    MatrixWorkspace_sptr WS =
        WorkspaceCreationHelper::Create2DWorkspaceBinned(1, 10, 0, 0.5);
    WS->isDistribution(true);
    AnalysisDataService::Instance().add(dist, WS);
  }

  void testName() { TS_ASSERT_EQUALS(conv.name(), "ConvertFromDistribution") }

  void testVersion() { TS_ASSERT_EQUALS(conv.version(), 1) }

  void testInit() {
    TS_ASSERT_THROWS_NOTHING(conv.initialize())
    TS_ASSERT(conv.isInitialized())
  }

  void testExec() {
    if (!conv.isInitialized())
      conv.initialize();

    TS_ASSERT_THROWS_NOTHING(conv.setPropertyValue("Workspace", dist))

    TS_ASSERT_THROWS_NOTHING(conv.execute())
    TS_ASSERT(conv.isExecuted())

    MatrixWorkspace_const_sptr output;
    TS_ASSERT_THROWS_NOTHING(
        output =
            AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(dist))

    const Mantid::MantidVec &X = output->dataX(0);
    const Mantid::MantidVec &Y = output->dataY(0);
    const Mantid::MantidVec &E = output->dataE(0);
    for (size_t i = 0; i < Y.size(); ++i) {
      TS_ASSERT_EQUALS(X[i], static_cast<double>(i) / 2.0)
      TS_ASSERT_EQUALS(Y[i], 1)
      TS_ASSERT_EQUALS(E[i], sqrt(2.0) / 2.0)
    }
    TS_ASSERT(!output->isDistribution())

    AnalysisDataService::Instance().remove(dist);
  }

private:
  ConvertFromDistribution conv;
  std::string dist;
};

#endif /*CONVERTFROMDISTRIBUTIONTEST_H_*/