Skip to content
Snippets Groups Projects
AddSampleLogTest.h 3.67 KiB
Newer Older
#ifndef ADDSAMPLELOGTEST_H_
#define ADDSAMPLELOGTEST_H_

#include <cxxtest/TestSuite.h>

#include <string>

#include "MantidTestHelpers/WorkspaceCreationHelper.h"
Nick Draper's avatar
Nick Draper committed
#include "MantidAPI/MatrixWorkspace.h"
#include "MantidAlgorithms/AddSampleLog.h"

using namespace Mantid::Kernel;
using namespace Mantid::API;
using namespace Mantid::Algorithms;

class AddSampleLogTest : public CxxTest::TestSuite
{
public:

    MatrixWorkspace_sptr ws = WorkspaceCreationHelper::Create2DWorkspace(10,10);
    ExecuteAlgorithm(ws, "My Name", "String", "My Value", 0.0);
Nick Draper's avatar
Nick Draper committed

    MatrixWorkspace_sptr ws = WorkspaceCreationHelper::CreateEventWorkspace(10,10);
    ExecuteAlgorithm(ws, "My Name", "String", "My Value", 0.0);
Nick Draper's avatar
Nick Draper committed

  void test_CanOverwrite()
  {
    MatrixWorkspace_sptr ws = WorkspaceCreationHelper::Create2DWorkspace(10,10);
    ExecuteAlgorithm(ws, "My Name", "String", "My Value", 0.0);
    ExecuteAlgorithm(ws, "My Name", "String", "My New Value", 0.0);
  }

  void test_Number()
  {
    MatrixWorkspace_sptr ws = WorkspaceCreationHelper::Create2DWorkspace(10,10);
    ExecuteAlgorithm(ws, "My Name", "Number", "1.234", 1.234);
    ExecuteAlgorithm(ws, "My Name", "Number", "2.456", 2.456);
  }

  void test_BadNumber()
  {
    MatrixWorkspace_sptr ws = WorkspaceCreationHelper::Create2DWorkspace(10,10);
    ExecuteAlgorithm(ws, "My Name", "Number", "OneTwoThreeFour", 0.0, true);
  }

  void test_BadNumberSeries()
  {
    MatrixWorkspace_sptr ws = WorkspaceCreationHelper::Create2DWorkspace(10,10);
    ExecuteAlgorithm(ws, "My Name", "Number Series", "FiveSixSeven", 0.0, true);
  }

  void test_NumberSeries()
  {
    MatrixWorkspace_sptr ws = WorkspaceCreationHelper::Create2DWorkspace(10,10);
    ExecuteAlgorithm(ws, "My Name", "Number Series", "1.234", 1.234);
    ExecuteAlgorithm(ws, "My Name", "Number Series", "2.456", 2.456);
  }

  void ExecuteAlgorithm(MatrixWorkspace_sptr testWS, std::string LogName, std::string LogType, std::string LogText,
      double expectedValue, bool fails=false)
Nick Draper's avatar
Nick Draper committed
    //add the workspace to the ADS
    AnalysisDataService::Instance().addOrReplace("AddSampleLogTest_Temporary", testWS);
Nick Draper's avatar
Nick Draper committed

    //execute algorithm
    AddSampleLog alg;
    TS_ASSERT_THROWS_NOTHING(alg.initialize());
    TS_ASSERT( alg.isInitialized() )

    alg.setPropertyValue("Workspace", "AddSampleLogTest_Temporary");
    alg.setPropertyValue("LogName", LogName);
    alg.setPropertyValue("LogText", LogText);
    alg.setPropertyValue("LogType", LogType);
    TS_ASSERT_THROWS_NOTHING(alg.execute())
    if (fails)
    {
      TS_ASSERT( !alg.isExecuted() )
      return;
    }
    else
    {
      TS_ASSERT( alg.isExecuted() )
    }
Nick Draper's avatar
Nick Draper committed
    //check output
    MatrixWorkspace_sptr output = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(alg.getProperty("Workspace"));
    TS_ASSERT_THROWS_NOTHING(prop = wSpaceRun.getLogData(LogName);)
    if (!prop) return;

    if (LogType == "String")
    {
      TS_ASSERT_EQUALS( prop->value(), LogText);
    }
    else if (LogType == "Number")
    {
      PropertyWithValue<double> *testProp = dynamic_cast<PropertyWithValue<double>*>(prop);
      TS_ASSERT(testProp);
      TS_ASSERT_DELTA((*testProp)(), expectedValue, 1e-5);
    }
    else if (LogType == "Number Series")
    {
      TimeSeriesProperty<double> *testProp = dynamic_cast<TimeSeriesProperty<double>*>(prop);
      TS_ASSERT(testProp);
      TS_ASSERT_DELTA(testProp->firstValue(), expectedValue, 1e-5);
    }
Nick Draper's avatar
Nick Draper committed
    //cleanup
    AnalysisDataService::Instance().remove(output->getName());
Nick Draper's avatar
Nick Draper committed