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