Newer
Older
#ifndef WORKSPACETEST_H_
#define WORKSPACETEST_H_
#include <cxxtest/TestSuite.h>
Roman Tolchenov
committed
#include "MantidAPI/MatrixWorkspace.h"
Russell Taylor
committed
#include "MantidAPI/WorkspaceFactory.h"
#include "MantidAPI/SpectraDetectorMap.h"
#include "MantidAPI/NumericAxis.h"
#include "MantidAPI/SpectraAxis.h"
using namespace Mantid::Kernel;
using namespace Mantid::API;
Russell Taylor
committed
namespace Mantid { namespace DataObjects {
Roman Tolchenov
committed
class WorkspaceTester : public MatrixWorkspace
Roman Tolchenov
committed
WorkspaceTester() : MatrixWorkspace() {}
Russell Taylor
committed
// Empty overrides of virtual methods
Matt Clarke
committed
virtual const int getNumberHistograms() const { return 1;}
const std::string id() const {return "WorkspaceTester";}
void init(const int& i, const int& j, const int& k)
// Put an 'empty' axis in to test the getAxis method
m_axes.resize(1);
m_axes[0] = new NumericAxis(1);
int size() const {return vec.size();}
int blocksize() const {return vec.size();}
Russell Taylor
committed
MantidVec& dataX(int const index) {return vec;}
MantidVec& dataY(int const index) {return vec;}
MantidVec& dataE(int const index) {return vec;}
const MantidVec& dataX(int const index) const {return vec;}
const MantidVec& dataY(int const index) const {return vec;}
const MantidVec& dataE(int const index) const {return vec;}
Russell Taylor
committed
Kernel::cow_ptr<MantidVec> refX(const int index) const {return Kernel::cow_ptr<MantidVec>();}
void setX(const int index, const Kernel::cow_ptr<MantidVec>& X) {}
Russell Taylor
committed
Russell Taylor
committed
MantidVec vec;
int spec;
Russell Taylor
committed
}} // namespace
Russell Taylor
committed
DECLARE_WORKSPACE(WorkspaceTester)
class MatrixWorkspaceTest : public CxxTest::TestSuite
Russell Taylor
committed
MatrixWorkspaceTest() : ws(new Mantid::DataObjects::WorkspaceTester)
{
ws->initialize(1,1,1);
}
Janik Zikovsky
committed
TS_ASSERT_EQUALS( ws->getTitle(), "" );
Russell Taylor
committed
ws->setTitle("something");
Janik Zikovsky
committed
TS_ASSERT_EQUALS( ws->getTitle(), "something" );
Russell Taylor
committed
ws->setTitle("");
Janik Zikovsky
committed
TS_ASSERT_EQUALS( ws->getComment(), "" );
Russell Taylor
committed
ws->setComment("commenting");
Janik Zikovsky
committed
TS_ASSERT_EQUALS( ws->getComment(), "commenting" );
Russell Taylor
committed
ws->setComment("");
Russell Taylor
committed
boost::shared_ptr<IInstrument> i = ws->getInstrument();
Janik Zikovsky
committed
TS_ASSERT_EQUALS( ws->getInstrument()->type(), "Instrument" );
Russell Taylor
committed
void testSpectraMap()
Russell Taylor
committed
MatrixWorkspace_sptr ws2 = WorkspaceFactory::Instance().create(ws,1,1,1);
const SpectraDetectorMap &specs = ws2->spectraMap();
Janik Zikovsky
committed
TS_ASSERT_EQUALS( &(ws->spectraMap()), &specs );
Russell Taylor
committed
SpectraDetectorMap &specs2 = ws2->mutableSpectraMap();
Janik Zikovsky
committed
TS_ASSERT_DIFFERS( &(ws->spectraMap()), &specs2 );
Russell Taylor
committed
}
Russell Taylor
committed
Russell Taylor
committed
void testGetSetSample()
Janik Zikovsky
committed
TS_ASSERT( &ws->sample() );
Russell Taylor
committed
Sofia Antony
committed
ws->mutableSample().setName("test");
Janik Zikovsky
committed
TS_ASSERT_EQUALS( ws->sample().getName(), "test" );
Janik Zikovsky
committed
TS_ASSERT_THROWS_NOTHING( ws->getMemorySize() );
Russell Taylor
committed
void testHistory()
Janik Zikovsky
committed
TS_ASSERT_THROWS_NOTHING( WorkspaceHistory& h = ws->history() );
Russell Taylor
committed
const Mantid::DataObjects::WorkspaceTester wsc;
Janik Zikovsky
committed
TS_ASSERT_THROWS_NOTHING( const WorkspaceHistory& hh = wsc.getHistory() );
Russell Taylor
committed
void testAxes()
{
Janik Zikovsky
committed
TS_ASSERT_EQUALS( ws->axes(), 1 );
Russell Taylor
committed
}
Janik Zikovsky
committed
TS_ASSERT_THROWS( ws->getAxis(-1), Exception::IndexError );
TS_ASSERT_THROWS_NOTHING( ws->getAxis(0) );
TS_ASSERT( ws->getAxis(0) );
TS_ASSERT( ws->getAxis(0)->isNumeric() );
TS_ASSERT_THROWS( ws->getAxis(1), Exception::IndexError );
Russell Taylor
committed
Russell Taylor
committed
void testReplaceAxis()
{
Axis* axBad = new SpectraAxis(5);
Janik Zikovsky
committed
TS_ASSERT_THROWS( ws->replaceAxis(0,axBad), std::runtime_error );
Russell Taylor
committed
delete axBad;
Axis* ax = new SpectraAxis(1);
Janik Zikovsky
committed
TS_ASSERT_THROWS( ws->replaceAxis(1,ax), Exception::IndexError );
TS_ASSERT_THROWS_NOTHING( ws->replaceAxis(0,ax) );
TS_ASSERT( ws->getAxis(0)->isSpectra() );
Russell Taylor
committed
}
Janik Zikovsky
committed
TS_ASSERT( ! ws->isDistribution() );
TS_ASSERT( ws->isDistribution(true) );
TS_ASSERT( ws->isDistribution() );
Russell Taylor
committed
void testGetSetYUnit()
{
Russell Taylor
committed
TS_ASSERT_EQUALS( ws->YUnit(), "" )
Russell Taylor
committed
TS_ASSERT_THROWS_NOTHING( ws->setYUnit("something") )
TS_ASSERT_EQUALS( ws->YUnit(), "something" )
Russell Taylor
committed
}
void testMasking()
{
MatrixWorkspace *ws2 = new Mantid::DataObjects::WorkspaceTester;
ws2->initialize(1,2,2);
Janik Zikovsky
committed
TS_ASSERT( !ws2->hasMaskedBins(0) );
// Doesn't throw on invalid spectrum index, just returns false
Janik Zikovsky
committed
TS_ASSERT( !ws2->hasMaskedBins(1) );
TS_ASSERT( !ws2->hasMaskedBins(-1) );
// Will throw if nothing masked for spectrum
Janik Zikovsky
committed
TS_ASSERT_THROWS( ws2->maskedBins(0), Mantid::Kernel::Exception::IndexError );
// Will throw if attempting to mask invalid spectrum
Janik Zikovsky
committed
TS_ASSERT_THROWS( ws2->maskBin(-1,1), Mantid::Kernel::Exception::IndexError );
TS_ASSERT_THROWS( ws2->maskBin(1,1), Mantid::Kernel::Exception::IndexError );
Janik Zikovsky
committed
TS_ASSERT_THROWS( ws2->maskBin(0,-1), Mantid::Kernel::Exception::IndexError );
TS_ASSERT_THROWS( ws2->maskBin(0,2), Mantid::Kernel::Exception::IndexError );
Janik Zikovsky
committed
TS_ASSERT_THROWS_NOTHING( ws2->maskBin(0,1,0.5) );
TS_ASSERT( ws2->hasMaskedBins(0) );
TS_ASSERT_EQUALS( ws2->maskedBins(0).size(), 1 );
TS_ASSERT_EQUALS( ws2->maskedBins(0).begin()->first, 1 );
TS_ASSERT_EQUALS( ws2->maskedBins(0).begin()->second, 0.5 );
// This will be 0.25 (1*0.5*0.5) because in the test class the same vector is used for both E & Y
Janik Zikovsky
committed
TS_ASSERT_EQUALS( ws2->dataY(0)[1], 0.25 );
// Now mask a bin earlier than above and check it's sorting properly
Janik Zikovsky
committed
TS_ASSERT_THROWS_NOTHING( ws2->maskBin(0,0) );
TS_ASSERT( ws2->hasMaskedBins(0) );
TS_ASSERT_EQUALS( ws2->maskedBins(0).size(), 2 );
TS_ASSERT_EQUALS( ws2->maskedBins(0).begin()->first, 0 );
TS_ASSERT_EQUALS( ws2->maskedBins(0).begin()->second, 1.0 );
// This will be 0.25 (1*0.5*0.5) because in the test class the same vector is used for both E & Y
Janik Zikovsky
committed
TS_ASSERT_EQUALS( ws2->dataY(0)[0], 0.0 );
// Check the previous masking is still OK
Janik Zikovsky
committed
TS_ASSERT_EQUALS( ws2->maskedBins(0).rbegin()->first, 1 );
TS_ASSERT_EQUALS( ws2->maskedBins(0).rbegin()->second, 0.5 );
TS_ASSERT_EQUALS( ws2->dataY(0)[1], 0.25 );
Russell Taylor
committed
delete ws2;
Russell Taylor
committed
boost::shared_ptr<MatrixWorkspace> ws;
Russell Taylor
committed
};
#endif /*WORKSPACETEST_H_*/