From 9187c893fdd0081bb7da507c7f733dea35784d08 Mon Sep 17 00:00:00 2001 From: Mohammad Mahadi Hasan <mahadi.hasan@tum.de> Date: Wed, 29 Jan 2014 13:05:05 +0100 Subject: [PATCH] Unit tests with Eigen Matrix for: 1. OutputData.h 2. MathFuctions.h --- Tests/UnitTests/TestCore/MathFunctionsTest.h | 75 ++++++++++++++++++++ Tests/UnitTests/TestCore/OutputDataTest.h | 73 +++++++++++++++++++ Tests/UnitTests/TestCore/main.cpp | 1 + 3 files changed, 149 insertions(+) create mode 100644 Tests/UnitTests/TestCore/MathFunctionsTest.h diff --git a/Tests/UnitTests/TestCore/MathFunctionsTest.h b/Tests/UnitTests/TestCore/MathFunctionsTest.h new file mode 100644 index 00000000000..da713cc5d12 --- /dev/null +++ b/Tests/UnitTests/TestCore/MathFunctionsTest.h @@ -0,0 +1,75 @@ +#ifndef MATHFUNCTIONSTEST_H +#define MATHFUNCTIONSTEST_H + +#include "MathFunctions.h" +#include "gtest/gtest.h" + +class MathFunctionsTest : public::testing::Test +{ +protected: + MathFunctionsTest(); + virtual ~MathFunctionsTest(){} + + Eigen::Matrix2cd matrix_2cd; +}; + +MathFunctionsTest::MathFunctionsTest(){ + matrix_2cd(0,0) = complex_t(2.0, 1.0); + matrix_2cd(0,1) = complex_t(3.0, 1.0); + matrix_2cd(1,0) = complex_t(4.0, 1.0); + matrix_2cd(1,1) = complex_t(5.0, 1.0); +} + +TEST_F(MathFunctionsTest, Norm) +{ + + Eigen::Matrix2d matrix_norm = MathFunctions::Norm(matrix_2cd); + EXPECT_EQ(std::norm((complex_t)matrix_2cd(0,0)), matrix_norm(0,0)); + EXPECT_EQ(std::norm((complex_t)matrix_2cd(0,1)), matrix_norm(0,1)); + EXPECT_EQ(std::norm((complex_t)matrix_2cd(1,0)), matrix_norm(1,0)); + EXPECT_EQ(std::norm((complex_t)matrix_2cd(1,1)), matrix_norm(1,1)); +} + +TEST_F(MathFunctionsTest, Abs) +{ + Eigen::Matrix2d matrix_abs = MathFunctions::Abs(matrix_2cd); + EXPECT_EQ(std::abs((complex_t)matrix_2cd(0,0)), matrix_abs(0,0)); + EXPECT_EQ(std::abs((complex_t)matrix_2cd(0,1)), matrix_abs(0,1)); + EXPECT_EQ(std::abs((complex_t)matrix_2cd(1,0)), matrix_abs(1,0)); + EXPECT_EQ(std::abs((complex_t)matrix_2cd(1,1)), matrix_abs(1,1)); +} + +TEST_F(MathFunctionsTest, ProductByElement) +{ + Eigen::Matrix2cd matrix_2cd2;// = Eigen::Matrix2cd::Identity(); + matrix_2cd2(0,0) = complex_t(2.0, 1.0); + matrix_2cd2(0,1) = complex_t(3.0, 1.0); + matrix_2cd2(1,0) = complex_t(4.0, 1.0); + matrix_2cd2(1,1) = complex_t(5.0, 1.0); + + Eigen::Matrix2cd matrix_prod = MathFunctions::ProductByElement(matrix_2cd, matrix_2cd2); + EXPECT_EQ(complex_t(3.0, 4.0), matrix_prod(0,0)); + EXPECT_EQ(complex_t(8.0, 6.0), matrix_prod(0,1)); + EXPECT_EQ(complex_t(15.0, 8.0), matrix_prod(1,0)); + EXPECT_EQ(complex_t(24.0, 10.0), matrix_prod(1,1)); +} + +TEST_F(MathFunctionsTest, Conj) +{ + Eigen::Matrix2cd matrix_conj = MathFunctions::Conj(matrix_2cd); + EXPECT_EQ(std::conj((complex_t)matrix_2cd(0,0)), matrix_conj(0,0)); + EXPECT_EQ(std::conj((complex_t)matrix_2cd(0,1)), matrix_conj(0,1)); + EXPECT_EQ(std::conj((complex_t)matrix_2cd(1,0)), matrix_conj(1,0)); + EXPECT_EQ(std::conj((complex_t)matrix_2cd(1,1)), matrix_conj(1,1)); +} + +TEST_F(MathFunctionsTest, Real) +{ + Eigen::Matrix2d matrix_conj = MathFunctions::Real(matrix_2cd); + EXPECT_EQ(((complex_t)matrix_2cd(0,0)).real(), matrix_conj(0,0)); + EXPECT_EQ(((complex_t)matrix_2cd(0,1)).real(), matrix_conj(0,1)); + EXPECT_EQ(((complex_t)matrix_2cd(1,0)).real(), matrix_conj(1,0)); + EXPECT_EQ(((complex_t)matrix_2cd(1,1)).real(), matrix_conj(1,1)); +} + +#endif //MATHFUNCTIONSTEST_H diff --git a/Tests/UnitTests/TestCore/OutputDataTest.h b/Tests/UnitTests/TestCore/OutputDataTest.h index f5ad77c4aec..bdaa70d0db5 100644 --- a/Tests/UnitTests/TestCore/OutputDataTest.h +++ b/Tests/UnitTests/TestCore/OutputDataTest.h @@ -17,6 +17,8 @@ class OutputDataTest : public ::testing::Test OutputData<float> fl_data_1d; OutputData<double> db_data_3d; std::vector<size_t> zero_3d_coordinate; + + OutputData<Eigen::Matrix2d> matrix_data_2d; }; OutputDataTest::OutputDataTest() @@ -38,6 +40,12 @@ OutputDataTest::OutputDataTest() *it = (double)i; ++it; } + + + + matrix_data_2d.addAxis(angle_axis); + matrix_data_2d.addAxis(length_axis); + matrix_data_2d.setAllTo(Eigen::Matrix2d::Identity()); } OutputDataTest::~OutputDataTest() @@ -54,6 +62,8 @@ TEST_F(OutputDataTest, SizeAfterAddingAxes) EXPECT_EQ((size_t)1, int_data_0d.getAllocatedSize()); EXPECT_EQ((size_t)20, fl_data_1d.getAllocatedSize()); EXPECT_EQ((size_t)2000, db_data_3d.getAllocatedSize()); + + EXPECT_EQ((size_t)200, matrix_data_2d.getAllocatedSize()); } TEST_F(OutputDataTest, DataInitialization) @@ -63,8 +73,15 @@ TEST_F(OutputDataTest, DataInitialization) coordinates.push_back(4); coordinates.push_back(3); EXPECT_DOUBLE_EQ((double)1143, db_data_3d[db_data_3d.toIndex(coordinates)]); + + + std::vector<int> coordinates2; + coordinates2.push_back(1); + coordinates2.push_back(55); + EXPECT_EQ(Eigen::Matrix2d::Identity(), matrix_data_2d[matrix_data_2d.toIndex(coordinates2)]); } + TEST_F(OutputDataTest, DataCopying) { OutputData<double> data1; @@ -100,6 +117,34 @@ TEST_F(OutputDataTest, DataCopying) EXPECT_TRUE( data2.hasSameDimensions(data2)); EXPECT_TRUE( data2.hasSameShape(data2)); + + + OutputData<Eigen::Matrix2d> mdata1; + OutputData<Eigen::Matrix2d> mdata2; + mdata1.addAxis("axis1", 10, 0., 10.); + mdata2.addAxis("axis1", 10, 0., 10.); + EXPECT_TRUE( mdata1.hasSameDimensions(mdata2)); + EXPECT_TRUE( mdata1.hasSameShape(mdata2)); + + mdata1.addAxis("axis2", 10, 0., 10.); + mdata2.addAxis("axis2", 10, 1., 10.); + EXPECT_TRUE( mdata1.hasSameDimensions(mdata2)); + EXPECT_FALSE( mdata1.hasSameShape(mdata2)); + + mdata2.copyFrom(mdata1); + EXPECT_TRUE( mdata1.hasSameDimensions(mdata2)); + EXPECT_TRUE( mdata1.hasSameShape(mdata2)); + + mdata1.setAllTo(Eigen::Matrix2d::Identity()); + mdata2.copyFrom(mdata1); + EXPECT_TRUE( mdata1.hasSameDimensions(mdata2)); + EXPECT_TRUE( mdata1.hasSameShape(mdata2)); + EXPECT_TRUE( mdata2.hasSameDimensions(mdata1)); + EXPECT_TRUE( mdata2.hasSameShape(mdata1)); + EXPECT_TRUE( mdata1.hasSameDimensions(mdata1)); + EXPECT_TRUE( mdata1.hasSameShape(mdata1)); + EXPECT_TRUE( mdata2.hasSameDimensions(mdata2)); + EXPECT_TRUE( mdata2.hasSameShape(mdata2)); } TEST_F(OutputDataTest, MaxElement) @@ -113,6 +158,17 @@ TEST_F(OutputDataTest, MaxElement) for (size_t i=0; i<data.getAllocatedSize(); ++i) if(i==10) (*it)=10.0; OutputData<double >::const_iterator cit = std::max_element(data.begin(), data.end()); EXPECT_EQ( double(10.0), (*cit)); + + +// OutputData<Eigen::Matrix2d > mdata; +// mdata.addAxis("axis1", 10, 0., 10.); +// mdata.addAxis("axis2", 2, 0., 10.); +// mdata.setAllTo(Eigen::Matrix2d::Identity()); + +// OutputData<Eigen::Matrix2d >::iterator it2 = mdata.begin(); +// for (size_t i=0; i<mdata.getAllocatedSize(); ++i) if(i==10) (*it2) = 5*Eigen::Matrix2d::Identity(); +// OutputData<Eigen::Matrix2d >::const_iterator cit2 = std::max_element(mdata.begin(), mdata.end()); +// EXPECT_EQ( 5*Eigen::Matrix2d::Identity(), (*cit2)); } TEST_F(OutputDataTest, ValueOfAxis) @@ -128,6 +184,18 @@ TEST_F(OutputDataTest, ValueOfAxis) EXPECT_EQ( double(0.0), data.getValueOfAxis("axis2", 2)); EXPECT_EQ( double(9.0), data.getValueOfAxis("axis1", 19)); EXPECT_EQ( double(10.0), data.getValueOfAxis("axis2", 19)); + + OutputData<Eigen::Matrix2d > mdata; + mdata.addAxis("axis1", 10, 0., 9.); + mdata.addAxis("axis2", 2, 0., 10.); + EXPECT_EQ( double(0.0), mdata.getValueOfAxis("axis1", 0)); + EXPECT_EQ( double(0.0), mdata.getValueOfAxis("axis2", 0)); + EXPECT_EQ( double(0.0), mdata.getValueOfAxis("axis1", 1)); + EXPECT_EQ( double(10.0), mdata.getValueOfAxis("axis2", 1)); + EXPECT_EQ( double(1.0), mdata.getValueOfAxis("axis1", 2)); + EXPECT_EQ( double(0.0), mdata.getValueOfAxis("axis2", 2)); + EXPECT_EQ( double(9.0), mdata.getValueOfAxis("axis1", 19)); + EXPECT_EQ( double(10.0), mdata.getValueOfAxis("axis2", 19)); } @@ -154,6 +222,7 @@ TEST_F(OutputDataTest, SetRectangularMask) for(OutputData<double>::iterator it = data.begin(); it!=data.end(); ++it) { EXPECT_EQ( int(index++), int(it.getIndex()) ); } + } TEST_F(OutputDataTest, SetEllipticMask) @@ -178,6 +247,10 @@ TEST_F(OutputDataTest, SetCleared) db_data_3d.clear(); db_data_3d.setAllTo(1.0); EXPECT_EQ( db_data_3d[0], 1.0); + + matrix_data_2d.clear(); + matrix_data_2d.setAllTo(10*Eigen::Matrix2d::Identity()); + EXPECT_EQ(10*Eigen::Matrix2d::Identity(), matrix_data_2d[0]); } diff --git a/Tests/UnitTests/TestCore/main.cpp b/Tests/UnitTests/TestCore/main.cpp index 22b9050d247..a3eb8cdfd97 100644 --- a/Tests/UnitTests/TestCore/main.cpp +++ b/Tests/UnitTests/TestCore/main.cpp @@ -36,6 +36,7 @@ #include "MatrixRTCoefficientsTest.h" #include "ScalarSpecularInfoMapTest.h" #include "MatrixSpecularInfoMapTest.h" +#include "MathFunctionsTest.h" struct ErrorStreamRedirect { ErrorStreamRedirect( std::streambuf * new_buffer ) -- GitLab