Function1D bug fix and unit test.

This commit is contained in:
Krad
2023-04-23 10:39:26 +08:00
parent 0cde4460a8
commit 5e85d0f361
3 changed files with 112 additions and 15 deletions

View File

@@ -1,5 +1,8 @@
#include <gtest/gtest.h>
#include <vector>
#include "TestUtility.h"
#include "Matrix.h"
#include "Function.h"
#include "Function1D.h"
@@ -107,3 +110,97 @@ TEST_F(Function1D_Test, polyval){
EXPECT_DOUBLE_EQ(262., resultP[2])<<" polyval error;";
delete [] resultP;
}
TEST_F(Function1D_Test, complexAndEtc){
//complex
{
double *dataP =new double[8]{3,2,1,6, 7, 8 , 19, 13};
auto matrixAN = Aurora::Matrix::fromRawData(dataP,2,4);
auto matrixBC = Aurora::complex(matrixAN);
EXPECT_EQ(8, matrixBC.getDataSize());
EXPECT_EQ(Aurora::Complex, matrixBC.getValueType());
EXPECT_DOUBLE_EQ(3, matrixBC.getData()[0]);
EXPECT_DOUBLE_EQ(0, matrixBC.getData()[3]);
}
//complex & real & imag
{
double *dataP =new double[8]{3,2,1,6, 7, 8 , 19, 13};
auto matrixAC = Aurora::Matrix::fromRawData(dataP,2,2,0,Aurora::Complex);
auto matrixCN = Aurora::real(matrixAC);
EXPECT_EQ(4, matrixCN.getDataSize());
EXPECT_EQ(Aurora::Normal, matrixCN.getValueType());
EXPECT_DOUBLE_EQ(3, matrixCN.getData()[0]);
EXPECT_DOUBLE_EQ(19, matrixCN.getData()[3]);
auto matrixDN = Aurora::imag(matrixAC);
EXPECT_EQ(4, matrixDN.getDataSize());
EXPECT_EQ(Aurora::Normal, matrixDN.getValueType());
EXPECT_DOUBLE_EQ(2, matrixDN.getData()[0]);
EXPECT_DOUBLE_EQ(13, matrixDN.getData()[3]);
}
}
TEST_F(Function1D_Test, ceilAndRound) {
double *dataP = new double[3]{3.1, 2.5, 1.8};
auto matrixA = Aurora::Matrix::fromRawData(dataP, 3);
auto matrixB = Aurora::ceil(matrixA);
EXPECT_EQ(3, matrixB.getDataSize());
EXPECT_EQ(Aurora::Normal, matrixB.getValueType());
EXPECT_DOUBLE_EQ(4, matrixB.getData()[0]);
EXPECT_DOUBLE_EQ(3, matrixB.getData()[1]);
EXPECT_DOUBLE_EQ(2, matrixB.getData()[2]);
matrixB = Aurora::ceil(matrixA * 0.5) ;
EXPECT_EQ(3, matrixB.getDataSize());
EXPECT_EQ(Aurora::Normal, matrixB.getValueType());
EXPECT_DOUBLE_EQ(2, matrixB.getData()[0]);
EXPECT_DOUBLE_EQ(2, matrixB.getData()[1]);
EXPECT_DOUBLE_EQ(1, matrixB.getData()[2]);
matrixB = Aurora::round(matrixA);
EXPECT_EQ(3, matrixB.getDataSize());
EXPECT_EQ(Aurora::Normal, matrixB.getValueType());
EXPECT_DOUBLE_EQ(3, matrixB.getData()[0]);
EXPECT_DOUBLE_EQ(3, matrixB.getData()[1]);
EXPECT_DOUBLE_EQ(2, matrixB.getData()[2]);
matrixB = Aurora::round(matrixA * 0.5);
EXPECT_EQ(3, matrixB.getDataSize());
EXPECT_EQ(Aurora::Normal, matrixB.getValueType());
EXPECT_DOUBLE_EQ(2, matrixB.getData()[0]);
EXPECT_DOUBLE_EQ(1, matrixB.getData()[1]);
EXPECT_DOUBLE_EQ(1, matrixB.getData()[2]);
}
TEST_F(Function1D_Test, absAndSqrt) {
double *dataP = new double[3]{1, 4, -3};
auto matrixA = Aurora::Matrix::fromRawData(dataP, 3);
auto matrixB = Aurora::abs(matrixA);
EXPECT_EQ(3, matrixB.getDataSize());
EXPECT_EQ(Aurora::Normal, matrixB.getValueType());
EXPECT_DOUBLE_EQ(1, matrixB.getData()[0]);
EXPECT_DOUBLE_EQ(4, matrixB.getData()[1]);
EXPECT_DOUBLE_EQ(3, matrixB.getData()[2]);
matrixB = Aurora::sqrt(matrixB);
EXPECT_EQ(3, matrixB.getDataSize());
EXPECT_EQ(Aurora::Normal, matrixB.getValueType());
EXPECT_DOUBLE_EQ(1, matrixB.getData()[0]);
EXPECT_DOUBLE_EQ(2, matrixB.getData()[1]);
EXPECT_DOUBLE_EQ(1.7321, fourDecimalRound(matrixB.getData()[2]));
matrixB = Aurora::sqrt(Aurora::abs(matrixA*-1));
EXPECT_EQ(3, matrixB.getDataSize());
EXPECT_EQ(Aurora::Normal, matrixB.getValueType());
EXPECT_DOUBLE_EQ(1, matrixB.getData()[0]);
EXPECT_DOUBLE_EQ(2, matrixB.getData()[1]);
EXPECT_DOUBLE_EQ(1.7321, fourDecimalRound(matrixB.getData()[2]));
matrixB = Aurora::sqrt(matrixA);
EXPECT_EQ(3, matrixB.getDataSize());
EXPECT_EQ(Aurora::Normal, matrixB.getValueType());
EXPECT_DOUBLE_EQ(1, matrixB.getData()[0]);
EXPECT_DOUBLE_EQ(2, matrixB.getData()[1]);
EXPECT_TRUE(isnanf(matrixB.getData()[2]));
}