| // 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) { |
| 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) { |
| 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) { |
| auto crossings = possibleCrossings.value(); |
| REPORTER_ASSERT(reporter, crossings.size() == 0); |
| } |
| } |
| } |