mapnik/test/unit/geometry/polygon_vertex_processor.cpp

66 lines
1.9 KiB
C++
Raw Normal View History

2018-01-17 10:53:45 +01:00
#include "catch.hpp"
#include "unit/vertex_adapter/fake_path.hpp"
#include <mapnik/geometry/polygon_vertex_processor.hpp>
TEST_CASE("polygon_vertex_processor") {
SECTION("empty polygon") {
fake_path path = {};
mapnik::geometry::polygon_vertex_processor<double> proc;
proc.add_path(path);
CHECK(proc.polygon_.exterior_ring.size() == 0);
CHECK(proc.polygon_.interior_rings.size() == 0);
}
SECTION("empty exterior ring") {
fake_path path = {};
path.vertices_.emplace_back(0, 0, mapnik::SEG_CLOSE);
path.rewind(0);
mapnik::geometry::polygon_vertex_processor<double> proc;
proc.add_path(path);
CHECK(proc.polygon_.exterior_ring.size() == 0);
CHECK(proc.polygon_.interior_rings.size() == 0);
}
SECTION("empty interior ring") {
fake_path path = {};
path.vertices_.emplace_back(-1, -1, mapnik::SEG_MOVETO);
path.vertices_.emplace_back( 1, -1, mapnik::SEG_LINETO);
path.vertices_.emplace_back( 1, 1, mapnik::SEG_LINETO);
path.vertices_.emplace_back(-1, 1, mapnik::SEG_LINETO);
path.vertices_.emplace_back( 0, 0, mapnik::SEG_CLOSE);
path.vertices_.emplace_back( 0, 0, mapnik::SEG_CLOSE);
path.rewind(0);
mapnik::geometry::polygon_vertex_processor<double> proc;
proc.add_path(path);
REQUIRE(proc.polygon_.interior_rings.size() == 1);
REQUIRE(proc.polygon_.interior_rings.front().size() == 0);
auto const& outer_ring = proc.polygon_.exterior_ring;
REQUIRE(outer_ring.size() == 5);
CHECK(outer_ring[0].x == Approx(-1));
CHECK(outer_ring[0].y == Approx(-1));
CHECK(outer_ring[1].x == Approx( 1));
CHECK(outer_ring[1].y == Approx(-1));
CHECK(outer_ring[2].x == Approx( 1));
CHECK(outer_ring[2].y == Approx( 1));
CHECK(outer_ring[3].x == Approx(-1));
CHECK(outer_ring[3].y == Approx( 1));
CHECK(outer_ring[4].x == Approx(-1));
CHECK(outer_ring[4].y == Approx(-1));
}
}