@@ -67,7 +67,7 @@ void IFunction1D::function(const FunctionDomain& domain,FunctionValues& values)c
{
throw std::invalid_argument("Unexpected domain in IFunction1D");
}
function1D(values.getPointerToCalculated(0),(*d1d)[0],d1d->size());
function1D(values.getPointerToCalculated(0),d1d->getPointerAt(0),d1d->size());
}

void IFunction1D::functionDeriv(const FunctionDomain& domain, Jacobian& jacobian)
@@ -77,7 +77,7 @@ void IFunction1D::functionDeriv(const FunctionDomain& domain, Jacobian& jacobian
{
throw std::invalid_argument("Unexpected domain in IFunction1D");
}
functionDeriv1D(&jacobian,(*d1d)[0],d1d->size());
functionDeriv1D(&jacobian,d1d->getPointerAt(0),d1d->size());
}

/** Base class implementation of derivative IFunction1D throws error. This is to check if such a function is provided
@@ -277,7 +277,8 @@ std::string ParamFunction::descriptionOfActive(size_t i)const
*/
bool ParamFunction::isFixed(size_t i)const
{
return std::find(m_indexMap.begin(),m_indexMap.end(),i) != m_indexMap.end();
// fixed if i isn't found in m_indexMap
return std::find(m_indexMap.begin(),m_indexMap.end(),i) == m_indexMap.end();
}

/** This method doesn't create a tie

Large diffs are not rendered by default.

@@ -0,0 +1,34 @@
#ifndef FUNCTIONDOMAINTEST_H_
#define FUNCTIONDOMAINTEST_H_

#include "MantidAPI/FunctionDomain1D.h"

#include <cxxtest/TestSuite.h>
#include <iostream>

using namespace Mantid;
using namespace Mantid::API;

class FunctionDomainTest : public CxxTest::TestSuite
{
public:

void testDomain1D()
{
std::vector<double> x(10);
for(size_t i = 0; i < x.size(); ++i)
{
x[i] = 1.0 + 0.1 * i;
}
FunctionDomain1D domain(x);
TS_ASSERT_EQUALS(domain.size(), x.size());
for(size_t i = 0; i < x.size(); ++i)
{
TS_ASSERT_EQUALS(domain[i], x[i]);
TS_ASSERT_EQUALS(domain[i], *domain.getPointerAt(i));
}
}

};

#endif /*FUNCTIONDOMAINTEST_H_*/

Large diffs are not rendered by default.

@@ -417,7 +417,7 @@ class FunctionTest : public CxxTest::TestSuite
TS_ASSERT(!f.isExplicitlySet(3));
}

//void test_setWorkspace_works()
//void xtest_setWorkspace_works()
//{
// MatrixWorkspace_sptr ws(new MocMatrixWorkspace(10,11,10));

@@ -438,7 +438,7 @@ class FunctionTest : public CxxTest::TestSuite
//}

/** Refs #3003: Test to make sure setMatrix works in parallel */
//void test_setWorkspace_works_inParallel()
//void xtest_setWorkspace_works_inParallel()
//{
// double expected;
// int numpixels = 15000;
@@ -0,0 +1,141 @@
#ifndef FUNCTIONVALUESTEST_H_
#define FUNCTIONVALUESTEST_H_

#include "MantidAPI/FunctionDomain1D.h"
#include "MantidAPI/FunctionValues.h"

#include <cxxtest/TestSuite.h>
#include <iostream>

using namespace Mantid;
using namespace Mantid::API;

