@@ -598,3 +598,37 @@ TEST_F(SubMeshTest, NormalsRecalculation)
598598 // because of neighbour vertex
599599 ASSERT_NE (submesh->Normal (0 ), submesh->Normal (1 ));
600600}
601+
602+ // ///////////////////////////////////////////////
603+ TEST_F (SubMeshTest, HasValidIndices)
604+ {
605+ // Check empty submesh
606+ auto submesh = std::make_shared<common::SubMesh>();
607+ EXPECT_FALSE (submesh->HasValidIndices ());
608+
609+ // Check box submesh
610+ const common::Mesh *unitBox =
611+ common::MeshManager::Instance ()->MeshByName (" unit_box" );
612+ ASSERT_TRUE (unitBox != nullptr );
613+ auto unitBoxSubmesh = unitBox->SubMeshByIndex (0 ).lock ();
614+
615+ // Submesh has valid indices and we should be able to calculate normals
616+ // and volume
617+ EXPECT_TRUE (unitBoxSubmesh->HasValidIndices ());
618+ unitBoxSubmesh->RecalculateNormals ();
619+ ASSERT_EQ (unitBoxSubmesh->VertexCount (), unitBoxSubmesh->NormalCount ());
620+ EXPECT_EQ (24u , unitBoxSubmesh->NormalCount ());
621+ EXPECT_DOUBLE_EQ (1.0 , unitBoxSubmesh->Volume ());
622+
623+ // Add some invalid indices
624+ unitBoxSubmesh->AddIndex (100 );
625+ unitBoxSubmesh->AddIndex (101 );
626+ unitBoxSubmesh->AddIndex (102 );
627+
628+ // Submesh has invalid indices so it is no longer able to update normals or
629+ // compute volume.
630+ EXPECT_FALSE (unitBoxSubmesh->HasValidIndices ());
631+ unitBoxSubmesh->RecalculateNormals ();
632+ EXPECT_EQ (24u , unitBoxSubmesh->NormalCount ());
633+ EXPECT_DOUBLE_EQ (0.0 , unitBoxSubmesh->Volume ());
634+ }
0 commit comments