// Boost.Geometry (aka GGL, Generic Geometry Library) test file // // Copyright Barend Gehrels 2007-2009, Geodan, Amsterdam, the Netherlands // Copyright Bruno Lalande 2008, 2009 // Use, modification and distribution is subject to 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) #include #include #include #include #include #include #include #include #include // The closing iterator should also work on normal std:: containers void test_non_geometry() { std::vector v; v.push_back(1); v.push_back(2); v.push_back(3); typedef bg::closing_iterator < std::vector const > closing_iterator; closing_iterator it(v); closing_iterator end(v, true); std::ostringstream out; for (; it != end; ++it) { out << *it; } BOOST_CHECK_EQUAL(out.str(), "1231"); } template void test_geometry(std::string const& wkt) { Geometry geometry; bg::read_wkt(wkt, geometry); typedef bg::closing_iterator closing_iterator; // 1. Test normal behaviour { closing_iterator it(geometry); closing_iterator end(geometry, true); std::ostringstream out; for (; it != end; ++it) { out << " " << bg::get<0>(*it) << bg::get<1>(*it); } BOOST_CHECK_EQUAL(out.str(), " 11 14 44 41 11"); // Check compilations, it is (since Oct 2010) random access it--; --it; it += 2; it -= 2; } // 2: check copy behaviour { typedef typename boost::range_iterator::type normal_iterator; Geometry copy; std::copy( closing_iterator(geometry), closing_iterator(geometry, true), std::back_inserter(copy)); std::ostringstream out; for (normal_iterator cit = boost::begin(copy); cit != boost::end(copy); ++cit) { out << " " << bg::get<0>(*cit) << bg::get<1>(*cit); } BOOST_CHECK_EQUAL(out.str(), " 11 14 44 41 11"); } } template void test_all() { test_non_geometry(); test_geometry >("POLYGON((1 1,1 4,4 4,4 1))"); } int test_main(int, char* []) { test_all >(); return 0; }