diff options
Diffstat (limited to 'libs/polygon/test/polygon_set_data_test.cpp')
-rw-r--r-- | libs/polygon/test/polygon_set_data_test.cpp | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/libs/polygon/test/polygon_set_data_test.cpp b/libs/polygon/test/polygon_set_data_test.cpp new file mode 100644 index 000000000..d85936869 --- /dev/null +++ b/libs/polygon/test/polygon_set_data_test.cpp @@ -0,0 +1,111 @@ +// Boost.Polygon library polygon_set_data_test.cpp file + +// Copyright Andrii Sydorchuk 2015. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for updates, documentation, and revision history. + +#define BOOST_TEST_MODULE POLYGON_SET_DATA_TEST +#include <vector> + +#include <boost/mpl/list.hpp> +#include <boost/test/test_case_template.hpp> + +#include "boost/polygon/polygon.hpp" +using namespace boost::polygon; +using namespace boost::polygon::operators; + +typedef boost::mpl::list<int> test_types; + +BOOST_AUTO_TEST_CASE_TEMPLATE(polygon_set_data_test1, T, test_types) { + typedef point_data<T> point_type; + typedef polygon_data<T> polygon_type; + typedef polygon_with_holes_data<T> polygon_with_holes_type; + typedef polygon_set_data<T> polygon_set_type; + + polygon_set_type pset; + std::vector<point_type> outbox; + outbox.push_back(point_type(0, 0)); + outbox.push_back(point_type(100, 0)); + outbox.push_back(point_type(100, 100)); + outbox.push_back(point_type(0, 100)); + pset.insert_vertex_sequence(outbox.begin(), outbox.end(), COUNTERCLOCKWISE, false); + std::vector<point_type> inbox; + inbox.push_back(point_type(20, 20)); + inbox.push_back(point_type(80, 20)); + inbox.push_back(point_type(80, 80)); + inbox.push_back(point_type(20, 80)); + pset.insert_vertex_sequence(inbox.begin(), inbox.end(), COUNTERCLOCKWISE, true); + + BOOST_CHECK(!pset.empty()); + BOOST_CHECK(!pset.sorted()); + BOOST_CHECK(pset.dirty()); + BOOST_CHECK_EQUAL(8, pset.size()); + + std::vector<polygon_with_holes_type> vpoly; + pset.get(vpoly); + BOOST_CHECK_EQUAL(1, vpoly.size()); + + polygon_with_holes_type poly = vpoly[0]; + BOOST_CHECK_EQUAL(5, poly.size()); + BOOST_CHECK_EQUAL(1, poly.size_holes()); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(polygon_set_data_test2, T, test_types) { + typedef point_data<T> point_type; + typedef polygon_data<T> polygon_type; + typedef polygon_with_holes_data<T> polygon_with_holes_type; + typedef polygon_set_data<T> polygon_set_type; + + std::vector<point_type> data; + data.push_back(point_type(2,0)); + data.push_back(point_type(4,0)); + data.push_back(point_type(4,3)); + data.push_back(point_type(0,3)); + data.push_back(point_type(0,0)); + data.push_back(point_type(2,0)); + data.push_back(point_type(2,1)); + data.push_back(point_type(1,1)); + data.push_back(point_type(1,2)); + data.push_back(point_type(3,2)); + data.push_back(point_type(3,1)); + data.push_back(point_type(2,1)); + data.push_back(point_type(2,0)); + + polygon_type polygon; + set_points(polygon, data.begin(), data.end()); + + polygon_set_type pset; + pset.insert(polygon); + + std::vector<polygon_type> traps; + get_trapezoids(traps, pset, HORIZONTAL); + + BOOST_CHECK_EQUAL(4, traps.size()); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(polygon_set_data_test3, T, test_types) { + typedef point_data<T> point_type; + typedef polygon_data<T> polygon_type; + typedef polygon_with_holes_data<T> polygon_with_holes_type; + typedef polygon_set_data<T> polygon_set_type; + + std::vector<point_type> data; + data.push_back(point_type(0,0)); + data.push_back(point_type(6,0)); + data.push_back(point_type(6,4)); + data.push_back(point_type(4,6)); + data.push_back(point_type(0,6)); + data.push_back(point_type(0,0)); + data.push_back(point_type(4,4)); + data.push_back(point_type(5,4)); + + polygon_type polygon(data.begin(), data.end()); + polygon_set_type pset; + pset += polygon; + + BOOST_CHECK_EQUAL(32.0, area(polygon)); + BOOST_CHECK_EQUAL(32.0, area(polygon)); +} |