Skip to content

Commit

Permalink
GRIDEDIT-759 Added unit test for linear refine of polygons
Browse files Browse the repository at this point in the history
  • Loading branch information
BillSenior committed Jun 18, 2024
1 parent ee60ff1 commit 03b13de
Showing 1 changed file with 69 additions and 0 deletions.
69 changes: 69 additions & 0 deletions libs/MeshKernel/tests/src/PolygonsTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -954,3 +954,72 @@ TEST_P(IsPointInPolygonsTests, parameters)
ASSERT_EQ(result, expectedResult);
}
INSTANTIATE_TEST_SUITE_P(IsPointInPolygonsParametrizedTests, IsPointInPolygonsTests, ::testing::ValuesIn(IsPointInPolygonsTests::GetData()));


TEST(Polygons, BasicLinearRefinePolygon)
{
// Prepare
std::vector<meshkernel::Point> nodes;

nodes.push_back({0.0, 10.0});
nodes.push_back({1.0, 10.0});
nodes.push_back({3.0, 10.0});
nodes.push_back({11.0, 10.0});
nodes.push_back({11.0, 0.0});
nodes.push_back({0.0, 0.0});
nodes.push_back({0.0, 10.0});

std::vector<meshkernel::Point> expected;

expected.push_back({0.0, 10.0});
expected.push_back({1.0, 10.0});
expected.push_back({3.476743906, 10.0});
expected.push_back({7.180339887, 10.0});
expected.push_back({11, 8.281492376});
expected.push_back({11.0, 0.0});
expected.push_back({0.0, 0.0});
expected.push_back({0.0, 10.0});

meshkernel::Polygons polygons(nodes, meshkernel::Projection::cartesian);

// Execute
const auto refinedPolygon = polygons.LinearRefinePolygon(0, 1, 4);

ASSERT_EQ (expected.size (), refinedPolygon.size ());
constexpr double tolerance = 1.0e-8;

for (size_t i = 0; i < refinedPolygon.size (); ++i)
{
EXPECT_NEAR (expected[i].x, refinedPolygon[i].x, tolerance);
EXPECT_NEAR (expected[i].y, refinedPolygon[i].y, tolerance);
}
}

TEST(Polygons, LinearRefinePolygonSameNodes)
{
// Prepare
std::vector<meshkernel::Point> nodes;

nodes.push_back({0.0, 10.0});
nodes.push_back({1.0, 10.0});
nodes.push_back({3.0, 10.0});
nodes.push_back({11.0, 10.0});
nodes.push_back({11.0, 0.0});
nodes.push_back({0.0, 0.0});
nodes.push_back({0.0, 10.0});

std::vector<meshkernel::Point> expected(nodes);

meshkernel::Polygons polygons(nodes, meshkernel::Projection::cartesian);

// Execute
const auto refinedPolygon = polygons.LinearRefinePolygon(0, 1, 1);

ASSERT_EQ (expected.size (), refinedPolygon.size ());

for (size_t i = 0; i < refinedPolygon.size (); ++i)
{
EXPECT_EQ (expected[i].x, refinedPolygon[i].x);
EXPECT_EQ (expected[i].y, refinedPolygon[i].y);
}
}

0 comments on commit 03b13de

Please sign in to comment.