class FunctionValuesTest : public CxxTest::TestSuite
{
public:

FunctionValuesTest()
{
x.resize(10);
for(size_t i = 0; i < x.size(); ++i)
{
x[i] = 1.0 + 0.1 * i;
}
}

void testCalculatedValues()
{
FunctionDomain1D domain(x);
FunctionValues values(domain);
TS_ASSERT_EQUALS(values.size(),domain.size());
for(size_t i = 0; i < values.size(); ++i)
{
TS_ASSERT_EQUALS(values.getCalculated(i),0.0);
values.setCalculated(i,double(i) + 0.01);
}
for(size_t i = 0; i < values.size(); ++i)
{
TS_ASSERT_EQUALS(values.getCalculated(i),double(i) + 0.01);
TS_ASSERT_EQUALS(values.getCalculated(i),*values.getPointerToCalculated(i));
}
}

void testPlusOperator()
{
FunctionDomain1D domain(x);
FunctionValues values1(domain);
FunctionValues values2(domain);

for(size_t i = 0; i < values1.size(); ++i)
{
values1.setCalculated(i,double(i));
values2.setCalculated(i,double(i));
}

values2 += values1;

for(size_t i = 0; i < values2.size(); ++i)
{
TS_ASSERT_EQUALS(values2.getCalculated(i), 2.0 * double(i));
}

std::vector<double> x3(9);
FunctionDomain1D domain3(x3);
FunctionValues values3(domain3);

TS_ASSERT_THROWS(values3 += values1,std::runtime_error);
}

void testFitData()
{
FunctionDomain1D domain(x);
FunctionValues values1(domain);

TS_ASSERT_THROWS(values1.getFitData(0),std::runtime_error);
TS_ASSERT_THROWS(values1.getFitWeight(0),std::runtime_error);

values1.setFitData(5,10.1);
for(size_t i = 0; i < values1.size(); ++i)
{
TS_ASSERT_EQUALS(values1.getFitData(i), i == 5? 10.1 : 0.0);
TS_ASSERT_THROWS(values1.getFitWeight(i), std::runtime_error);
}

std::vector<double> y(9);
TS_ASSERT_THROWS(values1.setFitData(y),std::invalid_argument);

y.resize(10);
for(size_t i = 0; i < y.size(); ++i)
{
y[i] = double(2*i);
}

values1.setFitData(y);
for(size_t i = 0; i < values1.size(); ++i)
{
TS_ASSERT_EQUALS(values1.getFitData(i), double(2*i));
}

}

void testFitWeights()
{
FunctionDomain1D domain(x);
FunctionValues values1(domain);

values1.setFitWeight(5,10.1);
for(size_t i = 0; i < values1.size(); ++i)
{
TS_ASSERT_EQUALS(values1.getFitWeight(i), i == 5? 10.1 : 0.0);
TS_ASSERT_THROWS(values1.getFitData(i), std::runtime_error);
}

std::vector<double> y(9);
TS_ASSERT_THROWS(values1.setFitWeights(y),std::invalid_argument);

y.resize(10);
for(size_t i = 0; i < y.size(); ++i)
{
y[i] = double(2*i);
}

values1.setFitWeights(y);
for(size_t i = 0; i < values1.size(); ++i)
{
TS_ASSERT_EQUALS(values1.getFitWeight(i), double(2*i));
}

FunctionValues values2(domain);
values2.setFitWeights(100.0);
for(size_t i = 0; i < values2.size(); ++i)
{
TS_ASSERT_EQUALS(values2.getFitWeight(i), 100.0);
}

}

private:
std::vector<double> x;
};

#endif /*FUNCTIONVALUESTEST_H_*/
@@ -3,6 +3,8 @@

#include "MantidAPI/IFunction1D.h"
#include "MantidAPI/ParamFunction.h"
#include "MantidAPI/FunctionDomain1D.h"
#include "MantidAPI/FunctionValues.h"

#include <cxxtest/TestSuite.h>
#include <iostream>
@@ -36,29 +38,54 @@ class IFunction1DTest_Function: public virtual IFunction1D, public virtual Param
}
};

class IFunction1DTest_Jacobian: public Jacobian
{
public:
IFunction1DTest_Jacobian(size_t ny, size_t np):
m_np(np)
{
m_data.resize(ny * np);
}
virtual void set(size_t iY, size_t iP, double value)
{
m_data[iY*m_np + iP] = value;
}
virtual double get(size_t iY, size_t iP)
{
return m_data[iY*m_np + iP];
}
private:
size_t m_np;
std::vector<double> m_data;
};

class IFunction1DTest : public CxxTest::TestSuite
{
public:

void testIFunction()
{
IFunction1DTest_Function function;
// What does this test do??
int i = 1;
TS_ASSERT(i);

// const int nx = 10;
// const int ny = 10;
// Mantid::DataObjects::Workspace2D_sptr ws = Create2DWorkspace(nx,ny);

// for(int i=0;i<nx;++i)
// {
// for(int j=0;j<ny;++j)
// {
// }
// }

// std::cerr<<"\nn="<<ws->axes()<<"\n";
std::vector<double> x(10);
for(size_t i = 0; i < x.size(); ++i)
{
x[i] = 1.0 + 0.1 * i;
}
FunctionDomain1D domain(x);
FunctionValues values(domain);
function.function(domain,values);
for(size_t i = 0; i < domain.size(); ++i)
{
TS_ASSERT_EQUALS(values.getCalculated(i),A * (1.0 + 0.1 * i) + B);
}

IFunction1DTest_Jacobian jacobian(10,2);
function.functionDeriv(domain,jacobian);
for(size_t i = 0; i < domain.size(); ++i)
{
TS_ASSERT_EQUALS(jacobian.get(i,0), 1.0 + 0.1 * i);
TS_ASSERT_EQUALS(jacobian.get(i,1), 1.0);
}
}

};
@@ -5,7 +5,7 @@

#include "MantidAPI/IFunctionMW.h"
#include "MantidAPI/ParamFunction.h"
#include "MantidAPI/CompositeFunctionMW.h"
#include "MantidAPI/CompositeFunction.h"
#include "MantidAPI/ParameterReference.h"

using namespace Mantid;
@@ -21,7 +21,7 @@ class ParameterReferenceTest_Fun: public ParamFunction, public IFunctionMW
declareParameter("c");
}
std::string name()const{return "ParameterReferenceTest_Fun";}
void functionMW(double*, const double*, const size_t)const
void function1D(double*, const double*, const size_t)const
{
}
};
@@ -46,14 +46,14 @@ class ParameterReferenceTest : public CxxTest::TestSuite

