You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.6 KiB
C++
55 lines
1.6 KiB
C++
#include <gtest/gtest.h>
|
|
#include "clipper2/clipper.h"
|
|
#include "ClipFileLoad.h"
|
|
TEST(Clipper2Tests, TestMultipleLines) {
|
|
std::ifstream ifs("Lines.txt");
|
|
ASSERT_TRUE(ifs.good());
|
|
int test_number = 1;
|
|
while (true)
|
|
{
|
|
Clipper2Lib::Paths64 subject, subject_open, clip;
|
|
Clipper2Lib::Paths64 solution, solution_open;
|
|
Clipper2Lib::ClipType ct;
|
|
Clipper2Lib::FillRule fr;
|
|
int64_t area, count;
|
|
if (!LoadTestNum(ifs, test_number,
|
|
subject, subject_open, clip, area, count, ct, fr)) break;
|
|
Clipper2Lib::Clipper64 c;
|
|
c.AddSubject(subject);
|
|
c.AddOpenSubject(subject_open);
|
|
c.AddClip(clip);
|
|
EXPECT_TRUE(c.Execute(ct, fr, solution, solution_open));
|
|
const int64_t count2 = solution.size() + solution_open.size();
|
|
const int64_t count_diff = std::abs(count2 - count);
|
|
const double relative_count_diff = count ?
|
|
count_diff / static_cast<double>(count) :
|
|
0;
|
|
if (test_number == 1)
|
|
{
|
|
EXPECT_EQ(solution.size(), 1);
|
|
if (solution.size() > 0)
|
|
{
|
|
EXPECT_EQ(solution[0].size(), 6);
|
|
EXPECT_TRUE(IsPositive(solution[0]));
|
|
}
|
|
EXPECT_EQ(solution_open.size(), 1);
|
|
if (solution_open.size() > 0)
|
|
{
|
|
EXPECT_EQ(solution_open[0].size(), 2);
|
|
if (solution_open[0].size() > 0)
|
|
{
|
|
//expect vertex closest to input path's start
|
|
EXPECT_EQ(solution_open[0][0].y, 6);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
EXPECT_LE(count_diff, 8);
|
|
EXPECT_LE(relative_count_diff, 0.1);
|
|
}
|
|
++test_number;
|
|
}
|
|
ifs.close();
|
|
EXPECT_GE(test_number, 17);
|
|
} |