diff --git a/src/UnitTests/Matrices/SparseMatrixTest.h b/src/UnitTests/Matrices/SparseMatrixTest.h
index 0e90017a857331fb7f580d468e53f384a117c121..29ccd27e128da04ec756ecac52e080aaaa94229c 100644
--- a/src/UnitTests/Matrices/SparseMatrixTest.h
+++ b/src/UnitTests/Matrices/SparseMatrixTest.h
@@ -123,6 +123,10 @@ void test_SetDimensions()
 template< typename Matrix >
 void test_SetCompressedRowLengths()
 {
+    typedef typename Matrix::RealType RealType;
+    typedef typename Matrix::DeviceType DeviceType;
+    typedef typename Matrix::IndexType IndexType;
+    
     const int rows = 10;
     const int cols = 11;
     
@@ -132,7 +136,8 @@ void test_SetCompressedRowLengths()
     typename Matrix::CompressedRowLengthsVector rowLengths;
     rowLengths.setSize( rows );
     rowLengths.setValue( 3 );
-    int value = 1;
+    
+    RealType value = 1;
     for( int i = 2; i < rows; i++ )
         rowLengths.setElement( i, value++ );
     
@@ -197,6 +202,9 @@ void test_Reset()
 template< typename Matrix >
 void test_SetElement()
 {
+    typedef typename Matrix::RealType RealType;
+    typedef typename Matrix::DeviceType DeviceType;
+    typedef typename Matrix::IndexType IndexType;
 /*
  * Sets up the following 5x5 sparse matrix:
  *
@@ -217,7 +225,7 @@ void test_SetElement()
     rowLengths.setValue( 1 );
     m.setCompressedRowLengths( rowLengths );    
     
-    int value = 1;
+    RealType value = 1;
     for( int i = 0; i < rows; i++ )
         m.setElement( i, i, value++ );
     
@@ -255,6 +263,9 @@ void test_SetElement()
 template< typename Matrix >
 void test_AddElement()
 {
+    typedef typename Matrix::RealType RealType;
+    typedef typename Matrix::DeviceType DeviceType;
+    typedef typename Matrix::IndexType IndexType;
 /*
  * Sets up the following 6x5 sparse matrix:
  *
@@ -276,7 +287,7 @@ void test_AddElement()
     rowLengths.setValue( 3 );
     m.setCompressedRowLengths( rowLengths );
     
-    int value = 1;
+    RealType value = 1;
     for( int i = 0; i < cols - 2; i++ )     // 0th row
         m.setElement( 0, i, value++ );
     
@@ -340,7 +351,7 @@ void test_AddElement()
  *    |  0 35 14 15  0 |
  *    \  0  0 16 41 18 /
  */
-    int newValue = 1;
+    RealType newValue = 1;
     for( int i = 0; i < cols - 2; i++ )         // 0th row
         m.addElement( 0, i, newValue++, 2.0 );
     
@@ -400,6 +411,9 @@ void test_AddElement()
 template< typename Matrix >
 void test_SetRow()
 {
+    typedef typename Matrix::RealType RealType;
+    typedef typename Matrix::DeviceType DeviceType;
+    typedef typename Matrix::IndexType IndexType;
 /*
  * Sets up the following 3x7 sparse matrix:
  *
@@ -419,7 +433,7 @@ void test_SetRow()
     rowLengths.setElement( 1, 3 );
     m.setCompressedRowLengths( rowLengths );
     
-    int value = 1;
+    RealType value = 1;
     for( int i = 0; i < 3; i++ )
     {
         m.setElement( 0, i + 3, value );
@@ -427,13 +441,16 @@ void test_SetRow()
         m.setElement( 2, i, value + 2);
     }
     
-    int row1 [ 3 ] = { 11, 11, 11 }; int colIndexes1 [ 3 ] = { 0, 1, 2 };
-    int row2 [ 3 ] = { 22, 22, 22 }; int colIndexes2 [ 3 ] = { 0, 1, 2 };
-    int row3 [ 3 ] = { 33, 33, 33 }; int colIndexes3 [ 3 ] = { 3, 4, 5 };
+    RealType row1 [ 3 ] = { 11, 11, 11 }; IndexType colIndexes1 [ 3 ] = { 0, 1, 2 };
+    RealType row2 [ 3 ] = { 22, 22, 22 }; IndexType colIndexes2 [ 3 ] = { 0, 1, 2 };
+    RealType row3 [ 3 ] = { 33, 33, 33 }; IndexType colIndexes3 [ 3 ] = { 3, 4, 5 };
     
-    m.setRow( 0, colIndexes1, row1, 3 );
-    m.setRow( 1, colIndexes2, row2, 3 );
-    m.setRow( 2, colIndexes3, row3, 3 );
+    RealType row = 0;
+    IndexType elements = 3;
+    
+    m.setRow( row++, colIndexes1, row1, elements );
+    m.setRow( row++, colIndexes2, row2, elements );
+    m.setRow( row++, colIndexes3, row3, elements );
     
     EXPECT_EQ( m.getElement( 0, 0 ), 11 );
     EXPECT_EQ( m.getElement( 0, 1 ), 11 );
@@ -463,6 +480,9 @@ void test_SetRow()
 template< typename Matrix >
 void test_VectorProduct()
 {
+    typedef typename Matrix::RealType RealType;
+    typedef typename Matrix::DeviceType DeviceType;
+    typedef typename Matrix::IndexType IndexType;
 /*
  * Sets up the following 5x4 sparse matrix:
  *
@@ -483,7 +503,7 @@ void test_VectorProduct()
     rowLengths.setValue( 3 );
     m.setCompressedRowLengths( rowLengths );
     
-    int value = 1;
+    RealType value = 1;
     for( int i = 0; i < m_cols - 1; i++ )   // 0th row
         m.setElement( 0, i, value++ );
     
@@ -504,10 +524,6 @@ void test_VectorProduct()
     using namespace TNL;
     using namespace TNL::Containers;
     using namespace TNL::Containers::Algorithms;
-    
-    typedef typename Matrix::RealType RealType;
-    typedef typename Matrix::DeviceType DeviceType;
-    typedef typename Matrix::IndexType IndexType;
 
     Vector< RealType, DeviceType, IndexType > inVector;
     inVector.setSize( 4 );
@@ -811,115 +827,75 @@ TYPED_TEST( SparseMatrixTest, setCompressedRowLengthsTest )
     test_SetCompressedRowLengths< SparseMatrixType >();
 }
 
-//// 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( SparseMatrixTest, CSR_setDimensionsTest_Host )
-//{
-//    test_SetDimensions< CSR_host_int >();
-//}
-//
-//#ifdef HAVE_CUDA
-//TEST( SparseMatrixTest, CSR_setDimensionsTest_Cuda )
-//{
-//    test_SetDimensions< CSR_cuda_int >();
-//}
-//#endif
-
-//TEST( SparseMatrixTest, CSR_setCompressedRowLengthsTest_Host )
-//{
-//    test_SetCompressedRowLengths< CSR_host_int >();
-//}
-//
-//#ifdef HAVE_CUDA
-//TEST( SparseMatrixTest, CSR_setCompressedRowLengthsTest_Cuda )
-//{
-//    test_SetCompressedRowLengths< CSR_cuda_int >();
-//}
-//#endif
-//
-//TEST( SparseMatrixTest, CSR_setLikeTest_Host )
-//{
-//    test_SetLike< CSR_host_int, CSR_host_float >();
-//}
-
-#ifdef HAVE_CUDA
-TEST( SparseMatrixTest, CSR_setLikeTest_Cuda )
+TYPED_TEST( SparseMatrixTest, setLikeTest )
 {
-    test_SetLike< CSR_cuda_int, CSR_cuda_float >();
-}
-#endif
-
-TEST( SparseMatrixTest, CSR_resetTest_Host )
-{
-    test_Reset< CSR_host_int >();
+    using SparseMatrixType = typename TestFixture::SparseMatrixType;
+    
+    test_SetLike< SparseMatrixType, SparseMatrixType >();
 }
 
-#ifdef HAVE_CUDA
-TEST( SparseMatrixTest, CSR_resetTest_Cuda )
+TYPED_TEST( SparseMatrixTest, resetTest )
 {
-    test_Reset< CSR_cuda_int >();
+    using SparseMatrixType = typename TestFixture::SparseMatrixType;
+    
+    test_Reset< SparseMatrixType >();
 }
-#endif
 
-TEST( SparseMatrixTest, CSR_setElementTest_Host )
+TYPED_TEST( SparseMatrixTest, setElementTest )
 {
-    test_SetElement< CSR_host_int >();
+    using SparseMatrixType = typename TestFixture::SparseMatrixType;
+    
+    test_SetElement< SparseMatrixType >();
 }
 
-#ifdef HAVE_CUDA
-TEST( SparseMatrixTest, CSR_setElementTest_Cuda )
+TYPED_TEST( SparseMatrixTest, addElementTest )
 {
-    test_SetElement< CSR_cuda_int >();
+    using SparseMatrixType = typename TestFixture::SparseMatrixType;
+    
+    test_AddElement< SparseMatrixType >();
 }
-#endif
 
-TEST( SparseMatrixTest, CSR_addElementTest_Host )
+TYPED_TEST( SparseMatrixTest, setRowTest )
 {
-    test_AddElement< CSR_host_int >();
+    using SparseMatrixType = typename TestFixture::SparseMatrixType;
+    
+    test_SetRow< SparseMatrixType >();
 }
 
-#ifdef HAVE_CUDA
-TEST( SparseMatrixTest, CSR_addElementTest_Cuda )
+TYPED_TEST( SparseMatrixTest, vectorProductTest )
 {
-    test_AddElement< CSR_cuda_int >();
+    using SparseMatrixType = typename TestFixture::SparseMatrixType;
+    
+    test_VectorProduct< SparseMatrixType >();
 }
-#endif
 
-TEST( SparseMatrixTest, CSR_setRowTest_Host )
+TYPED_TEST( SparseMatrixTest, saveAndLoadTest )
 {
-    test_SetRow< CSR_host_int >();
+    using SparseMatrixType = typename TestFixture::SparseMatrixType;
+    
+    test_SaveAndLoad< SparseMatrixType >();
 }
 
-#ifdef HAVE_CUDA
-TEST( SparseMatrixTest, CSR_setRowTest_Cuda )
+TYPED_TEST( SparseMatrixTest, printTest )
 {
-    test_SetRow< CSR_cuda_int >();
+    using SparseMatrixType = typename TestFixture::SparseMatrixType;
+    
+    test_Print< SparseMatrixType >();
 }
-#endif
 
-TEST( SparseMatrixTest, CSR_vectorProductTest_Host )
-{
-    test_VectorProduct< CSR_host_int >();
-}
+//// test_getType is not general enough yet. DO NOT TEST IT YET.
 
-#ifdef HAVE_CUDA
-TEST( SparseMatrixTest, CSR_vectorProductTest_Cuda )
-{
-    test_VectorProduct< CSR_cuda_int >();
-}
-#endif
+//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( SparseMatrixTest, CSR_perforSORIterationTest_Host )
 {
@@ -938,30 +914,6 @@ TEST( SparseMatrixTest, CSR_perforSORIterationTest_Cuda )
 }
 #endif
 
-TEST( SparseMatrixTest, CSR_saveAndLoadTest_Host )
-{
-    test_SaveAndLoad< CSR_host_int >();
-}
-
-#ifdef HAVE_CUDA
-TEST( SparseMatrixTest, CSR_saveAndLoadTest_Cuda )
-{
-    test_SaveAndLoad< CSR_cuda_int >();
-}
-#endif
-
-TEST( SparseMatrixTest, CSR_printTest_Host )
-{
-    test_Print< CSR_host_int >();
-}
-
-#ifdef HAVE_CUDA
-TEST( SparseMatrixTest, CSR_printTest_Cuda )
-{
-    test_Print< CSR_cuda_int >();
-}
-#endif
-
 #endif
 
 #include "../GtestMissingError.h"