blob: 2aaf0d9d777f18a2656e8f2ca1a2f16bb55fd91e [file] [log] [blame]
// 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);
}
}
}