Skip to content

Commit

Permalink
Add a test for exporting geometry diagnostics, serves as benchmark too
Browse files Browse the repository at this point in the history
```
1/4 Test #2562: ModelFixture.ThreeJSForwardTranslator_RefBldgOutPatientNew2004_Chicago .......................   Passed    1.39 sec
2/4 Test #2563: ModelFixture.ThreeJSForwardTranslator_RefBldgOutPatientNew2004_Chicago_GeometryDiagnostics ...   Passed    1.40 sec
3/4 Test #2560: ModelFixture.ThreeJSForwardTranslator_7_7_Windows_Complete ...................................   Passed    3.79 sec
4/4 Test #2561: ModelFixture.ThreeJSForwardTranslator_7_7_Windows_Complete_GeometryDiagnostics ...............   Passed    3.95 sec
```
  • Loading branch information
jmarrec committed Apr 11, 2023
1 parent 7015208 commit e09cb78
Showing 1 changed file with 81 additions and 2 deletions.
83 changes: 81 additions & 2 deletions src/model/test/ThreeJSForwardTranslator_GTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ TEST_F(ModelFixture, ThreeJSForwardTranslator_7_7_Windows_Complete) {
for (const auto& warn : ft.warnings()) {
EXPECT_TRUE(false) << "Warning:" << warn.logMessage();
}
std::string json = scene.toJSON();
std::string json = scene.toJSON(true);
EXPECT_TRUE(ThreeScene::load(json));

out = resourcesPath() / toPath("model/M7-7_Windows_Complete.json");
Expand All @@ -102,6 +102,46 @@ TEST_F(ModelFixture, ThreeJSForwardTranslator_7_7_Windows_Complete) {
file1.close();
}

TEST_F(ModelFixture, ThreeJSForwardTranslator_7_7_Windows_Complete_GeometryDiagnostics) {
ThreeJSForwardTranslator ft;
ft.setIncludeGeometryDiagnostics(true);

openstudio::path out;

osversion::VersionTranslator translator;
openstudio::path modelpath = resourcesPath() / toPath("model/7-7_Windows_Complete.osm");
model::OptionalModel model = translator.loadModel(modelpath);
ThreeScene scene = ft.modelToThreeJS(model.get(), true);
// Ensure we get no errors or warnings, generally speaking.
EXPECT_EQ(0, ft.errors().size());
auto warnings = ft.warnings();
warnings.erase(std::remove_if(warnings.begin(), warnings.end(),
[](auto& warn) {
return ((warn.logMessage().find("Polyhedron is not enclosed") != std::string::npos)
|| (warn.logMessage().find("edges that aren't used exactly twice") != std::string::npos)
|| (warn.logMessage().find("Can't compute a floorPrint") != std::string::npos));
}),
warnings.end());
EXPECT_EQ(0, warnings.size());

for (const auto& error : ft.errors()) {
EXPECT_TRUE(false) << "Error: " << error.logMessage();
}

for (const auto& warning : warnings) {
EXPECT_TRUE(false) << "Warning: " << warning.logMessage();
}

std::string json = scene.toJSON(true);
EXPECT_TRUE(ThreeScene::load(json));

out = resourcesPath() / toPath("model/M7-7_Windows_Complete_geometryDiags.json");
openstudio::filesystem::ofstream file1(out);
ASSERT_TRUE(file1.is_open());
file1 << json;
file1.close();
}

TEST_F(ModelFixture, ThreeJSForwardTranslator_RefBldgOutPatientNew2004_Chicago) {
ThreeJSForwardTranslator ft;
openstudio::path out;
Expand All @@ -117,7 +157,7 @@ TEST_F(ModelFixture, ThreeJSForwardTranslator_RefBldgOutPatientNew2004_Chicago)
for (const auto& warning : ft.warnings()) {
EXPECT_TRUE(false) << "Warning: " << warning.logMessage();
}
std::string json = scene.toJSON();
std::string json = scene.toJSON(true);
EXPECT_TRUE(ThreeScene::load(json));
out = resourcesPath() / toPath("model/MSample_DOE-RefBldgOutPatientNew2004_Chicago.json");
openstudio::filesystem::ofstream file1(out);
Expand All @@ -126,6 +166,45 @@ TEST_F(ModelFixture, ThreeJSForwardTranslator_RefBldgOutPatientNew2004_Chicago)
file1.close();
}

TEST_F(ModelFixture, ThreeJSForwardTranslator_RefBldgOutPatientNew2004_Chicago_GeometryDiagnostics) {
ThreeJSForwardTranslator ft;
ft.setIncludeGeometryDiagnostics(true);

openstudio::path out;
osversion::VersionTranslator translator;
openstudio::path modelPath = resourcesPath() / toPath("model/Sample_DOE-RefBldgOutPatientNew2004_Chicago.osm");
model::OptionalModel model = translator.loadModel(modelPath);
ThreeScene scene = ft.modelToThreeJS(model.get(), true);
// Ensure we get no errors or warnings, generally speaking.
EXPECT_EQ(0, ft.errors().size());
auto warnings = ft.warnings();
warnings.erase(std::remove_if(warnings.begin(), warnings.end(),
[](auto& warn) {
return ((warn.logMessage().find("Polyhedron is not enclosed") != std::string::npos)
// || (warn.logMessage().find("edges that aren't used exactly twice") != std::string::npos)
// || (warn.logMessage().find("Can't compute a floorPrint") != std::string::npos)
);
}),
warnings.end());
EXPECT_EQ(0, warnings.size());

for (const auto& error : ft.errors()) {
EXPECT_TRUE(false) << "Error: " << error.logMessage();
}

for (const auto& warning : warnings) {
EXPECT_TRUE(false) << "Warning: " << warning.logMessage();
}

std::string json = scene.toJSON(true);
EXPECT_TRUE(ThreeScene::load(json));
out = resourcesPath() / toPath("model/MSample_DOE-RefBldgOutPatientNew2004_Chicago_geometryDiags.json");
openstudio::filesystem::ofstream file1(out);
ASSERT_TRUE(file1.is_open());
file1 << json;
file1.close();
}

TEST_F(ModelFixture, ThreeJSForwardTranslator_RefBldgSecondarySchoolNew2004_Chicago) {
ThreeJSForwardTranslator ft;
openstudio::path out;
Expand Down

0 comments on commit e09cb78

Please sign in to comment.