| 8 | { |
| 9 | |
| 10 | TEST(MRMesh, LoadSave) |
| 11 | { |
| 12 | std::string file = |
| 13 | "OFF\n" |
| 14 | "5 6 0\n" |
| 15 | |
| 16 | "0 0 1\n" |
| 17 | "1 0 0\n" |
| 18 | "0 1 0\n" |
| 19 | "-1 0 0\n" |
| 20 | "0 -1 0\n" |
| 21 | |
| 22 | "3 0 1 2\n" |
| 23 | "3 0 2 3\n" |
| 24 | "3 0 3 4\n" |
| 25 | "3 0 4 1\n" |
| 26 | "3 1 3 2\n" |
| 27 | "3 1 4 3\n"; |
| 28 | |
| 29 | std::istringstream in( file ); |
| 30 | |
| 31 | auto loadRes = MeshLoad::fromOff( in ); |
| 32 | EXPECT_TRUE( loadRes.has_value() ); |
| 33 | |
| 34 | EXPECT_EQ( loadRes->points.size(), 5 ); |
| 35 | EXPECT_EQ( loadRes->topology.numValidVerts(), 5 ); |
| 36 | EXPECT_EQ( loadRes->topology.numValidFaces(), 6 ); |
| 37 | |
| 38 | auto box = loadRes->computeBoundingBox(); |
| 39 | EXPECT_EQ( box, Box3f( Vector3f(-1, -1, 0), Vector3f(1, 1, 1) ) ); |
| 40 | EXPECT_TRUE ( box.contains( Vector3f(0, 0, 0) ) ); |
| 41 | EXPECT_FALSE( box.contains( Vector3f(-1, -1, -1) ) ); |
| 42 | |
| 43 | std::stringstream ss; |
| 44 | auto saveRes = MeshSave::toOff( *loadRes, ss ); |
| 45 | EXPECT_TRUE( saveRes.has_value() ); |
| 46 | |
| 47 | loadRes = MeshLoad::fromOff( ss ); |
| 48 | EXPECT_TRUE( loadRes.has_value() ); |
| 49 | |
| 50 | EXPECT_EQ( loadRes->points.size(), 5 ); |
| 51 | EXPECT_EQ( loadRes->topology.numValidVerts(), 5 ); |
| 52 | EXPECT_EQ( loadRes->topology.numValidFaces(), 6 ); |
| 53 | |
| 54 | // save/load to internal format |
| 55 | ss = std::stringstream{}; |
| 56 | saveRes = MeshSave::toMrmesh( *loadRes, ss ); |
| 57 | EXPECT_TRUE( saveRes.has_value() ); |
| 58 | |
| 59 | loadRes = MeshLoad::fromMrmesh( ss ); |
| 60 | EXPECT_TRUE( loadRes.has_value() ); |
| 61 | |
| 62 | EXPECT_EQ( loadRes->points.size(), 5 ); |
| 63 | EXPECT_EQ( loadRes->topology.numValidVerts(), 5 ); |
| 64 | EXPECT_EQ( loadRes->topology.numValidFaces(), 6 ); |
| 65 | |
| 66 | // save/load to binary STL format |
| 67 | ss = std::stringstream{}; |
nothing calls this directly
no test coverage detected