| // Copyright 2023 Google LLC | |
| // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. | |
| #include "modules/bentleyottmann/include/BentleyOttmann1.h" | |
| #include "modules/bentleyottmann/include/Point.h" | |
| #include "modules/bentleyottmann/include/Segment.h" | |
| #include "tests/Test.h" | |
| #include <vector> | |
| using namespace bentleyottmann; | |
| DEF_TEST(BO_bentley_ottmann_1_Basic, reporter) { | |
| { | |
| Segment s0 = {{-1, 0}, {1, 0}}, | |
| s1 = {{ 0, 1}, {0, -1}}; | |
| std::vector<Segment> segments; | |
| segments.push_back(s0); | |
| segments.push_back(s1); | |
| auto possibleCrossings = bentley_ottmann_1(segments); | |
| REPORTER_ASSERT(reporter, possibleCrossings.has_value()); | |
| if (possibleCrossings) { | |
| const auto& crossings = possibleCrossings.value(); | |
| REPORTER_ASSERT(reporter, crossings.size() == 1); | |
| Point p = {0, 0}; | |
| REPORTER_ASSERT(reporter, crossings[0].crossing == p); | |
| REPORTER_ASSERT(reporter, (crossings[0].s0 == s0 && crossings[0].s1 == s1) || | |
| (crossings[0].s0 == s1 && crossings[0].s1 == s0)); | |
| } | |
| } | |
| { | |
| Point p0 = {-50, -100}, | |
| p1 = { 50, -100}, | |
| p2 = { 0, 100}; | |
| Segment s0 = {p0, p1}, | |
| s1 = {p1, p2}, | |
| s2 = {p2, p0}; | |
| std::vector<Segment> segments{s0, s1, s2}; | |
| auto possibleCrossings = bentley_ottmann_1(segments); | |
| REPORTER_ASSERT(reporter, possibleCrossings.has_value()); | |
| if (possibleCrossings) { | |
| const auto& crossings = possibleCrossings.value(); | |
| REPORTER_ASSERT(reporter, crossings.size() == 0); | |
| } | |
| } | |
| { | |
| Point p0 = {-50, 100}, | |
| p1 = { 50, 100}, | |
| p2 = { 0, -100}; | |
| Segment s0 = {p0, p1}, | |
| s1 = {p1, p2}, | |
| s2 = {p2, p0}; | |
| std::vector<Segment> segments{s0, s1, s2}; | |
| auto possibleCrossings = bentley_ottmann_1(segments); | |
| REPORTER_ASSERT(reporter, possibleCrossings.has_value()); | |
| if (possibleCrossings) { | |
| const auto& crossings = possibleCrossings.value(); | |
| REPORTER_ASSERT(reporter, crossings.size() == 0); | |
| } | |
| } | |
| } |