From 6f17ff281cca16ed06309b7508fa76f4784027a9 Mon Sep 17 00:00:00 2001 From: Lukas Cejka <lukas.ostatek@gmail.com> Date: Sat, 17 Nov 2018 17:38:41 +0100 Subject: [PATCH] Added Ellpack and SlicedEllpack to tests. Changed setCompressedRowLengths test to make it work with all Ellpacks. setRow test is broken for SlicedEllpack. Commiting for backup purposes. --- src/UnitTests/Matrices/SparseMatrixTest.h | 371 +++++++++++++++++++--- 1 file changed, 327 insertions(+), 44 deletions(-) diff --git a/src/UnitTests/Matrices/SparseMatrixTest.h b/src/UnitTests/Matrices/SparseMatrixTest.h index 9aa78a3fe7..3ea2885c5a 100644 --- a/src/UnitTests/Matrices/SparseMatrixTest.h +++ b/src/UnitTests/Matrices/SparseMatrixTest.h @@ -148,16 +148,142 @@ void test_SetCompressedRowLengths() m.setCompressedRowLengths( rowLengths ); - EXPECT_EQ( m.getRowLength( 0 ), 3 ); - EXPECT_EQ( m.getRowLength( 1 ), 3 ); - EXPECT_EQ( m.getRowLength( 2 ), 1 ); - EXPECT_EQ( m.getRowLength( 3 ), 2 ); - EXPECT_EQ( m.getRowLength( 4 ), 3 ); - EXPECT_EQ( m.getRowLength( 5 ), 4 ); - EXPECT_EQ( m.getRowLength( 6 ), 5 ); - EXPECT_EQ( m.getRowLength( 7 ), 6 ); - EXPECT_EQ( m.getRowLength( 8 ), 7 ); - EXPECT_EQ( m.getRowLength( 9 ), 8 ); + bool test = false; + + std::cout << TNL::String ( m.getType() ) << std::endl; + if( m.getType() == TNL::String( "Matrices::CSR< int, Devices::Host >" ) || m.getType() == TNL::String( "Matrices::CSR< long int, Devices::Host >" ) ) + { + test = true; + std::cout << "\n 1 The if statement went through!!! \n"; + } + +// if( TNL::String( m.getType() ) == ( TNL::String( "Matrices::CSR< ") + +// TNL::String( TNL::getType< RealType >() ) + +// TNL::String( ", " ) + +// TNL::String( "Devices::Host" ) + +// TNL::String( ", " ) + +// TNL::String( TNL::getType< IndexType >() ) + +// TNL::String( " >" ) ) +// || +// ( TNL::String( "Matrices::CSR< ") + +// TNL::String( TNL::getType< RealType >() ) + +// TNL::String( ", " ) + +// TNL::String( "Cuda" ) + +// TNL::String( ", " ) + +// TNL::String( TNL::getType< IndexType >() ) + +// TNL::String( " >" ) ) +// ) +// { +// test = true; +// } + + if (test) + { + std::cout << "\n 2 The if statement went through!!! \n"; + } + + if( m.getType() == TNL::String( TNL::String( "Matrices::CSR< ") + + TNL::String( TNL::getType< RealType >() ) + + TNL::String( ", " ) + + TNL::String( "Devices::Host" ) + + TNL::String( ", " ) + + TNL::String( TNL::getType< IndexType >() ) + + TNL::String( " >" ) ) + || + m.getType() == TNL::String( TNL::String( "Matrices::CSR< ") + + TNL::String( TNL::getType< RealType >() ) + + TNL::String( ", " ) + + TNL::String( "Cuda" ) + + TNL::String( ", " ) + + TNL::String( TNL::getType< IndexType >() ) + + TNL::String( " >" ) ) + ) + { + std::cout << "\nIf for CSR\n"; + std::cout << TNL::String ( m.getType() ) << std::endl; + EXPECT_EQ( m.getRowLength( 0 ), 3 ); + EXPECT_EQ( m.getRowLength( 1 ), 3 ); + EXPECT_EQ( m.getRowLength( 2 ), 1 ); + EXPECT_EQ( m.getRowLength( 3 ), 2 ); + EXPECT_EQ( m.getRowLength( 4 ), 3 ); + EXPECT_EQ( m.getRowLength( 5 ), 4 ); + EXPECT_EQ( m.getRowLength( 6 ), 5 ); + EXPECT_EQ( m.getRowLength( 7 ), 6 ); + EXPECT_EQ( m.getRowLength( 8 ), 7 ); + EXPECT_EQ( m.getRowLength( 9 ), 8 ); + } + + if( m.getType() == TNL::String( TNL::String( "Matrices::Ellpack< ") + + TNL::String( TNL::getType< RealType >() ) + + TNL::String( ", " ) + + TNL::String( "Devices::Host" ) + + TNL::String( ", " ) + + TNL::String( TNL::getType< IndexType >() ) + + TNL::String( " >" ) ) + || + m.getType() == TNL::String( TNL::String( "Matrices::SlicedEllpack< ") + + TNL::String( TNL::getType< RealType >() ) + + TNL::String( ", " ) + + TNL::String( "Devices::Host" ) + + TNL::String( " >" ) ) + ) + { + std::cout << "\nIf for Ellpack Host\n"; + std::cout << TNL::String ( m.getType() ) << std::endl; + EXPECT_EQ( m.getRowLength( 0 ), 8 ); + EXPECT_EQ( m.getRowLength( 1 ), 8 ); + EXPECT_EQ( m.getRowLength( 2 ), 8 ); + EXPECT_EQ( m.getRowLength( 3 ), 8 ); + EXPECT_EQ( m.getRowLength( 4 ), 8 ); + EXPECT_EQ( m.getRowLength( 5 ), 8 ); + EXPECT_EQ( m.getRowLength( 6 ), 8 ); + EXPECT_EQ( m.getRowLength( 7 ), 8 ); + EXPECT_EQ( m.getRowLength( 8 ), 8 ); + EXPECT_EQ( m.getRowLength( 9 ), 8 ); + } + else if( m.getType() == TNL::String( TNL::String( "Matrices::Ellpack< ") + + TNL::String( TNL::getType< RealType >() ) + + TNL::String( ", " ) + + TNL::String( "Cuda" ) + + TNL::String( ", " ) + + TNL::String( TNL::getType< IndexType >() ) + + TNL::String( " >" ) ) + || + m.getType() == TNL::String( TNL::String( "Matrices::SlicedEllpack< ") + + TNL::String( TNL::getType< RealType >() ) + + TNL::String( ", " ) + + TNL::String( "Cuda" ) + + TNL::String( " >" ) ) + + ) + { + std::cout << "\nIf for Ellpack Cuda\n"; + std::cout << TNL::String ( m.getType() ) << std::endl; + EXPECT_EQ( m.getRowLength( 0 ), 8 ); + EXPECT_EQ( m.getRowLength( 1 ), 8 ); + EXPECT_EQ( m.getRowLength( 2 ), 8 ); + EXPECT_EQ( m.getRowLength( 3 ), 8 ); + EXPECT_EQ( m.getRowLength( 4 ), 8 ); + EXPECT_EQ( m.getRowLength( 5 ), 8 ); + EXPECT_EQ( m.getRowLength( 6 ), 8 ); + EXPECT_EQ( m.getRowLength( 7 ), 8 ); + EXPECT_EQ( m.getRowLength( 8 ), 8 ); + EXPECT_EQ( m.getRowLength( 9 ), 8 ); + } + else + { + std::cout << "\nElse for Everything else\n"; + EXPECT_EQ( m.getRowLength( 0 ), 3 ); + EXPECT_EQ( m.getRowLength( 1 ), 3 ); + EXPECT_EQ( m.getRowLength( 2 ), 1 ); + EXPECT_EQ( m.getRowLength( 3 ), 2 ); + EXPECT_EQ( m.getRowLength( 4 ), 3 ); + EXPECT_EQ( m.getRowLength( 5 ), 4 ); + EXPECT_EQ( m.getRowLength( 6 ), 5 ); + EXPECT_EQ( m.getRowLength( 7 ), 6 ); + EXPECT_EQ( m.getRowLength( 8 ), 7 ); + EXPECT_EQ( m.getRowLength( 9 ), 8 ); + } } template< typename Matrix1, typename Matrix2 > @@ -792,14 +918,14 @@ void test_Print() // test fixture for typed tests template< typename Matrix > -class SparseMatrixTest : public ::testing::Test +class CSRMatrixTest : public ::testing::Test { protected: - using SparseMatrixType = Matrix; + using CSRMatrixType = Matrix; }; // types for which MatrixTest is instantiated -using SparseMatrixTypes = ::testing::Types +using CSRMatrixTypes = ::testing::Types < TNL::Matrices::CSR< int, TNL::Devices::Host, short >, TNL::Matrices::CSR< long, TNL::Devices::Host, short >, @@ -829,76 +955,233 @@ using SparseMatrixTypes = ::testing::Types #endif >; -TYPED_TEST_CASE( SparseMatrixTest, SparseMatrixTypes ); +TYPED_TEST_CASE( CSRMatrixTest, CSRMatrixTypes); + +TYPED_TEST( CSRMatrixTest, setDimensionsTest ) +{ + using CSRMatrixType = typename TestFixture::CSRMatrixType; + + test_SetDimensions< CSRMatrixType >(); +} + +TYPED_TEST( CSRMatrixTest, setCompressedRowLengthsTest ) +{ + using CSRMatrixType = typename TestFixture::CSRMatrixType; + + test_SetCompressedRowLengths< CSRMatrixType >(); +// bool testRan = false; +// EXPECT_TRUE( testRan ); +// std::cout << "\n\n THIS TEST DID NOT RUN!\n"; +// std::cout << "\n This method isn't testable for different forMats, their implementations differ based on their algorithm.\n\n"; +} + +TYPED_TEST( CSRMatrixTest, setLikeTest ) +{ + using CSRMatrixType = typename TestFixture::CSRMatrixType; + + test_SetLike< CSRMatrixType, CSRMatrixType >(); +} + +TYPED_TEST( CSRMatrixTest, resetTest ) +{ + using CSRMatrixType = typename TestFixture::CSRMatrixType; + + test_Reset< CSRMatrixType >(); +} + +TYPED_TEST( CSRMatrixTest, setElementTest ) +{ + using CSRMatrixType = typename TestFixture::CSRMatrixType; + + test_SetElement< CSRMatrixType >(); +} + +TYPED_TEST( CSRMatrixTest, addElementTest ) +{ + using CSRMatrixType = typename TestFixture::CSRMatrixType; + + test_AddElement< CSRMatrixType >(); +} + +TYPED_TEST( CSRMatrixTest, setRowTest ) +{ + using CSRMatrixType = typename TestFixture::CSRMatrixType; + + test_SetRow< CSRMatrixType >(); +} + +TYPED_TEST( CSRMatrixTest, vectorProductTest ) +{ + using CSRMatrixType = typename TestFixture::CSRMatrixType; + + test_VectorProduct< CSRMatrixType >(); +} + +TYPED_TEST( CSRMatrixTest, saveAndLoadTest ) +{ + using CSRMatrixType = typename TestFixture::CSRMatrixType; + + test_SaveAndLoad< CSRMatrixType >(); +} + +TYPED_TEST( CSRMatrixTest, printTest ) +{ + using CSRMatrixType = typename TestFixture::CSRMatrixType; + + test_Print< CSRMatrixType >(); +} + +//// test_getType is not general enough yet. DO NOT TEST IT YET. + +//TEST( SparseMatrixTest, CSR_GetTypeTest_Host ) +//{ +// host_test_GetType< CSR_host_float, CSR_host_int >(); +//} +// +//#ifdef HAVE_CUDA +//TEST( SparseMatrixTest, CSR_GetTypeTest_Cuda ) +//{ +// cuda_test_GetType< CSR_cuda_float, CSR_cuda_int >(); +//} +//#endif + +// test fixture for typed tests +template< typename Matrix > +class EllpackMatrixTest : public ::testing::Test +{ +protected: + using EllpackMatrixType = Matrix; +}; + +// types for which MatrixTest is instantiated +using EllpackMatrixTypes = ::testing::Types +< + TNL::Matrices::Ellpack< int, TNL::Devices::Host, short >, + TNL::Matrices::Ellpack< long, TNL::Devices::Host, short >, + TNL::Matrices::Ellpack< float, TNL::Devices::Host, short >, + TNL::Matrices::Ellpack< double, TNL::Devices::Host, short >, + TNL::Matrices::Ellpack< int, TNL::Devices::Host, int >, + TNL::Matrices::Ellpack< long, TNL::Devices::Host, int >, + TNL::Matrices::Ellpack< float, TNL::Devices::Host, int >, + TNL::Matrices::Ellpack< double, TNL::Devices::Host, int >, + TNL::Matrices::Ellpack< int, TNL::Devices::Host, long >, + TNL::Matrices::Ellpack< long, TNL::Devices::Host, long >, + TNL::Matrices::Ellpack< float, TNL::Devices::Host, long >, + TNL::Matrices::Ellpack< double, TNL::Devices::Host, long >, + TNL::Matrices::SlicedEllpack< int, TNL::Devices::Host, short >, + TNL::Matrices::SlicedEllpack< long, TNL::Devices::Host, short >, + TNL::Matrices::SlicedEllpack< float, TNL::Devices::Host, short >, + TNL::Matrices::SlicedEllpack< double, TNL::Devices::Host, short >, + TNL::Matrices::SlicedEllpack< int, TNL::Devices::Host, int >, + TNL::Matrices::SlicedEllpack< long, TNL::Devices::Host, int >, + TNL::Matrices::SlicedEllpack< float, TNL::Devices::Host, int >, + TNL::Matrices::SlicedEllpack< double, TNL::Devices::Host, int >, + TNL::Matrices::SlicedEllpack< int, TNL::Devices::Host, long >, + TNL::Matrices::SlicedEllpack< long, TNL::Devices::Host, long >, + TNL::Matrices::SlicedEllpack< float, TNL::Devices::Host, long >, + TNL::Matrices::SlicedEllpack< double, TNL::Devices::Host, long >, +#ifdef HAVE_CUDA + TNL::Matrices::Ellpack< int, TNL::Devices::Cuda, short >, + TNL::Matrices::Ellpack< long, TNL::Devices::Cuda, short >, + TNL::Matrices::Ellpack< float, TNL::Devices::Cuda, short >, + TNL::Matrices::Ellpack< double, TNL::Devices::Cuda, short >, + TNL::Matrices::Ellpack< int, TNL::Devices::Cuda, int >, + TNL::Matrices::Ellpack< long, TNL::Devices::Cuda, int >, + TNL::Matrices::Ellpack< float, TNL::Devices::Cuda, int >, + TNL::Matrices::Ellpack< double, TNL::Devices::Cuda, int >, + TNL::Matrices::Ellpack< int, TNL::Devices::Cuda, long >, + TNL::Matrices::Ellpack< long, TNL::Devices::Cuda, long >, + TNL::Matrices::Ellpack< float, TNL::Devices::Cuda, long >, + TNL::Matrices::Ellpack< double, TNL::Devices::Cuda, long >, + TNL::Matrices::SlicedEllpack< int, TNL::Devices::Cuda, short >, + TNL::Matrices::SlicedEllpack< long, TNL::Devices::Cuda, short >, + TNL::Matrices::SlicedEllpack< float, TNL::Devices::Cuda, short >, + TNL::Matrices::SlicedEllpack< double, TNL::Devices::Cuda, short >, + TNL::Matrices::SlicedEllpack< int, TNL::Devices::Cuda, int >, + TNL::Matrices::SlicedEllpack< long, TNL::Devices::Cuda, int >, + TNL::Matrices::SlicedEllpack< float, TNL::Devices::Cuda, int >, + TNL::Matrices::SlicedEllpack< double, TNL::Devices::Cuda, int >, + TNL::Matrices::SlicedEllpack< int, TNL::Devices::Cuda, long >, + TNL::Matrices::SlicedEllpack< long, TNL::Devices::Cuda, long >, + TNL::Matrices::SlicedEllpack< float, TNL::Devices::Cuda, long >, + TNL::Matrices::SlicedEllpack< double, TNL::Devices::Cuda, long > +#endif +>; + +TYPED_TEST_CASE( EllpackMatrixTest, EllpackMatrixTypes ); -TYPED_TEST( SparseMatrixTest, setDimensionsTest ) +TYPED_TEST( EllpackMatrixTest, setDimensionsTest ) { - using SparseMatrixType = typename TestFixture::SparseMatrixType; + using EllpackMatrixType = typename TestFixture::EllpackMatrixType; - test_SetDimensions< SparseMatrixType >(); + test_SetDimensions< EllpackMatrixType >(); } -TYPED_TEST( SparseMatrixTest, setCompressedRowLengthsTest ) +TYPED_TEST( EllpackMatrixTest, setCompressedRowLengthsTest ) { - using SparseMatrixType = typename TestFixture::SparseMatrixType; + using EllpackMatrixType = typename TestFixture::EllpackMatrixType; - test_SetCompressedRowLengths< SparseMatrixType >(); + test_SetCompressedRowLengths< EllpackMatrixType >(); +// bool testRan = false; +// EXPECT_TRUE( testRan ); +// std::cout << "\n\n THIS TEST DID NOT RUN!\n"; +// std::cout << "\n This method isn't testable for different forMats, their implementations differ based on their algorithm.\n\n"; } -TYPED_TEST( SparseMatrixTest, setLikeTest ) +TYPED_TEST( EllpackMatrixTest, setLikeTest ) { - using SparseMatrixType = typename TestFixture::SparseMatrixType; + using EllpackMatrixType = typename TestFixture::EllpackMatrixType; - test_SetLike< SparseMatrixType, SparseMatrixType >(); + test_SetLike< EllpackMatrixType, EllpackMatrixType >(); } -TYPED_TEST( SparseMatrixTest, resetTest ) +TYPED_TEST( EllpackMatrixTest, resetTest ) { - using SparseMatrixType = typename TestFixture::SparseMatrixType; + using EllpackMatrixType = typename TestFixture::EllpackMatrixType; - test_Reset< SparseMatrixType >(); + test_Reset< EllpackMatrixType >(); } -TYPED_TEST( SparseMatrixTest, setElementTest ) +TYPED_TEST( EllpackMatrixTest, setElementTest ) { - using SparseMatrixType = typename TestFixture::SparseMatrixType; + using EllpackMatrixType = typename TestFixture::EllpackMatrixType; - test_SetElement< SparseMatrixType >(); + test_SetElement< EllpackMatrixType >(); } -TYPED_TEST( SparseMatrixTest, addElementTest ) +TYPED_TEST( EllpackMatrixTest, addElementTest ) { - using SparseMatrixType = typename TestFixture::SparseMatrixType; + using EllpackMatrixType = typename TestFixture::EllpackMatrixType; - test_AddElement< SparseMatrixType >(); + test_AddElement< EllpackMatrixType >(); } -TYPED_TEST( SparseMatrixTest, setRowTest ) +TYPED_TEST( EllpackMatrixTest, setRowTest ) { - using SparseMatrixType = typename TestFixture::SparseMatrixType; + using EllpackMatrixType = typename TestFixture::EllpackMatrixType; - test_SetRow< SparseMatrixType >(); + test_SetRow< EllpackMatrixType >(); } -TYPED_TEST( SparseMatrixTest, vectorProductTest ) +TYPED_TEST( EllpackMatrixTest, vectorProductTest ) { - using SparseMatrixType = typename TestFixture::SparseMatrixType; + using EllpackMatrixType = typename TestFixture::EllpackMatrixType; - test_VectorProduct< SparseMatrixType >(); + test_VectorProduct< EllpackMatrixType >(); } -TYPED_TEST( SparseMatrixTest, saveAndLoadTest ) +TYPED_TEST( EllpackMatrixTest, saveAndLoadTest ) { - using SparseMatrixType = typename TestFixture::SparseMatrixType; + using EllpackMatrixType = typename TestFixture::EllpackMatrixType; - test_SaveAndLoad< SparseMatrixType >(); + test_SaveAndLoad< EllpackMatrixType >(); } -TYPED_TEST( SparseMatrixTest, printTest ) +TYPED_TEST( EllpackMatrixTest, printTest ) { - using SparseMatrixType = typename TestFixture::SparseMatrixType; + using EllpackMatrixType = typename TestFixture::EllpackMatrixType; - test_Print< SparseMatrixType >(); + test_Print< EllpackMatrixType >(); } //// test_getType is not general enough yet. DO NOT TEST IT YET. -- GitLab