diff --git a/src/UnitTests/Matrices/DenseMatrixTest.h b/src/UnitTests/Matrices/DenseMatrixTest.h index 686602ebd10a33d7f73185cabbd274fe09ec1669..8c3132caf8f348f310154bbd5d0ff1305f139c7e 100644 --- a/src/UnitTests/Matrices/DenseMatrixTest.h +++ b/src/UnitTests/Matrices/DenseMatrixTest.h @@ -26,7 +26,7 @@ using Dense_cuda_int = TNL::Matrices::Dense< int, TNL::Devices::Cuda, int >; static const char* TEST_FILE_NAME = "test_DenseMatrixTest.tnl"; -#ifdef HAVE_GTEST +#ifdef HAVE_GTEST #include <type_traits> #include <gtest/gtest.h> @@ -36,7 +36,7 @@ void host_test_GetType() { MatrixHostFloat mtrxHostFloat; MatrixHostInt mtrxHostInt; - + EXPECT_EQ( mtrxHostFloat.getType(), TNL::String( "Matrices::Dense< float, Devices::Host, int >" ) ); EXPECT_EQ( mtrxHostInt.getType(), TNL::String( "Matrices::Dense< int, Devices::Host, int >" ) ); } @@ -57,13 +57,13 @@ void test_SetDimensions() using RealType = typename Matrix::RealType; using DeviceType = typename Matrix::DeviceType; using IndexType = typename Matrix::IndexType; - + const IndexType rows = 9; const IndexType cols = 8; - + Matrix m; m.setDimensions( rows, cols ); - + EXPECT_EQ( m.getRows(), 9 ); EXPECT_EQ( m.getColumns(), 8 ); } @@ -74,20 +74,20 @@ void test_SetLike() using RealType = typename Matrix1::RealType; using DeviceType = typename Matrix1::DeviceType; using IndexType = typename Matrix1::IndexType; - + const IndexType rows = 8; const IndexType cols = 7; - + Matrix1 m1; m1.reset(); m1.setDimensions( rows + 1, cols + 2 ); - + Matrix2 m2; m2.reset(); m2.setDimensions( rows, cols ); - + m1.setLike( m2 ); - + EXPECT_EQ( m1.getRows(), m2.getRows() ); EXPECT_EQ( m1.getColumns(), m2.getColumns() ); } @@ -150,14 +150,14 @@ void test_GetRowLength() using RealType = typename Matrix::RealType; using DeviceType = typename Matrix::DeviceType; using IndexType = typename Matrix::IndexType; - + const IndexType rows = 8; const IndexType cols = 7; - + Matrix m; m.reset(); m.setDimensions( rows, cols ); - + EXPECT_EQ( m.getRowLength( 0 ), 7 ); EXPECT_EQ( m.getRowLength( 1 ), 7 ); EXPECT_EQ( m.getRowLength( 2 ), 7 ); @@ -174,14 +174,14 @@ void test_GetNumberOfMatrixElements() using RealType = typename Matrix::RealType; using DeviceType = typename Matrix::DeviceType; using IndexType = typename Matrix::IndexType; - + const IndexType rows = 7; const IndexType cols = 6; - + Matrix m; m.reset(); m.setDimensions( rows, cols ); - + EXPECT_EQ( m.getNumberOfMatrixElements(), 42 ); } @@ -191,7 +191,7 @@ void test_GetNumberOfNonzeroMatrixElements() using RealType = typename Matrix::RealType; using DeviceType = typename Matrix::DeviceType; using IndexType = typename Matrix::IndexType; - + /* * Sets up the following 7x6 dense matrix: * @@ -205,19 +205,19 @@ void test_GetNumberOfNonzeroMatrixElements() */ const IndexType rows = 7; const IndexType cols = 6; - + Matrix m; m.reset(); m.setDimensions( rows, cols ); - + RealType value = 1; for( IndexType i = 0; i < rows; i++ ) for( IndexType j = 0; j < cols; j++ ) m.setElement( i, j, value++ ); - + m.setElement( 0, 0, 0); // Set the first element of the diagonal to 0. m.setElement( 6, 5, 0); // Set the last element of the diagonal to 0. - + EXPECT_EQ( m.getNumberOfNonzeroMatrixElements(), 40 ); } @@ -227,7 +227,7 @@ void test_Reset() using RealType = typename Matrix::RealType; using DeviceType = typename Matrix::DeviceType; using IndexType = typename Matrix::IndexType; - + /* * Sets up the following 5x4 dense matrix: * @@ -239,12 +239,12 @@ void test_Reset() */ const IndexType rows = 5; const IndexType cols = 4; - + Matrix m; m.setDimensions( rows, cols ); - + m.reset(); - + EXPECT_EQ( m.getRows(), 0 ); EXPECT_EQ( m.getColumns(), 0 ); } @@ -254,7 +254,7 @@ void test_SetValue() { using RealType = typename Matrix::RealType; using DeviceType = typename Matrix::DeviceType; - using IndexType = typename Matrix::IndexType; + using IndexType = typename Matrix::IndexType; /* * Sets up the following 7x6 dense matrix: * @@ -268,110 +268,110 @@ void test_SetValue() */ const IndexType rows = 7; const IndexType cols = 6; - + Matrix m; m.reset(); m.setDimensions( rows, cols ); - + RealType value = 1; for( IndexType i = 0; i < rows; i++ ) for( IndexType j = 0; j < cols; j++ ) m.setElement( i, j, value++ ); - + EXPECT_EQ( m.getElement( 0, 0 ), 1 ); EXPECT_EQ( m.getElement( 0, 1 ), 2 ); EXPECT_EQ( m.getElement( 0, 2 ), 3 ); EXPECT_EQ( m.getElement( 0, 3 ), 4 ); EXPECT_EQ( m.getElement( 0, 4 ), 5 ); EXPECT_EQ( m.getElement( 0, 5 ), 6 ); - + EXPECT_EQ( m.getElement( 1, 0 ), 7 ); EXPECT_EQ( m.getElement( 1, 1 ), 8 ); EXPECT_EQ( m.getElement( 1, 2 ), 9 ); EXPECT_EQ( m.getElement( 1, 3 ), 10 ); EXPECT_EQ( m.getElement( 1, 4 ), 11 ); EXPECT_EQ( m.getElement( 1, 5 ), 12 ); - + EXPECT_EQ( m.getElement( 2, 0 ), 13 ); EXPECT_EQ( m.getElement( 2, 1 ), 14 ); EXPECT_EQ( m.getElement( 2, 2 ), 15 ); EXPECT_EQ( m.getElement( 2, 3 ), 16 ); EXPECT_EQ( m.getElement( 2, 4 ), 17 ); EXPECT_EQ( m.getElement( 2, 5 ), 18 ); - + EXPECT_EQ( m.getElement( 3, 0 ), 19 ); EXPECT_EQ( m.getElement( 3, 1 ), 20 ); EXPECT_EQ( m.getElement( 3, 2 ), 21 ); EXPECT_EQ( m.getElement( 3, 3 ), 22 ); EXPECT_EQ( m.getElement( 3, 4 ), 23 ); EXPECT_EQ( m.getElement( 3, 5 ), 24 ); - + EXPECT_EQ( m.getElement( 4, 0 ), 25 ); EXPECT_EQ( m.getElement( 4, 1 ), 26 ); EXPECT_EQ( m.getElement( 4, 2 ), 27 ); EXPECT_EQ( m.getElement( 4, 3 ), 28 ); EXPECT_EQ( m.getElement( 4, 4 ), 29 ); EXPECT_EQ( m.getElement( 4, 5 ), 30 ); - + EXPECT_EQ( m.getElement( 5, 0 ), 31 ); EXPECT_EQ( m.getElement( 5, 1 ), 32 ); EXPECT_EQ( m.getElement( 5, 2 ), 33 ); EXPECT_EQ( m.getElement( 5, 3 ), 34 ); EXPECT_EQ( m.getElement( 5, 4 ), 35 ); EXPECT_EQ( m.getElement( 5, 5 ), 36 ); - + EXPECT_EQ( m.getElement( 6, 0 ), 37 ); EXPECT_EQ( m.getElement( 6, 1 ), 38 ); EXPECT_EQ( m.getElement( 6, 2 ), 39 ); EXPECT_EQ( m.getElement( 6, 3 ), 40 ); EXPECT_EQ( m.getElement( 6, 4 ), 41 ); EXPECT_EQ( m.getElement( 6, 5 ), 42 ); - + // Set the values of all elements to a certain number m.setValue( 42 ); - + EXPECT_EQ( m.getElement( 0, 0 ), 42 ); EXPECT_EQ( m.getElement( 0, 1 ), 42 ); EXPECT_EQ( m.getElement( 0, 2 ), 42 ); EXPECT_EQ( m.getElement( 0, 3 ), 42 ); EXPECT_EQ( m.getElement( 0, 4 ), 42 ); EXPECT_EQ( m.getElement( 0, 5 ), 42 ); - + EXPECT_EQ( m.getElement( 1, 0 ), 42 ); EXPECT_EQ( m.getElement( 1, 1 ), 42 ); EXPECT_EQ( m.getElement( 1, 2 ), 42 ); EXPECT_EQ( m.getElement( 1, 3 ), 42 ); EXPECT_EQ( m.getElement( 1, 4 ), 42 ); EXPECT_EQ( m.getElement( 1, 5 ), 42 ); - + EXPECT_EQ( m.getElement( 2, 0 ), 42 ); EXPECT_EQ( m.getElement( 2, 1 ), 42 ); EXPECT_EQ( m.getElement( 2, 2 ), 42 ); EXPECT_EQ( m.getElement( 2, 3 ), 42 ); EXPECT_EQ( m.getElement( 2, 4 ), 42 ); EXPECT_EQ( m.getElement( 2, 5 ), 42 ); - + EXPECT_EQ( m.getElement( 3, 0 ), 42 ); EXPECT_EQ( m.getElement( 3, 1 ), 42 ); EXPECT_EQ( m.getElement( 3, 2 ), 42 ); EXPECT_EQ( m.getElement( 3, 3 ), 42 ); EXPECT_EQ( m.getElement( 3, 4 ), 42 ); EXPECT_EQ( m.getElement( 3, 5 ), 42 ); - + EXPECT_EQ( m.getElement( 4, 0 ), 42 ); EXPECT_EQ( m.getElement( 4, 1 ), 42 ); EXPECT_EQ( m.getElement( 4, 2 ), 42 ); EXPECT_EQ( m.getElement( 4, 3 ), 42 ); EXPECT_EQ( m.getElement( 4, 4 ), 42 ); EXPECT_EQ( m.getElement( 4, 5 ), 42 ); - + EXPECT_EQ( m.getElement( 5, 0 ), 42 ); EXPECT_EQ( m.getElement( 5, 1 ), 42 ); EXPECT_EQ( m.getElement( 5, 2 ), 42 ); EXPECT_EQ( m.getElement( 5, 3 ), 42 ); EXPECT_EQ( m.getElement( 5, 4 ), 42 ); EXPECT_EQ( m.getElement( 5, 5 ), 42 ); - + EXPECT_EQ( m.getElement( 6, 0 ), 42 ); EXPECT_EQ( m.getElement( 6, 1 ), 42 ); EXPECT_EQ( m.getElement( 6, 2 ), 42 ); @@ -397,40 +397,40 @@ void test_SetElement() */ const IndexType rows = 5; const IndexType cols = 5; - + Matrix m; m.reset(); - m.setDimensions( rows, cols ); - + m.setDimensions( rows, cols ); + RealType value = 1; for( IndexType i = 0; i < rows; i++ ) for( IndexType j = 0; j < cols; j++ ) m.setElement( i, j, value++ ); - + EXPECT_EQ( m.getElement( 0, 0 ), 1 ); EXPECT_EQ( m.getElement( 0, 1 ), 2 ); EXPECT_EQ( m.getElement( 0, 2 ), 3 ); EXPECT_EQ( m.getElement( 0, 3 ), 4 ); EXPECT_EQ( m.getElement( 0, 4 ), 5 ); - + EXPECT_EQ( m.getElement( 1, 0 ), 6 ); EXPECT_EQ( m.getElement( 1, 1 ), 7 ); EXPECT_EQ( m.getElement( 1, 2 ), 8 ); EXPECT_EQ( m.getElement( 1, 3 ), 9 ); EXPECT_EQ( m.getElement( 1, 4 ), 10 ); - + EXPECT_EQ( m.getElement( 2, 0 ), 11 ); EXPECT_EQ( m.getElement( 2, 1 ), 12 ); EXPECT_EQ( m.getElement( 2, 2 ), 13 ); EXPECT_EQ( m.getElement( 2, 3 ), 14 ); EXPECT_EQ( m.getElement( 2, 4 ), 15 ); - + EXPECT_EQ( m.getElement( 3, 0 ), 16 ); EXPECT_EQ( m.getElement( 3, 1 ), 17 ); EXPECT_EQ( m.getElement( 3, 2 ), 18 ); EXPECT_EQ( m.getElement( 3, 3 ), 19 ); EXPECT_EQ( m.getElement( 3, 4 ), 20 ); - + EXPECT_EQ( m.getElement( 4, 0 ), 21 ); EXPECT_EQ( m.getElement( 4, 1 ), 22 ); EXPECT_EQ( m.getElement( 4, 2 ), 23 ); @@ -456,53 +456,53 @@ void test_AddElement() */ const IndexType rows = 6; const IndexType cols = 5; - + Matrix m; m.reset(); m.setDimensions( rows, cols ); - + RealType value = 1; for( IndexType i = 0; i < rows; i++ ) for( IndexType j = 0; j < cols; j++ ) m.setElement( i, j, value++ ); - + // Check the added elements EXPECT_EQ( m.getElement( 0, 0 ), 1 ); EXPECT_EQ( m.getElement( 0, 1 ), 2 ); EXPECT_EQ( m.getElement( 0, 2 ), 3 ); EXPECT_EQ( m.getElement( 0, 3 ), 4 ); EXPECT_EQ( m.getElement( 0, 4 ), 5 ); - + EXPECT_EQ( m.getElement( 1, 0 ), 6 ); EXPECT_EQ( m.getElement( 1, 1 ), 7 ); EXPECT_EQ( m.getElement( 1, 2 ), 8 ); EXPECT_EQ( m.getElement( 1, 3 ), 9 ); EXPECT_EQ( m.getElement( 1, 4 ), 10 ); - + EXPECT_EQ( m.getElement( 2, 0 ), 11 ); EXPECT_EQ( m.getElement( 2, 1 ), 12 ); EXPECT_EQ( m.getElement( 2, 2 ), 13 ); EXPECT_EQ( m.getElement( 2, 3 ), 14 ); EXPECT_EQ( m.getElement( 2, 4 ), 15 ); - + EXPECT_EQ( m.getElement( 3, 0 ), 16 ); EXPECT_EQ( m.getElement( 3, 1 ), 17 ); EXPECT_EQ( m.getElement( 3, 2 ), 18 ); EXPECT_EQ( m.getElement( 3, 3 ), 19 ); EXPECT_EQ( m.getElement( 3, 4 ), 20 ); - + EXPECT_EQ( m.getElement( 4, 0 ), 21 ); EXPECT_EQ( m.getElement( 4, 1 ), 22 ); EXPECT_EQ( m.getElement( 4, 2 ), 23 ); EXPECT_EQ( m.getElement( 4, 3 ), 24 ); EXPECT_EQ( m.getElement( 4, 4 ), 25 ); - + EXPECT_EQ( m.getElement( 5, 0 ), 26 ); EXPECT_EQ( m.getElement( 5, 1 ), 27 ); EXPECT_EQ( m.getElement( 5, 2 ), 28 ); EXPECT_EQ( m.getElement( 5, 3 ), 29 ); EXPECT_EQ( m.getElement( 5, 4 ), 30 ); - + // Add new elements to the old elements with a multiplying factor applied to the old elements. /* * The following setup results in the following 6x5 dense matrix: @@ -518,38 +518,38 @@ void test_AddElement() RealType multiplicator = 2; for( IndexType i = 0; i < rows; i++ ) for( IndexType j = 0; j < cols; j++ ) - m.addElement( i, j, newValue++, multiplicator ); - + m.addElement( i, j, newValue++, multiplicator ); + EXPECT_EQ( m.getElement( 0, 0 ), 3 ); EXPECT_EQ( m.getElement( 0, 1 ), 6 ); EXPECT_EQ( m.getElement( 0, 2 ), 9 ); EXPECT_EQ( m.getElement( 0, 3 ), 12 ); EXPECT_EQ( m.getElement( 0, 4 ), 15 ); - + EXPECT_EQ( m.getElement( 1, 0 ), 18 ); EXPECT_EQ( m.getElement( 1, 1 ), 21 ); EXPECT_EQ( m.getElement( 1, 2 ), 24 ); EXPECT_EQ( m.getElement( 1, 3 ), 27 ); EXPECT_EQ( m.getElement( 1, 4 ), 30 ); - + EXPECT_EQ( m.getElement( 2, 0 ), 33 ); EXPECT_EQ( m.getElement( 2, 1 ), 36 ); EXPECT_EQ( m.getElement( 2, 2 ), 39 ); EXPECT_EQ( m.getElement( 2, 3 ), 42 ); EXPECT_EQ( m.getElement( 2, 4 ), 45 ); - + EXPECT_EQ( m.getElement( 3, 0 ), 48 ); EXPECT_EQ( m.getElement( 3, 1 ), 51 ); EXPECT_EQ( m.getElement( 3, 2 ), 54 ); EXPECT_EQ( m.getElement( 3, 3 ), 57 ); EXPECT_EQ( m.getElement( 3, 4 ), 60 ); - + EXPECT_EQ( m.getElement( 4, 0 ), 63 ); EXPECT_EQ( m.getElement( 4, 1 ), 66 ); EXPECT_EQ( m.getElement( 4, 2 ), 69 ); EXPECT_EQ( m.getElement( 4, 3 ), 72 ); EXPECT_EQ( m.getElement( 4, 4 ), 75 ); - + EXPECT_EQ( m.getElement( 5, 0 ), 78 ); EXPECT_EQ( m.getElement( 5, 1 ), 81 ); EXPECT_EQ( m.getElement( 5, 2 ), 84 ); @@ -718,37 +718,37 @@ void test_AddRow() }; TNL::Algorithms::ParallelFor< DeviceType >::exec( 0, 6, f ); - + EXPECT_EQ( m.getElement( 0, 0 ), 11 ); EXPECT_EQ( m.getElement( 0, 1 ), 11 ); EXPECT_EQ( m.getElement( 0, 2 ), 11 ); EXPECT_EQ( m.getElement( 0, 3 ), 11 ); EXPECT_EQ( m.getElement( 0, 4 ), 0 ); - + EXPECT_EQ( m.getElement( 1, 0 ), 28 ); EXPECT_EQ( m.getElement( 1, 1 ), 29 ); EXPECT_EQ( m.getElement( 1, 2 ), 30 ); EXPECT_EQ( m.getElement( 1, 3 ), 31 ); EXPECT_EQ( m.getElement( 1, 4 ), 10 ); - + EXPECT_EQ( m.getElement( 2, 0 ), 55 ); EXPECT_EQ( m.getElement( 2, 1 ), 57 ); EXPECT_EQ( m.getElement( 2, 2 ), 59 ); EXPECT_EQ( m.getElement( 2, 3 ), 61 ); EXPECT_EQ( m.getElement( 2, 4 ), 30 ); - + EXPECT_EQ( m.getElement( 3, 0 ), 92 ); EXPECT_EQ( m.getElement( 3, 1 ), 95 ); EXPECT_EQ( m.getElement( 3, 2 ), 98 ); EXPECT_EQ( m.getElement( 3, 3 ), 101 ); EXPECT_EQ( m.getElement( 3, 4 ), 60 ); - + EXPECT_EQ( m.getElement( 4, 0 ), 139 ); EXPECT_EQ( m.getElement( 4, 1 ), 143 ); EXPECT_EQ( m.getElement( 4, 2 ), 147 ); EXPECT_EQ( m.getElement( 4, 3 ), 151 ); EXPECT_EQ( m.getElement( 4, 4 ), 100 ); - + EXPECT_EQ( m.getElement( 5, 0 ), 196 ); EXPECT_EQ( m.getElement( 5, 1 ), 201 ); EXPECT_EQ( m.getElement( 5, 2 ), 206 ); @@ -773,31 +773,31 @@ void test_VectorProduct() */ const IndexType rows = 5; const IndexType cols = 4; - + Matrix m; m.reset(); m.setDimensions( rows, cols ); - + RealType value = 1; for( IndexType i = 0; i < rows; i++ ) for( IndexType j = 0; j < cols; j++) m.setElement( i, j, value++ ); using VectorType = TNL::Containers::Vector< RealType, DeviceType, IndexType >; - + VectorType inVector; inVector.setSize( 4 ); - for( IndexType i = 0; i < inVector.getSize(); i++ ) + for( IndexType i = 0; i < inVector.getSize(); i++ ) inVector.setElement( i, 2 ); - VectorType outVector; + VectorType outVector; outVector.setSize( 5 ); for( IndexType j = 0; j < outVector.getSize(); j++ ) outVector.setElement( j, 0 ); - - + + m.vectorProduct( inVector, outVector); - + EXPECT_EQ( outVector.getElement( 0 ), 20 ); EXPECT_EQ( outVector.getElement( 1 ), 52 ); EXPECT_EQ( outVector.getElement( 2 ), 84 ); @@ -822,16 +822,16 @@ void test_AddMatrix() */ const IndexType rows = 5; const IndexType cols = 4; - + Matrix m; m.reset(); m.setDimensions( rows, cols ); - + RealType value = 1; for( IndexType i = 0; i < rows; i++ ) for( IndexType j = 0; j < cols; j++) m.setElement( i, j, value++ ); - + /* * Sets up the following 5x4 dense matrix: * @@ -841,16 +841,16 @@ void test_AddMatrix() * | 13 14 15 16 | * \ 17 18 19 20 / */ - + Matrix m2; m2.reset(); m2.setDimensions( rows, cols ); - + RealType newValue = 1; for( IndexType i = 0; i < rows; i++ ) for( IndexType j = 0; j < cols; j++) m2.setElement( i, j, newValue++ ); - + /* * Sets up the following 5x4 dense matrix: * @@ -860,63 +860,63 @@ void test_AddMatrix() * | 13 14 15 16 | * \ 17 18 19 20 / */ - + Matrix mResult; mResult.reset(); mResult.setDimensions( rows, cols ); - + mResult = m; - + RealType matrixMultiplicator = 2; RealType thisMatrixMultiplicator = 1; - + mResult.addMatrix( m2, matrixMultiplicator, thisMatrixMultiplicator ); - + EXPECT_EQ( mResult.getElement( 0, 0 ), matrixMultiplicator * m2.getElement( 0, 0 ) + thisMatrixMultiplicator * m.getElement( 0, 0 ) ); EXPECT_EQ( mResult.getElement( 0, 1 ), matrixMultiplicator * m2.getElement( 0, 1 ) + thisMatrixMultiplicator * m.getElement( 0, 1 ) ); EXPECT_EQ( mResult.getElement( 0, 2 ), matrixMultiplicator * m2.getElement( 0, 2 ) + thisMatrixMultiplicator * m.getElement( 0, 2 ) ); EXPECT_EQ( mResult.getElement( 0, 3 ), matrixMultiplicator * m2.getElement( 0, 3 ) + thisMatrixMultiplicator * m.getElement( 0, 3 ) ); - + EXPECT_EQ( mResult.getElement( 1, 0 ), matrixMultiplicator * m2.getElement( 1, 0 ) + thisMatrixMultiplicator * m.getElement( 1, 0 ) ); EXPECT_EQ( mResult.getElement( 1, 1 ), matrixMultiplicator * m2.getElement( 1, 1 ) + thisMatrixMultiplicator * m.getElement( 1, 1 ) ); EXPECT_EQ( mResult.getElement( 1, 2 ), matrixMultiplicator * m2.getElement( 1, 2 ) + thisMatrixMultiplicator * m.getElement( 1, 2 ) ); EXPECT_EQ( mResult.getElement( 1, 3 ), matrixMultiplicator * m2.getElement( 1, 3 ) + thisMatrixMultiplicator * m.getElement( 1, 3 ) ); - + EXPECT_EQ( mResult.getElement( 2, 0 ), matrixMultiplicator * m2.getElement( 2, 0 ) + thisMatrixMultiplicator * m.getElement( 2, 0 ) ); EXPECT_EQ( mResult.getElement( 2, 1 ), matrixMultiplicator * m2.getElement( 2, 1 ) + thisMatrixMultiplicator * m.getElement( 2, 1 ) ); EXPECT_EQ( mResult.getElement( 2, 2 ), matrixMultiplicator * m2.getElement( 2, 2 ) + thisMatrixMultiplicator * m.getElement( 2, 2 ) ); EXPECT_EQ( mResult.getElement( 2, 3 ), matrixMultiplicator * m2.getElement( 2, 3 ) + thisMatrixMultiplicator * m.getElement( 2, 3 ) ); - + EXPECT_EQ( mResult.getElement( 3, 0 ), matrixMultiplicator * m2.getElement( 3, 0 ) + thisMatrixMultiplicator * m.getElement( 3, 0 ) ); EXPECT_EQ( mResult.getElement( 3, 1 ), matrixMultiplicator * m2.getElement( 3, 1 ) + thisMatrixMultiplicator * m.getElement( 3, 1 ) ); EXPECT_EQ( mResult.getElement( 3, 2 ), matrixMultiplicator * m2.getElement( 3, 2 ) + thisMatrixMultiplicator * m.getElement( 3, 2 ) ); EXPECT_EQ( mResult.getElement( 3, 3 ), matrixMultiplicator * m2.getElement( 3, 3 ) + thisMatrixMultiplicator * m.getElement( 3, 3 ) ); - + EXPECT_EQ( mResult.getElement( 4, 0 ), matrixMultiplicator * m2.getElement( 4, 0 ) + thisMatrixMultiplicator * m.getElement( 4, 0 ) ); EXPECT_EQ( mResult.getElement( 4, 1 ), matrixMultiplicator * m2.getElement( 4, 1 ) + thisMatrixMultiplicator * m.getElement( 4, 1 ) ); EXPECT_EQ( mResult.getElement( 4, 2 ), matrixMultiplicator * m2.getElement( 4, 2 ) + thisMatrixMultiplicator * m.getElement( 4, 2 ) ); EXPECT_EQ( mResult.getElement( 4, 3 ), matrixMultiplicator * m2.getElement( 4, 3 ) + thisMatrixMultiplicator * m.getElement( 4, 3 ) ); - + EXPECT_EQ( mResult.getElement( 0, 0 ), 3 ); EXPECT_EQ( mResult.getElement( 0, 1 ), 6 ); EXPECT_EQ( mResult.getElement( 0, 2 ), 9 ); EXPECT_EQ( mResult.getElement( 0, 3 ), 12 ); - + EXPECT_EQ( mResult.getElement( 1, 0 ), 15 ); EXPECT_EQ( mResult.getElement( 1, 1 ), 18 ); EXPECT_EQ( mResult.getElement( 1, 2 ), 21 ); EXPECT_EQ( mResult.getElement( 1, 3 ), 24 ); - + EXPECT_EQ( mResult.getElement( 2, 0 ), 27 ); EXPECT_EQ( mResult.getElement( 2, 1 ), 30 ); EXPECT_EQ( mResult.getElement( 2, 2 ), 33 ); EXPECT_EQ( mResult.getElement( 2, 3 ), 36 ); - + EXPECT_EQ( mResult.getElement( 3, 0 ), 39 ); EXPECT_EQ( mResult.getElement( 3, 1 ), 42 ); EXPECT_EQ( mResult.getElement( 3, 2 ), 45 ); EXPECT_EQ( mResult.getElement( 3, 3 ), 48 ); - + EXPECT_EQ( mResult.getElement( 4, 0 ), 51 ); EXPECT_EQ( mResult.getElement( 4, 1 ), 54 ); EXPECT_EQ( mResult.getElement( 4, 2 ), 57 ); @@ -940,16 +940,16 @@ void test_GetMatrixProduct() */ const IndexType leftRows = 5; const IndexType leftCols = 4; - + Matrix leftMatrix; leftMatrix.reset(); leftMatrix.setDimensions( leftRows, leftCols ); - + RealType value = 1; for( IndexType i = 0; i < leftRows; i++ ) for( IndexType j = 0; j < leftCols; j++) leftMatrix.setElement( i, j, value++ ); - + /* * Sets up the following 4x5 dense matrix: * @@ -960,16 +960,16 @@ void test_GetMatrixProduct() */ const IndexType rightRows = 4; const IndexType rightCols = 5; - + Matrix rightMatrix; rightMatrix.reset(); rightMatrix.setDimensions( rightRows, rightCols ); - + RealType newValue = 1; for( IndexType i = 0; i < rightRows; i++ ) for( IndexType j = 0; j < rightCols; j++) rightMatrix.setElement( i, j, newValue++ ); - + /* * Sets up the following 5x5 resulting dense matrix: * @@ -979,48 +979,48 @@ void test_GetMatrixProduct() * | 0 0 0 0 | * \ 0 0 0 0 / */ - + Matrix mResult; mResult.reset(); mResult.setDimensions( leftRows, rightCols ); mResult.setValue( 0 ); - + RealType leftMatrixMultiplicator = 1; RealType rightMatrixMultiplicator = 2; -/* +/* * / 1 2 3 4 \ / 220 240 260 280 300 \ * | 5 6 7 8 | / 1 2 3 4 5 \ | 492 544 596 648 700 | * 1 * | 9 10 11 12 | * 2 * | 6 7 8 9 10 | = | 764 848 932 1016 1100 | * | 13 14 15 16 | | 11 12 13 14 15 | | 1036 1152 1268 1384 1500 | * \ 17 18 19 20 / \ 16 17 18 19 20 / \ 1308 1456 1604 1752 1900 / */ - + mResult.getMatrixProduct( leftMatrix, rightMatrix, leftMatrixMultiplicator, rightMatrixMultiplicator ); - + EXPECT_EQ( mResult.getElement( 0, 0 ), 220 ); EXPECT_EQ( mResult.getElement( 0, 1 ), 240 ); EXPECT_EQ( mResult.getElement( 0, 2 ), 260 ); EXPECT_EQ( mResult.getElement( 0, 3 ), 280 ); EXPECT_EQ( mResult.getElement( 0, 4 ), 300 ); - + EXPECT_EQ( mResult.getElement( 1, 0 ), 492 ); EXPECT_EQ( mResult.getElement( 1, 1 ), 544 ); EXPECT_EQ( mResult.getElement( 1, 2 ), 596 ); EXPECT_EQ( mResult.getElement( 1, 3 ), 648 ); EXPECT_EQ( mResult.getElement( 1, 4 ), 700 ); - + EXPECT_EQ( mResult.getElement( 2, 0 ), 764 ); EXPECT_EQ( mResult.getElement( 2, 1 ), 848 ); EXPECT_EQ( mResult.getElement( 2, 2 ), 932 ); EXPECT_EQ( mResult.getElement( 2, 3 ), 1016 ); EXPECT_EQ( mResult.getElement( 2, 4 ), 1100 ); - + EXPECT_EQ( mResult.getElement( 3, 0 ), 1036 ); EXPECT_EQ( mResult.getElement( 3, 1 ), 1152 ); EXPECT_EQ( mResult.getElement( 3, 2 ), 1268 ); EXPECT_EQ( mResult.getElement( 3, 3 ), 1384 ); EXPECT_EQ( mResult.getElement( 3, 4 ), 1500 ); - + EXPECT_EQ( mResult.getElement( 4, 0 ), 1308 ); EXPECT_EQ( mResult.getElement( 4, 1 ), 1456 ); EXPECT_EQ( mResult.getElement( 4, 2 ), 1604 ); @@ -1054,36 +1054,36 @@ void test_GetTransposition() m.setElement( i, j, value++ ); m.print( std::cout ); - + /* * Sets up the following 2x3 dense matrix: * * / 0 0 0 \ * \ 0 0 0 / - */ + */ Matrix mTransposed; mTransposed.reset(); mTransposed.setDimensions( cols, rows ); - + mTransposed.print( std::cout ); - + RealType matrixMultiplicator = 1; - + mTransposed.getTransposition( m, matrixMultiplicator ); - + mTransposed.print( std::cout ); - + /* * Should result in the following 2x3 dense matrix: * * / 1 3 5 \ * \ 2 4 6 / - */ - + */ + EXPECT_EQ( mTransposed.getElement( 0, 0 ), 1 ); EXPECT_EQ( mTransposed.getElement( 0, 1 ), 3 ); EXPECT_EQ( mTransposed.getElement( 0, 2 ), 5 ); - + EXPECT_EQ( mTransposed.getElement( 1, 0 ), 2 ); EXPECT_EQ( mTransposed.getElement( 1, 1 ), 4 ); EXPECT_EQ( mTransposed.getElement( 1, 2 ), 6 ); @@ -1106,60 +1106,60 @@ void test_PerformSORIteration() */ const IndexType rows = 4; const IndexType cols = 4; - + Matrix m; m.reset(); m.setDimensions( rows, cols ); - + m.setElement( 0, 0, 4.0 ); // 0th row m.setElement( 0, 1, 1.0 ); m.setElement( 0, 2, 1.0 ); m.setElement( 0, 3, 1.0 ); - + m.setElement( 1, 0, 1.0 ); // 1st row m.setElement( 1, 1, 4.0 ); m.setElement( 1, 2, 1.0 ); m.setElement( 1, 3, 1.0 ); - + m.setElement( 2, 0, 1.0 ); m.setElement( 2, 1, 1.0 ); // 2nd row m.setElement( 2, 2, 4.0 ); m.setElement( 2, 3, 1.0 ); - + m.setElement( 3, 0, 1.0 ); // 3rd row m.setElement( 3, 1, 1.0 ); m.setElement( 3, 2, 1.0 ); m.setElement( 3, 3, 4.0 ); - + RealType bVector [ 4 ] = { 1.0, 1.0, 1.0, 1.0 }; RealType xVector [ 4 ] = { 1.0, 1.0, 1.0, 1.0 }; - + IndexType row = 0; RealType omega = 1; - + m.performSORIteration( bVector, row++, xVector, omega); - + EXPECT_EQ( xVector[ 0 ], -0.5 ); EXPECT_EQ( xVector[ 1 ], 1.0 ); EXPECT_EQ( xVector[ 2 ], 1.0 ); EXPECT_EQ( xVector[ 3 ], 1.0 ); - + m.performSORIteration( bVector, row++, xVector, omega); - + EXPECT_EQ( xVector[ 0 ], -0.5 ); EXPECT_EQ( xVector[ 1 ], -0.125 ); EXPECT_EQ( xVector[ 2 ], 1.0 ); EXPECT_EQ( xVector[ 3 ], 1.0 ); - + m.performSORIteration( bVector, row++, xVector, omega); - + EXPECT_EQ( xVector[ 0 ], -0.5 ); EXPECT_EQ( xVector[ 1 ], -0.125 ); EXPECT_EQ( xVector[ 2 ], 0.15625 ); EXPECT_EQ( xVector[ 3 ], 1.0 ); - + m.performSORIteration( bVector, row++, xVector, omega); - + EXPECT_EQ( xVector[ 0 ], -0.5 ); EXPECT_EQ( xVector[ 1 ], -0.125 ); EXPECT_EQ( xVector[ 2 ], 0.15625 ); @@ -1230,59 +1230,59 @@ void test_SaveAndLoad() */ const IndexType rows = 4; const IndexType cols = 4; - + Matrix savedMatrix; savedMatrix.reset(); savedMatrix.setDimensions( rows, cols ); - + RealType value = 1; for( IndexType i = 0; i < rows; i++ ) for( IndexType j = 0; j < cols; j++ ) savedMatrix.setElement( i, j, value++ ); - + ASSERT_NO_THROW( savedMatrix.save( TEST_FILE_NAME ) ); - + Matrix loadedMatrix; loadedMatrix.reset(); loadedMatrix.setDimensions( rows, cols ); - + ASSERT_NO_THROW( loadedMatrix.load( TEST_FILE_NAME ) ); - + EXPECT_EQ( savedMatrix.getElement( 0, 0 ), loadedMatrix.getElement( 0, 0 ) ); EXPECT_EQ( savedMatrix.getElement( 0, 1 ), loadedMatrix.getElement( 0, 1 ) ); EXPECT_EQ( savedMatrix.getElement( 0, 2 ), loadedMatrix.getElement( 0, 2 ) ); EXPECT_EQ( savedMatrix.getElement( 0, 3 ), loadedMatrix.getElement( 0, 3 ) ); - + EXPECT_EQ( savedMatrix.getElement( 1, 0 ), loadedMatrix.getElement( 1, 0 ) ); EXPECT_EQ( savedMatrix.getElement( 1, 1 ), loadedMatrix.getElement( 1, 1 ) ); EXPECT_EQ( savedMatrix.getElement( 1, 2 ), loadedMatrix.getElement( 1, 2 ) ); EXPECT_EQ( savedMatrix.getElement( 1, 3 ), loadedMatrix.getElement( 1, 3 ) ); - + EXPECT_EQ( savedMatrix.getElement( 2, 0 ), loadedMatrix.getElement( 2, 0 ) ); EXPECT_EQ( savedMatrix.getElement( 2, 1 ), loadedMatrix.getElement( 2, 1 ) ); EXPECT_EQ( savedMatrix.getElement( 2, 2 ), loadedMatrix.getElement( 2, 2 ) ); EXPECT_EQ( savedMatrix.getElement( 2, 3 ), loadedMatrix.getElement( 2, 3 ) ); - + EXPECT_EQ( savedMatrix.getElement( 3, 0 ), loadedMatrix.getElement( 3, 0 ) ); EXPECT_EQ( savedMatrix.getElement( 3, 1 ), loadedMatrix.getElement( 3, 1 ) ); EXPECT_EQ( savedMatrix.getElement( 3, 2 ), loadedMatrix.getElement( 3, 2 ) ); EXPECT_EQ( savedMatrix.getElement( 3, 3 ), loadedMatrix.getElement( 3, 3 ) ); - + EXPECT_EQ( savedMatrix.getElement( 0, 0 ), 1 ); EXPECT_EQ( savedMatrix.getElement( 0, 1 ), 2 ); EXPECT_EQ( savedMatrix.getElement( 0, 2 ), 3 ); EXPECT_EQ( savedMatrix.getElement( 0, 3 ), 4 ); - + EXPECT_EQ( savedMatrix.getElement( 1, 0 ), 5 ); EXPECT_EQ( savedMatrix.getElement( 1, 1 ), 6 ); EXPECT_EQ( savedMatrix.getElement( 1, 2 ), 7 ); EXPECT_EQ( savedMatrix.getElement( 1, 3 ), 8 ); - + EXPECT_EQ( savedMatrix.getElement( 2, 0 ), 9 ); EXPECT_EQ( savedMatrix.getElement( 2, 1 ), 10 ); EXPECT_EQ( savedMatrix.getElement( 2, 2 ), 11 ); EXPECT_EQ( savedMatrix.getElement( 2, 3 ), 12 ); - + EXPECT_EQ( savedMatrix.getElement( 3, 0 ), 13 ); EXPECT_EQ( savedMatrix.getElement( 3, 1 ), 14 ); EXPECT_EQ( savedMatrix.getElement( 3, 2 ), 15 ); @@ -1306,33 +1306,33 @@ void test_Print() */ const IndexType rows = 5; const IndexType cols = 4; - + Matrix m; m.reset(); m.setDimensions( rows, cols ); - + RealType value = 1; for( IndexType i = 0; i < rows; i++) for( IndexType j = 0; j < cols; j++) m.setElement( i, j, value++ ); - + #include <sstream> std::stringstream printed; std::stringstream couted; - + //change the underlying buffer and save the old buffer - auto old_buf = std::cout.rdbuf(printed.rdbuf()); + auto old_buf = std::cout.rdbuf(printed.rdbuf()); m.print( std::cout ); //all the std::cout goes to ss std::cout.rdbuf(old_buf); //reset - + couted << "Row: 0 -> Col:0->1 Col:1->2 Col:2->3 Col:3->4\t\n" "Row: 1 -> Col:0->5 Col:1->6 Col:2->7 Col:3->8\t\n" "Row: 2 -> Col:0->9 Col:1->10 Col:2->11 Col:3->12\t\n" "Row: 3 -> Col:0->13 Col:1->14 Col:2->15 Col:3->16\t\n" "Row: 4 -> Col:0->17 Col:1->18 Col:2->19 Col:3->20\t\n"; - + EXPECT_EQ( printed.str(), couted.str() ); } @@ -1380,91 +1380,91 @@ TYPED_TEST_SUITE( MatrixTest, MatrixTypes ); TYPED_TEST( MatrixTest, setDimensionsTest ) { using MatrixType = typename TestFixture::MatrixType; - + test_SetDimensions< MatrixType >(); } TYPED_TEST( MatrixTest, setLikeTest ) { using MatrixType = typename TestFixture::MatrixType; - + test_SetLike< MatrixType, MatrixType >(); } TYPED_TEST( MatrixTest, getRowLengthTest ) { using MatrixType = typename TestFixture::MatrixType; - + test_GetRowLength< MatrixType >(); } TYPED_TEST( MatrixTest, getNumberOfMatrixElementsTest ) { using MatrixType = typename TestFixture::MatrixType; - + test_GetNumberOfMatrixElements< MatrixType >(); } TYPED_TEST( MatrixTest, getNumberOfNonzeroMatrixElementsTest ) { using MatrixType = typename TestFixture::MatrixType; - + test_GetNumberOfNonzeroMatrixElements< MatrixType >(); } TYPED_TEST( MatrixTest, resetTest ) { using MatrixType = typename TestFixture::MatrixType; - + test_Reset< MatrixType >(); } TYPED_TEST( MatrixTest, setValueTest ) { using MatrixType = typename TestFixture::MatrixType; - + test_SetValue< MatrixType >(); } TYPED_TEST( MatrixTest, setElementTest ) { using MatrixType = typename TestFixture::MatrixType; - + test_SetElement< MatrixType >(); } TYPED_TEST( MatrixTest, addElementTest ) { using MatrixType = typename TestFixture::MatrixType; - + test_AddElement< MatrixType >(); } TYPED_TEST( MatrixTest, setRowTest ) { using MatrixType = typename TestFixture::MatrixType; - + test_SetRow< MatrixType >(); } TYPED_TEST( MatrixTest, addRowTest ) { using MatrixType = typename TestFixture::MatrixType; - + test_AddRow< MatrixType >(); } TYPED_TEST( MatrixTest, vectorProductTest ) { using MatrixType = typename TestFixture::MatrixType; - + test_VectorProduct< MatrixType >(); } TYPED_TEST( MatrixTest, addMatrixTest ) { using MatrixType = typename TestFixture::MatrixType; - + test_AddMatrix< MatrixType >(); } @@ -1478,14 +1478,14 @@ TYPED_TEST( MatrixTest, assignmentOperatorTest ) TYPED_TEST( MatrixTest, saveAndLoadTest ) { using MatrixType = typename TestFixture::MatrixType; - + test_SaveAndLoad< MatrixType >(); } TYPED_TEST( MatrixTest, printTest ) { using MatrixType = typename TestFixture::MatrixType; - + test_Print< MatrixType >(); } @@ -1503,7 +1503,7 @@ TYPED_TEST( MatrixTest, printTest ) //} //#endif -TEST( DenseMatrixTest, Dense_getMatrixProductTest_Host ) +/*TEST( DenseMatrixTest, Dense_getMatrixProductTest_Host ) { bool testRan = false; EXPECT_TRUE( testRan ); @@ -1607,6 +1607,7 @@ TEST( DenseMatrixTest, Dense_performSORIterationTest_Cuda ) std::cout << "\n THIS IS NOT IMPLEMENTED FOR CUDA YET!!\n\n"; } #endif + * */ #endif // HAVE_GTEST