void TestOtherExceptions() throw(Exception) { // This should fail because SPACE_DIM doesn't match the dimension in the file TS_ASSERT_THROWS_THIS( READER_1D mesh_reader("mesh/test/data/disk_984_elements"), "SPACE_DIM != dimension read from file "); //Indexed quadratic faces TS_ASSERT_THROWS_THIS( READER_1D mesh_reader2("mesh/test/data/baddata/bad_1D_0_to_1_10_elements_quadratic", 2, 2, true), "Boundary element file should not have containing element info if it is quadratic"); //Exceptions due to unimplemented code TrianglesMeshReader<3,3> mesh_reader3("mesh/test/data/simple_cube"); TS_ASSERT_THROWS_THIS(mesh_reader3.GetNode(0), "Random access is only implemented in mesh readers for binary mesh files."); TS_ASSERT_THROWS_THIS(mesh_reader3.GetElementData(0), "Random access is only implemented in mesh readers for binary mesh files."); TS_ASSERT_THROWS_THIS(mesh_reader3.GetFaceData(0), "Random access is only implemented in mesh readers for binary mesh files."); TS_ASSERT_THROWS_THIS(mesh_reader3.GetEdgeData(0), "Random access is only implemented in mesh readers for binary mesh files."); TS_ASSERT_THROWS_THIS(mesh_reader3.GetContainingElementIndices(0), "NCL file functionality is only implemented in mesh readers for binary mesh files."); }
/** * Check that GetNextElementDataWithFaces() works. Checks that no errors are thrown for * all of the elements and that an error is thrown if we try to call the * function too many times. */ void TestGetNextElementDataWithFaces() throw(Exception) { // First test the case where there aren't actually any faces VertexMeshReader<3,3> mesh_reader1("mesh/test/data/TestVertexMeshWriter/vertex_mesh_3d"); // This mesh should consist of a single cubic element with eight nodes and no faces TS_ASSERT_EQUALS(mesh_reader1.GetNumElements(), 1u); VertexElementData element_0_data = mesh_reader1.GetNextElementDataWithFaces(); // Test node indices std::vector<unsigned> node_indices = element_0_data.NodeIndices; TS_ASSERT_EQUALS(node_indices.size(), 8u); for (unsigned i=0; i<8; i++) { TS_ASSERT_EQUALS(node_indices[i], i); } // Test there aren't any faces std::vector<ElementData> faces = element_0_data.Faces; TS_ASSERT_EQUALS(faces.size(), 0u); // Test an exception is thrown if we try to access the next element TS_ASSERT_THROWS_THIS(node_indices = mesh_reader1.GetNextElementDataWithFaces().NodeIndices, "Cannot get the next line from node or element file due to incomplete data"); // Now test the case where there are faces VertexMeshReader<3,3> mesh_reader2("mesh/test/data/TestVertexMeshWriter/vertex_mesh_3d_with_faces"); // This mesh should consist of a single tetrahedral element with four nodes and four faces TS_ASSERT_EQUALS(mesh_reader2.GetNumElements(), 1u); element_0_data = mesh_reader2.GetNextElementDataWithFaces(); // Test there are four nodes owned by this element node_indices = element_0_data.NodeIndices; TS_ASSERT_EQUALS(node_indices.size(), 4u); // Test the node indices are correct (use a set comparison in case of funny business relating to tetgen versions) std::set<unsigned> node_indices_expected; std::set<unsigned> node_indices_returned; for (unsigned i=0; i<4; i++) { node_indices_expected.insert(i); node_indices_returned.insert(node_indices[i]); } TS_ASSERT_EQUALS(node_indices_expected, node_indices_returned); // Test there are four faces owned by this element faces = element_0_data.Faces; TS_ASSERT_EQUALS(faces.size(), 4u); // Test the first face has the correct index and owns the correct nodes ElementData face_0 = faces[0]; TS_ASSERT_EQUALS(face_0.NodeIndices.size(), 3u); TS_ASSERT_EQUALS(face_0.NodeIndices[0], 3u); TS_ASSERT_EQUALS(face_0.NodeIndices[1], 0u); TS_ASSERT_EQUALS(face_0.NodeIndices[2], 2u); // Test an exception is thrown if we try to access the next element TS_ASSERT_THROWS_THIS(node_indices = mesh_reader2.GetNextElementDataWithFaces().NodeIndices, "Cannot get the next line from node or element file due to incomplete data"); VertexMeshReader<3,3> mesh_reader3("mesh/test/data/baddata/vertex_mesh_3d_with_faces"); // Reads element 1 from file when expecting number 0 TS_ASSERT_THROWS_THIS(mesh_reader3.GetNextElementDataWithFaces(), "Data for element 0 missing"); }