#include #include #include "Matrix.h" #include "Function.h" #include "Function1D.h" #include "Function2D.h" #include "Function3D.h" class Function1D_Test:public ::testing::Test{ protected: static void SetUpFunction1DTester(){ } static void TearDownTestCase(){ } void SetUp(){ } void TearDown(){ } }; TEST_F(Function1D_Test, sign) { double * dataA =Aurora::malloc(9); double * dataB =Aurora::malloc(9); for (int i = 0; i < 9; ++i) { dataA[i]=(double)(i-3); dataB[i]=(double)(i+2); } Aurora::Matrix A = Aurora::Matrix::New(dataA,3,3); Aurora::Matrix B = Aurora::Matrix::New(dataB,3,3); auto C = sign(A*B); double * result = C.getData(); EXPECT_EQ(-1, result[0]); EXPECT_EQ(0, result[3]); EXPECT_EQ(1, result[4]); } TEST_F(Function1D_Test, repmat) { //input 1D repmat 2D double* input = new double[10]{1,2,3,4,5,6,7,8,9,10}; Aurora::Matrix m(std::shared_ptr(input,std::default_delete()),std::vector{10}); EXPECT_DOUBLE_EQ(repmat(m,1,1).getData()[7],8); EXPECT_DOUBLE_EQ(repmat(m,2,3).getDataSize(),60); EXPECT_DOUBLE_EQ(repmat(m,2,3).getData()[22],3); EXPECT_DOUBLE_EQ(repmat(m,2,3).getDimSize(0),20); EXPECT_DOUBLE_EQ(repmat(m,2,3).getDimSize(1),3); EXPECT_DOUBLE_EQ(repmat(m,2,3).getDimSize(2),1); //input 2D repmat 2D double* input2 = new double[10]{1,2,3,4,5,6,7,8,9,10}; Aurora::Matrix m2(std::shared_ptr(input2,std::default_delete()),std::vector{5,2}); EXPECT_DOUBLE_EQ(repmat(m2,1,1).getData()[7],8); EXPECT_DOUBLE_EQ(repmat(m2,2,3).getDataSize(),60); EXPECT_DOUBLE_EQ(repmat(m2,2,3).getData()[22],3); EXPECT_DOUBLE_EQ(repmat(m2,2,3).getDimSize(0),10); EXPECT_DOUBLE_EQ(repmat(m2,2,3).getDimSize(1),6); EXPECT_DOUBLE_EQ(repmat(m2,2,3).getDimSize(2),1); //input 1D repmat 3D double* input3 = new double[10]{1,2,3,4,5,6,7,8,9,10}; Aurora::Matrix m3(std::shared_ptr(input3,std::default_delete()),std::vector{10}); EXPECT_DOUBLE_EQ(repmat(m3,1,1,1).getData()[7],8); EXPECT_DOUBLE_EQ(repmat(m3,2,3,4).getDataSize(),240); EXPECT_DOUBLE_EQ(repmat(m3,2,3,4).getData()[22],3); EXPECT_DOUBLE_EQ(repmat(m3,2,3,4).getDimSize(0),20); EXPECT_DOUBLE_EQ(repmat(m3,2,3,4).getDimSize(1),3); EXPECT_DOUBLE_EQ(repmat(m3,2,3,4).getDimSize(2),4); //input 2D repmat 3D double* input4 = new double[10]{1,2,3,4,5,6,7,8,9,10}; Aurora::Matrix m4(std::shared_ptr(input4,std::default_delete()),std::vector{5,2}); EXPECT_DOUBLE_EQ(repmat(m4,1,1).getData()[7],8); EXPECT_DOUBLE_EQ(repmat(m4,2,3,4).getDataSize(),240); EXPECT_DOUBLE_EQ(repmat(m4,2,3,4).getData()[22],3); EXPECT_DOUBLE_EQ(repmat(m4,2,3,4).getDimSize(0),10); EXPECT_DOUBLE_EQ(repmat(m4,2,3,4).getDimSize(1),6); EXPECT_DOUBLE_EQ(repmat(m4,2,3,4).getDimSize(2),4); } TEST_F(Function1D_Test, interp1) { double* xD= new double[5]{1,2,3,4,5}; Aurora::Matrix x(std::shared_ptr(xD,std::default_delete()),std::vector{5}); double* yD= new double[5]{1,4,9,16,25}; Aurora::Matrix y(std::shared_ptr(yD,std::default_delete()),std::vector{5}); double* x1D= new double[3]{1.22,2.69,3.84}; Aurora::Matrix x1(std::shared_ptr(x1D,std::default_delete()),std::vector{3}); Aurora::Matrix result = interp1(x,y,x1,Aurora::InterpnMethod::Spline); EXPECT_DOUBLE_EQ(result.getData()[0],1.4884); EXPECT_DOUBLE_EQ(result.getData()[1],7.2361); EXPECT_DOUBLE_EQ(result.getData()[2],14.7456); result = interp1(x,y,x1,Aurora::InterpnMethod::Linear); EXPECT_DOUBLE_EQ(result.getData()[0],1.66); EXPECT_DOUBLE_EQ(result.getData()[1],7.45); EXPECT_DOUBLE_EQ(result.getData()[2],14.88); } TEST_F(Function1D_Test, polyval){ double dataP[3]={3,2,1}; double dataX[3]={5,7,9}; double*resultP = Aurora::polyval(dataX,dataP,3); EXPECT_DOUBLE_EQ(86., resultP[0])<<" polyval error;"; EXPECT_DOUBLE_EQ(162., resultP[1])<<" polyval error;"; EXPECT_DOUBLE_EQ(262., resultP[2])<<" polyval error;"; delete [] resultP; }