void testComposite()
{
CompositeFunctionMW* cf = new CompositeFunctionMW;
CompositeFunction* cf = new CompositeFunction;
ParameterReferenceTest_Fun* f0 = new ParameterReferenceTest_Fun;

CompositeFunctionMW* f1 = new CompositeFunctionMW;
CompositeFunction* f1 = new CompositeFunction;

ParameterReferenceTest_Fun* f1_0 = new ParameterReferenceTest_Fun;
ParameterReferenceTest_Fun* f1_1 = new ParameterReferenceTest_Fun;
CompositeFunctionMW* f1_2 = new CompositeFunctionMW;
CompositeFunction* f1_2 = new CompositeFunction;
ParameterReferenceTest_Fun* f1_2_0 = new ParameterReferenceTest_Fun;
ParameterReferenceTest_Fun* f1_2_1 = new ParameterReferenceTest_Fun;

@@ -4,7 +4,7 @@
#include <cxxtest/TestSuite.h>

#include "MantidAPI/IPeakFunction.h"
#include "MantidAPI/CompositeFunctionMW.h"
#include "MantidAPI/CompositeFunction.h"
#include "MantidAPI/IFunctionMW.h"
#include "MantidAPI/ParameterTie.h"

@@ -88,7 +88,7 @@ class ParameterTieTest_Linear: public ParamFunction, public IFunctionMW
declareParameter("b");
}
std::string name()const{return "ParameterTieTest_Linear";}
void functionMW(double* out, const double* xValues, const size_t nData)const
void function1D(double* out, const double* xValues, const size_t nData)const
{
double a = getParameter("a");
double b = getParameter("b");
@@ -97,7 +97,7 @@ class ParameterTieTest_Linear: public ParamFunction, public IFunctionMW
out[i] = a + b * xValues[i];
}
}
void functionDerivMW(Jacobian* out, const double* xValues, const size_t nData)
void functionDeriv1D(Jacobian* out, const double* xValues, const size_t nData)
{
//throw Mantid::Kernel::Exception::NotImplementedError("");
for(size_t i=0;i<nData;i++)
@@ -118,7 +118,7 @@ class ParameterTieTest_Nothing: public ParamFunction, public IFunctionMW
declareParameter("B1e2Ta_");
}
std::string name()const{return "ParameterTieTest_Nothing";}
void functionMW(double* , const double*, const size_t)const{}
void function1D(double* , const double*, const size_t)const{}
};

class ParameterTieTest : public CxxTest::TestSuite
@@ -127,7 +127,7 @@ class ParameterTieTest : public CxxTest::TestSuite

void testComposite()
{
CompositeFunctionMW mfun;
CompositeFunction mfun;
ParameterTieTest_Gauss *g1 = new ParameterTieTest_Gauss(),*g2 = new ParameterTieTest_Gauss();
ParameterTieTest_Linear *bk = new ParameterTieTest_Linear();

@@ -163,7 +163,7 @@ class ParameterTieTest : public CxxTest::TestSuite

void testComposite1()
{
CompositeFunctionMW mfun;
CompositeFunction mfun;
ParameterTieTest_Gauss *g1 = new ParameterTieTest_Gauss(),*g2 = new ParameterTieTest_Gauss();
ParameterTieTest_Linear *bk1 = new ParameterTieTest_Linear(),*bk2 = new ParameterTieTest_Linear();

@@ -187,9 +187,9 @@ class ParameterTieTest : public CxxTest::TestSuite

void testComposite2()
{
CompositeFunctionMW mfun;
CompositeFunctionMW* mf1 = new CompositeFunctionMW;
CompositeFunctionMW* mf2 = new CompositeFunctionMW;
CompositeFunction mfun;
CompositeFunction* mf1 = new CompositeFunction;
CompositeFunction* mf2 = new CompositeFunction;
ParameterTieTest_Gauss *g1 = new ParameterTieTest_Gauss(),*g2 = new ParameterTieTest_Gauss();
ParameterTieTest_Linear *bk1 = new ParameterTieTest_Linear(),*bk2 = new ParameterTieTest_Linear();
ParameterTieTest_Nothing* nth = new ParameterTieTest_Nothing;
@@ -274,11 +274,11 @@ class ParameterTieTest : public CxxTest::TestSuite
{
ParameterTie tie(fun,"f10.sig");
}
void mustThrow4(IFitFunction* fun)
void mustThrow4(IFunction* fun)
{
ParameterTie tie(fun,"f1.a");
}
void mustThrow5(IFitFunction* fun)
void mustThrow5(IFunction* fun)
{
ParameterTie tie(fun,"cen");
}
@@ -128,8 +128,9 @@ set ( TEST_FILES
test/FitTest.h
test/FlatBackgroundTest.h
test/FuncMinimizerFactoryTest.h
test/FunctionFactoryTest.h
test/FunctionTest.h
test/FunctionFactoryTest.h
test/Gaussian1DTest.h
test/GausDecayTest.h
test/GausOscTest.h
test/Gaussian1DTest.h

Large diffs are not rendered by default.