From 58bdc2bb0f9c07a95f1bef017df37484a97937d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Klinkovsk=C3=BD?= <klinkjak@fjfi.cvut.cz> Date: Fri, 21 Oct 2016 23:13:29 +0200 Subject: [PATCH] Added assertions to MeshTest --- src/UnitTests/Meshes/MeshTest.h | 204 +++++++++++++++++++++++++++++++- 1 file changed, 198 insertions(+), 6 deletions(-) diff --git a/src/UnitTests/Meshes/MeshTest.h b/src/UnitTests/Meshes/MeshTest.h index 47787a3bba..46ef09b56c 100644 --- a/src/UnitTests/Meshes/MeshTest.h +++ b/src/UnitTests/Meshes/MeshTest.h @@ -395,6 +395,53 @@ TEST( MeshTest, RegularMeshOfTrianglesTest ) } ASSERT_TRUE( meshBuilder.build( mesh ) ); + + // Test cells -> vertices subentities + cellIdx = 0; + for( IndexType j = 0; j < ySize; j++ ) + for( IndexType i = 0; i < xSize; i++ ) + { + const IndexType vertex0 = j * ( xSize + 1 ) + i; + const IndexType vertex1 = j * ( xSize + 1 ) + i + 1; + const IndexType vertex2 = ( j + 1 ) * ( xSize + 1 ) + i; + const IndexType vertex3 = ( j + 1 ) * ( xSize + 1 ) + i + 1; + + const TriangleMeshEntityType& leftCell = mesh.getCell( cellIdx++ ); + EXPECT_EQ( leftCell.template getSubentityIndex< 0 >( 0 ), vertex0 ); + EXPECT_EQ( leftCell.template getSubentityIndex< 0 >( 1 ), vertex1 ); + EXPECT_EQ( leftCell.template getSubentityIndex< 0 >( 2 ), vertex2 ); + + const TriangleMeshEntityType& rightCell = mesh.getCell( cellIdx++ ); + EXPECT_EQ( rightCell.template getSubentityIndex< 0 >( 0 ), vertex1 ); + EXPECT_EQ( rightCell.template getSubentityIndex< 0 >( 1 ), vertex2 ); + EXPECT_EQ( rightCell.template getSubentityIndex< 0 >( 2 ), vertex3 ); + } + + // Test vertices -> cells superentities + for( IndexType j = 0; j <= ySize; j++ ) + for( IndexType i = 0; i <= xSize; i++ ) + { + const IndexType vertexIndex = j * ( xSize + 1 ) + i; + const VertexMeshEntityType& vertex = mesh.template getEntity< 0 >( vertexIndex ); + + if( ( i == 0 && j == 0 ) || ( i == xSize && j == ySize ) ) { + EXPECT_EQ( vertex.template getNumberOfSuperentities< 1 >(), 2 ); + EXPECT_EQ( vertex.template getNumberOfSuperentities< 2 >(), 1 ); + } + else if( ( i == 0 && j == ySize ) || ( i == xSize && j == 0 ) ) { + EXPECT_EQ( vertex.template getNumberOfSuperentities< 1 >(), 3 ); + EXPECT_EQ( vertex.template getNumberOfSuperentities< 2 >(), 2 ); + } + else if( i == 0 || i == xSize || j == 0 || j == ySize ) { + EXPECT_EQ( vertex.template getNumberOfSuperentities< 1 >(), 4 ); + EXPECT_EQ( vertex.template getNumberOfSuperentities< 2 >(), 3 ); + } + else { + EXPECT_EQ( vertex.template getNumberOfSuperentities< 1 >(), 6 ); + EXPECT_EQ( vertex.template getNumberOfSuperentities< 2 >(), 6 ); + } + } + //ASSERT_TRUE( mesh.save( "mesh-test.tnl" ) ); //ASSERT_TRUE( mesh2.load( "mesh-test.tnl" ) ); //ASSERT_TRUE( mesh == mesh2 ); @@ -410,7 +457,7 @@ TEST( MeshTest, RegularMeshOfQuadrilateralsTest ) using PointType = typename VertexMeshEntityType::PointType; ASSERT_TRUE( PointType::getType() == ( Containers::StaticVector< 2, RealType >::getType() ) ); - const IndexType xSize( 5 ), ySize( 5 ); + const IndexType xSize( 3 ), ySize( 4 ); const RealType width( 1.0 ), height( 1.0 ); const RealType hx( width / ( RealType ) xSize ), hy( height / ( RealType ) ySize ); @@ -450,6 +497,51 @@ TEST( MeshTest, RegularMeshOfQuadrilateralsTest ) ASSERT_TRUE( meshBuilder.build( mesh ) ); + // Test cells -> vertices subentities + cellIdx = 0; + for( IndexType j = 0; j < ySize; j++ ) + for( IndexType i = 0; i < xSize; i++ ) + { + const IndexType vertex0 = j * ( xSize + 1 ) + i; + const IndexType vertex1 = j * ( xSize + 1 ) + i + 1; + const IndexType vertex2 = ( j + 1 ) * ( xSize + 1 ) + i + 1; + const IndexType vertex3 = ( j + 1 ) * ( xSize + 1 ) + i; + + const QuadrilateralMeshEntityType& cell = mesh.getCell( cellIdx++ ); + EXPECT_EQ( cell.template getSubentityIndex< 0 >( 0 ), vertex0 ); + EXPECT_EQ( cell.template getSubentityIndex< 0 >( 1 ), vertex1 ); + EXPECT_EQ( cell.template getSubentityIndex< 0 >( 2 ), vertex2 ); + EXPECT_EQ( cell.template getSubentityIndex< 0 >( 3 ), vertex3 ); + } + + // Test vertices -> cells superentities + for( IndexType j = 0; j <= ySize; j++ ) + for( IndexType i = 0; i <= xSize; i++ ) + { + const IndexType vertexIndex = j * ( xSize + 1 ) + i; + const VertexMeshEntityType& vertex = mesh.template getEntity< 0 >( vertexIndex ); + + if( ( i == 0 || i == xSize ) && ( j == 0 || j == ySize ) ) { + EXPECT_EQ( vertex.template getNumberOfSuperentities< 1 >(), 2 ); + EXPECT_EQ( vertex.template getNumberOfSuperentities< 2 >(), 1 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 2 >( 0 ), ( j - ( j == ySize ) ) * xSize + i - ( i == xSize ) ); + } + else if( i == 0 || i == xSize || j == 0 || j == ySize ) { + EXPECT_EQ( vertex.template getNumberOfSuperentities< 1 >(), 3 ); + EXPECT_EQ( vertex.template getNumberOfSuperentities< 2 >(), 2 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 2 >( 0 ), ( j - ( j == ySize || i == 0 || i == xSize ) ) * xSize + i - ( i == xSize ) - ( j == 0 || j == ySize ) ); + EXPECT_EQ( vertex.template getSuperentityIndex< 2 >( 1 ), ( j - ( j == ySize ) ) * xSize + i - ( i == xSize ) ); + } + else { + EXPECT_EQ( vertex.template getNumberOfSuperentities< 1 >(), 4 ); + EXPECT_EQ( vertex.template getNumberOfSuperentities< 2 >(), 4 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 2 >( 0 ), ( j - 1 ) * xSize + i - 1 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 2 >( 1 ), ( j - 1 ) * xSize + i ); + EXPECT_EQ( vertex.template getSuperentityIndex< 2 >( 2 ), ( j ) * xSize + i - 1 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 2 >( 3 ), ( j ) * xSize + i ); + } + } + //ASSERT_TRUE( mesh.save( "mesh-test.tnl" ) ); //ASSERT_TRUE( mesh2.load( "mesh-test.tnl" ) ); //ASSERT_TRUE( mesh == mesh2 ); @@ -466,7 +558,7 @@ TEST( MeshTest, RegularMeshOfHexahedronsTest ) using PointType = typename VertexMeshEntityType::PointType; ASSERT_TRUE( PointType::getType() == ( Containers::StaticVector< 3, RealType >::getType() ) ); - const IndexType xSize( 5 ), ySize( 5 ), zSize( 5 ); + const IndexType xSize( 3 ), ySize( 4 ), zSize( 5 ); const RealType width( 1.0 ), height( 1.0 ), depth( 1.0 ); const RealType hx( width / ( RealType ) xSize ), hy( height / ( RealType ) ySize ), @@ -498,12 +590,12 @@ TEST( MeshTest, RegularMeshOfHexahedronsTest ) { const IndexType vertex0 = k * ( xSize + 1 ) * ( ySize + 1 ) + j * ( xSize + 1 ) + i; const IndexType vertex1 = k * ( xSize + 1 ) * ( ySize + 1 ) + j * ( xSize + 1 ) + i + 1; - const IndexType vertex2 = k * ( xSize + 1 ) * ( ySize + 1 ) + ( j + 1 ) * ( xSize + 1 ) + i; - const IndexType vertex3 = k * ( xSize + 1 ) * ( ySize + 1 ) + ( j + 1 ) * ( xSize + 1 ) + i + 1; + const IndexType vertex2 = k * ( xSize + 1 ) * ( ySize + 1 ) + ( j + 1 ) * ( xSize + 1 ) + i + 1; + const IndexType vertex3 = k * ( xSize + 1 ) * ( ySize + 1 ) + ( j + 1 ) * ( xSize + 1 ) + i; const IndexType vertex4 = ( k + 1 ) * ( xSize + 1 ) * ( ySize + 1 ) + j * ( xSize + 1 ) + i; const IndexType vertex5 = ( k + 1 ) * ( xSize + 1 ) * ( ySize + 1 ) + j * ( xSize + 1 ) + i + 1; - const IndexType vertex6 = ( k + 1 ) * ( xSize + 1 ) * ( ySize + 1 ) + ( j + 1 ) * ( xSize + 1 ) + i; - const IndexType vertex7 = ( k + 1 ) * ( xSize + 1 ) * ( ySize + 1 ) + ( j + 1 ) * ( xSize + 1 ) + i + 1; + const IndexType vertex6 = ( k + 1 ) * ( xSize + 1 ) * ( ySize + 1 ) + ( j + 1 ) * ( xSize + 1 ) + i + 1; + const IndexType vertex7 = ( k + 1 ) * ( xSize + 1 ) * ( ySize + 1 ) + ( j + 1 ) * ( xSize + 1 ) + i; meshBuilder.getCellSeed( cellIdx ).setCornerId( 0, vertex0 ); meshBuilder.getCellSeed( cellIdx ).setCornerId( 1, vertex1 ); @@ -517,6 +609,106 @@ TEST( MeshTest, RegularMeshOfHexahedronsTest ) ASSERT_TRUE( meshBuilder.build( mesh ) ); + // Test cells -> vertices subentities + cellIdx = 0; + for( IndexType k = 0; k < zSize; k++ ) + for( IndexType j = 0; j < ySize; j++ ) + for( IndexType i = 0; i < xSize; i++ ) + { + const IndexType vertex0 = k * ( xSize + 1 ) * ( ySize + 1 ) + j * ( xSize + 1 ) + i; + const IndexType vertex1 = k * ( xSize + 1 ) * ( ySize + 1 ) + j * ( xSize + 1 ) + i + 1; + const IndexType vertex2 = k * ( xSize + 1 ) * ( ySize + 1 ) + ( j + 1 ) * ( xSize + 1 ) + i + 1; + const IndexType vertex3 = k * ( xSize + 1 ) * ( ySize + 1 ) + ( j + 1 ) * ( xSize + 1 ) + i; + const IndexType vertex4 = ( k + 1 ) * ( xSize + 1 ) * ( ySize + 1 ) + j * ( xSize + 1 ) + i; + const IndexType vertex5 = ( k + 1 ) * ( xSize + 1 ) * ( ySize + 1 ) + j * ( xSize + 1 ) + i + 1; + const IndexType vertex6 = ( k + 1 ) * ( xSize + 1 ) * ( ySize + 1 ) + ( j + 1 ) * ( xSize + 1 ) + i + 1; + const IndexType vertex7 = ( k + 1 ) * ( xSize + 1 ) * ( ySize + 1 ) + ( j + 1 ) * ( xSize + 1 ) + i; + + const HexahedronMeshEntityType& cell = mesh.getCell( cellIdx++ ); + EXPECT_EQ( cell.template getSubentityIndex< 0 >( 0 ), vertex0 ); + EXPECT_EQ( cell.template getSubentityIndex< 0 >( 1 ), vertex1 ); + EXPECT_EQ( cell.template getSubentityIndex< 0 >( 2 ), vertex2 ); + EXPECT_EQ( cell.template getSubentityIndex< 0 >( 3 ), vertex3 ); + EXPECT_EQ( cell.template getSubentityIndex< 0 >( 4 ), vertex4 ); + EXPECT_EQ( cell.template getSubentityIndex< 0 >( 5 ), vertex5 ); + EXPECT_EQ( cell.template getSubentityIndex< 0 >( 6 ), vertex6 ); + EXPECT_EQ( cell.template getSubentityIndex< 0 >( 7 ), vertex7 ); + } + + // Test vertices -> cells superentities + for( IndexType k = 0; k < zSize; k++ ) + for( IndexType j = 0; j <= ySize; j++ ) + for( IndexType i = 0; i <= xSize; i++ ) + { + const IndexType vertexIndex = k * ( xSize + 1 ) * ( ySize + 1 ) + j * ( xSize + 1 ) + i; + const VertexMeshEntityType& vertex = mesh.template getEntity< 0 >( vertexIndex ); + + if( ( i == 0 || i == xSize ) && ( j == 0 || j == ySize ) && ( k == 0 || k == zSize ) ) { + EXPECT_EQ( vertex.template getNumberOfSuperentities< 1 >(), 3 ); + EXPECT_EQ( vertex.template getNumberOfSuperentities< 2 >(), 3 ); + EXPECT_EQ( vertex.template getNumberOfSuperentities< 3 >(), 1 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 0 ), ( k - ( k == zSize ) ) * xSize * ySize + ( j - ( j == ySize ) ) * xSize + i - ( i == xSize ) ); + } + else if( i == 0 || i == xSize || j == 0 || j == ySize || k == 0 || k == zSize ) { + if( ( i != 0 && i != xSize && j != 0 && j != ySize ) || + ( i != 0 && i != xSize && k != 0 && k != zSize ) || + ( j != 0 && j != ySize && k != 0 && k != zSize ) ) + { + EXPECT_EQ( vertex.template getNumberOfSuperentities< 1 >(), 5 ); + EXPECT_EQ( vertex.template getNumberOfSuperentities< 2 >(), 8 ); + EXPECT_EQ( vertex.template getNumberOfSuperentities< 3 >(), 4 ); + if( k == 0 || k == zSize ) { + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 0 ), ( k - ( k == zSize ) ) * xSize * ySize + ( j - 1 ) * xSize + i - 1 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 1 ), ( k - ( k == zSize ) ) * xSize * ySize + ( j - 1 ) * xSize + i ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 2 ), ( k - ( k == zSize ) ) * xSize * ySize + ( j ) * xSize + i - 1 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 3 ), ( k - ( k == zSize ) ) * xSize * ySize + ( j ) * xSize + i ); + } + else if( j == 0 || j == ySize ) { + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 0 ), ( k - 1 ) * xSize * ySize + ( j - ( j == ySize ) ) * xSize + i - 1 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 1 ), ( k - 1 ) * xSize * ySize + ( j - ( j == ySize ) ) * xSize + i ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 2 ), ( k ) * xSize * ySize + ( j - ( j == ySize ) ) * xSize + i - 1 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 3 ), ( k ) * xSize * ySize + ( j - ( j == ySize ) ) * xSize + i ); + } + else { + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 0 ), ( k - 1 ) * xSize * ySize + ( j - 1 ) * xSize + i - ( i == xSize ) ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 1 ), ( k - 1 ) * xSize * ySize + ( j ) * xSize + i - ( i == xSize ) ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 2 ), ( k ) * xSize * ySize + ( j - 1 ) * xSize + i - ( i == xSize ) ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 3 ), ( k ) * xSize * ySize + ( j ) * xSize + i - ( i == xSize ) ); + } + } + else { + EXPECT_EQ( vertex.template getNumberOfSuperentities< 1 >(), 4 ); + EXPECT_EQ( vertex.template getNumberOfSuperentities< 2 >(), 5 ); + EXPECT_EQ( vertex.template getNumberOfSuperentities< 3 >(), 2 ); + if( k != 0 && k != zSize ) { + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 0 ), ( k - 1 ) * xSize * ySize + ( j - ( j == ySize ) ) * xSize + i - ( i == xSize ) ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 1 ), ( k ) * xSize * ySize + ( j - ( j == ySize ) ) * xSize + i - ( i == xSize ) ); + } + else if( j != 0 && j != ySize ) { + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 0 ), ( k - ( k == zSize ) ) * xSize * ySize + ( j - 1 ) * xSize + i - ( i == xSize ) ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 1 ), ( k - ( k == zSize ) ) * xSize * ySize + ( j ) * xSize + i - ( i == xSize ) ); + } + else { + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 0 ), ( k - ( k == zSize ) ) * xSize * ySize + ( j - ( j == ySize ) ) * xSize + i - 1 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 1 ), ( k - ( k == zSize ) ) * xSize * ySize + ( j - ( j == ySize ) ) * xSize + i ); + } + } + } + else { + EXPECT_EQ( vertex.template getNumberOfSuperentities< 1 >(), 6 ); + EXPECT_EQ( vertex.template getNumberOfSuperentities< 2 >(), 12 ); + EXPECT_EQ( vertex.template getNumberOfSuperentities< 3 >(), 8 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 0 ), ( k - 1 ) * xSize * ySize + ( j - 1 ) * xSize + i - 1 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 1 ), ( k - 1 ) * xSize * ySize + ( j - 1 ) * xSize + i ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 2 ), ( k - 1 ) * xSize * ySize + ( j ) * xSize + i - 1 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 3 ), ( k - 1 ) * xSize * ySize + ( j ) * xSize + i ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 4 ), ( k ) * xSize * ySize + ( j - 1 ) * xSize + i - 1 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 5 ), ( k ) * xSize * ySize + ( j - 1 ) * xSize + i ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 6 ), ( k ) * xSize * ySize + ( j ) * xSize + i - 1 ); + EXPECT_EQ( vertex.template getSuperentityIndex< 3 >( 7 ), ( k ) * xSize * ySize + ( j ) * xSize + i ); + } + } + //meshInitializer.initMesh( mesh ); /*ASSERT_TRUE( mesh.save( "mesh-test.tnl" ) ); ASSERT_TRUE( mesh2.load( "mesh-test.tnl" ) ); -- GitLab