diff options
Diffstat (limited to 'src/boost/libs/geometry/test/cs_undefined')
12 files changed, 1035 insertions, 0 deletions
diff --git a/src/boost/libs/geometry/test/cs_undefined/Jamfile.v2 b/src/boost/libs/geometry/test/cs_undefined/Jamfile.v2 new file mode 100644 index 00000000..b5e53d91 --- /dev/null +++ b/src/boost/libs/geometry/test/cs_undefined/Jamfile.v2 @@ -0,0 +1,21 @@ +# Boost.Geometry +# +# Copyright (c) 2019, Oracle and/or its affiliates. +# +# Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle +# +# Licensed under the Boost Software License version 1.0. +# http://www.boost.org/LICENSE_1_0.txt) + +test-suite boost-geometry-cs_undefined + : + [ compile distance.cpp : : csundef_distance ] + [ compile envelope_expand.cpp : : csundef_envelope_expand ] + [ compile index.cpp : : csundef_index ] + [ compile is.cpp : : csundef_is ] + [ compile measure.cpp : : csundef_measure ] + [ compile other.cpp : : csundef_other ] + [ compile relops1.cpp : : csundef_relops1 ] + [ compile relops2.cpp : : csundef_relops2 ] + [ compile setops.cpp : : csundef_setops ] + ; diff --git a/src/boost/libs/geometry/test/cs_undefined/common.hpp b/src/boost/libs/geometry/test/cs_undefined/common.hpp new file mode 100644 index 00000000..92cb8068 --- /dev/null +++ b/src/boost/libs/geometry/test/cs_undefined/common.hpp @@ -0,0 +1,69 @@ +// Boost.Geometry + +// Copyright (c) 2019, Oracle and/or its affiliates. + +// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + +// Licensed under the Boost Software License version 1.0. +// http://www.boost.org/users/license.html + +#ifndef BOOST_GEOMETRY_TEST_CS_UNDEFINED_COMMON_HPP +#define BOOST_GEOMETRY_TEST_CS_UNDEFINED_COMMON_HPP + +#include <geometry_test_common.hpp> + +#include <boost/geometry/geometries/geometries.hpp> + +#include <boost/geometry/strategies/strategies.hpp> + +#include <boost/geometry/io/wkt/read.hpp> + +struct geom +{ + //typedef bg::model::point<double, 2, bg::cs::cartesian> point; + typedef bg::model::point<double, 2, bg::cs::undefined> point; + typedef bg::model::box<point> box; + typedef bg::model::segment<point> segment; + typedef bg::model::linestring<point> linestring; + typedef bg::model::ring<point> ring; + typedef bg::model::polygon<point> polygon; + typedef bg::model::multi_linestring<linestring> multi_linestring; + typedef bg::model::multi_polygon<polygon> multi_polygon; + typedef bg::model::multi_point<point> multi_point; + + geom() + { + pt = point(0, 0); + b = box(point(-1, -1), point(1, 1)); + s = segment(point(0, 0), point(1, 1)); + ls.push_back(point(0, 0)); + ls.push_back(point(1, 1)); + ls.push_back(point(1.1, 1.1)); + r.push_back(point(0, 0)); + r.push_back(point(0, 1)); + r.push_back(point(1, 1)); + r.push_back(point(1, 0)); + r.push_back(point(0, 0)); + po.outer() = r; + po.inners().push_back(ring()); + po.inners().back().push_back(point(0, 0)); + po.inners().back().push_back(point(0.2, 0.1)); + po.inners().back().push_back(point(0.1, 0.2)); + po.inners().back().push_back(point(0, 0)); + mls.push_back(ls); + mpo.push_back(po); + mpt.push_back(pt); + } + + point pt; + box b; + segment s; + linestring ls; + ring r; + polygon po; + multi_linestring mls; + multi_polygon mpo; + multi_point mpt; +}; + +#endif // BOOST_GEOMETRY_TEST_CS_UNDEFINED_COMMON_HPP diff --git a/src/boost/libs/geometry/test/cs_undefined/distance.cpp b/src/boost/libs/geometry/test/cs_undefined/distance.cpp new file mode 100644 index 00000000..8bd03a44 --- /dev/null +++ b/src/boost/libs/geometry/test/cs_undefined/distance.cpp @@ -0,0 +1,113 @@ +// Boost.Geometry + +// Copyright (c) 2019, Oracle and/or its affiliates. + +// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + +// Licensed under the Boost Software License version 1.0. +// http://www.boost.org/users/license.html + +#include "common.hpp" + +#include <boost/geometry/algorithms/distance.hpp> + +int test_main(int, char*[]) +{ + geom g; + + bg::distance(g.pt, g.pt, bg::strategy::distance::pythagoras<>()); + bg::distance(g.pt, g.pt, bg::strategy::distance::haversine<>()); + bg::distance(g.pt, g.pt, bg::strategy::distance::geographic<>()); + bg::distance(g.pt, g.mpt, bg::strategy::distance::pythagoras<>()); + bg::distance(g.pt, g.mpt, bg::strategy::distance::haversine<>()); + bg::distance(g.pt, g.mpt, bg::strategy::distance::geographic<>()); + bg::distance(g.mpt, g.mpt, bg::strategy::distance::pythagoras<>()); + bg::distance(g.mpt, g.mpt, bg::strategy::distance::haversine<>()); + bg::distance(g.mpt, g.mpt, bg::strategy::distance::geographic<>()); + bg::distance(g.pt, g.ls, bg::strategy::distance::projected_point<>()); + bg::distance(g.pt, g.ls, bg::strategy::distance::cross_track<>()); + bg::distance(g.pt, g.ls, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.pt, g.mls, bg::strategy::distance::projected_point<>()); + bg::distance(g.pt, g.mls, bg::strategy::distance::cross_track<>()); + bg::distance(g.pt, g.mls, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.mpt, g.ls, bg::strategy::distance::projected_point<>()); + bg::distance(g.mpt, g.ls, bg::strategy::distance::cross_track<>()); + bg::distance(g.mpt, g.ls, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.mpt, g.mls, bg::strategy::distance::projected_point<>()); + bg::distance(g.mpt, g.mls, bg::strategy::distance::cross_track<>()); + bg::distance(g.mpt, g.mls, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.ls, g.ls, bg::strategy::distance::projected_point<>()); + bg::distance(g.ls, g.ls, bg::strategy::distance::cross_track<>()); + bg::distance(g.ls, g.ls, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.ls, g.mls, bg::strategy::distance::projected_point<>()); + bg::distance(g.ls, g.mls, bg::strategy::distance::cross_track<>()); + bg::distance(g.ls, g.mls, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.mls, g.mls, bg::strategy::distance::projected_point<>()); + bg::distance(g.mls, g.mls, bg::strategy::distance::cross_track<>()); + bg::distance(g.mls, g.mls, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.pt, g.r, bg::strategy::distance::projected_point<>()); + bg::distance(g.pt, g.r, bg::strategy::distance::cross_track<>()); + bg::distance(g.pt, g.r, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.pt, g.po, bg::strategy::distance::projected_point<>()); + bg::distance(g.pt, g.po, bg::strategy::distance::cross_track<>()); + bg::distance(g.pt, g.po, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.pt, g.mpo, bg::strategy::distance::projected_point<>()); + bg::distance(g.pt, g.mpo, bg::strategy::distance::cross_track<>()); + bg::distance(g.pt, g.mpo, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.mpt, g.r, bg::strategy::distance::projected_point<>()); + bg::distance(g.mpt, g.r, bg::strategy::distance::cross_track<>()); + bg::distance(g.mpt, g.r, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.mpt, g.po, bg::strategy::distance::projected_point<>()); + bg::distance(g.mpt, g.po, bg::strategy::distance::cross_track<>()); + bg::distance(g.mpt, g.po, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.mpt, g.mpo, bg::strategy::distance::projected_point<>()); + bg::distance(g.mpt, g.mpo, bg::strategy::distance::cross_track<>()); + bg::distance(g.mpt, g.mpo, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.ls, g.r, bg::strategy::distance::projected_point<>()); + bg::distance(g.ls, g.r, bg::strategy::distance::cross_track<>()); + bg::distance(g.ls, g.r, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.ls, g.po, bg::strategy::distance::projected_point<>()); + bg::distance(g.ls, g.po, bg::strategy::distance::cross_track<>()); + bg::distance(g.ls, g.po, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.ls, g.mpo, bg::strategy::distance::projected_point<>()); + bg::distance(g.ls, g.mpo, bg::strategy::distance::cross_track<>()); + bg::distance(g.ls, g.mpo, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.mls, g.r, bg::strategy::distance::projected_point<>()); + bg::distance(g.mls, g.r, bg::strategy::distance::cross_track<>()); + bg::distance(g.mls, g.r, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.mls, g.po, bg::strategy::distance::projected_point<>()); + bg::distance(g.mls, g.po, bg::strategy::distance::cross_track<>()); + bg::distance(g.mls, g.po, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.mls, g.mpo, bg::strategy::distance::projected_point<>()); + bg::distance(g.mls, g.mpo, bg::strategy::distance::cross_track<>()); + bg::distance(g.mls, g.mpo, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.r, g.r, bg::strategy::distance::projected_point<>()); + bg::distance(g.r, g.r, bg::strategy::distance::cross_track<>()); + bg::distance(g.r, g.r, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.r, g.po, bg::strategy::distance::projected_point<>()); + bg::distance(g.r, g.po, bg::strategy::distance::cross_track<>()); + bg::distance(g.r, g.po, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.r, g.mpo, bg::strategy::distance::projected_point<>()); + bg::distance(g.r, g.mpo, bg::strategy::distance::cross_track<>()); + bg::distance(g.r, g.mpo, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.po, g.r, bg::strategy::distance::projected_point<>()); + bg::distance(g.po, g.r, bg::strategy::distance::cross_track<>()); + bg::distance(g.po, g.r, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.po, g.po, bg::strategy::distance::projected_point<>()); + bg::distance(g.po, g.po, bg::strategy::distance::cross_track<>()); + bg::distance(g.po, g.po, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.po, g.mpo, bg::strategy::distance::projected_point<>()); + bg::distance(g.po, g.mpo, bg::strategy::distance::cross_track<>()); + bg::distance(g.po, g.mpo, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.mpo, g.r, bg::strategy::distance::projected_point<>()); + bg::distance(g.mpo, g.r, bg::strategy::distance::cross_track<>()); + bg::distance(g.mpo, g.r, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.mpo, g.po, bg::strategy::distance::projected_point<>()); + bg::distance(g.mpo, g.po, bg::strategy::distance::cross_track<>()); + bg::distance(g.mpo, g.po, bg::strategy::distance::geographic_cross_track<>()); + bg::distance(g.mpo, g.mpo, bg::strategy::distance::projected_point<>()); + bg::distance(g.mpo, g.mpo, bg::strategy::distance::cross_track<>()); + bg::distance(g.mpo, g.mpo, bg::strategy::distance::geographic_cross_track<>()); + + return 0; +} diff --git a/src/boost/libs/geometry/test/cs_undefined/envelope_expand.cpp b/src/boost/libs/geometry/test/cs_undefined/envelope_expand.cpp new file mode 100644 index 00000000..5d16e6f2 --- /dev/null +++ b/src/boost/libs/geometry/test/cs_undefined/envelope_expand.cpp @@ -0,0 +1,53 @@ +// Boost.Geometry + +// Copyright (c) 2019, Oracle and/or its affiliates. + +// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + +// Licensed under the Boost Software License version 1.0. +// http://www.boost.org/users/license.html + +#include "common.hpp" + +#include <boost/geometry/algorithms/envelope.hpp> +#include <boost/geometry/algorithms/expand.hpp> + +int test_main(int, char*[]) +{ + geom g; + + bg::expand(g.b, g.pt, bg::strategy::expand::cartesian_point()); + bg::expand(g.b, g.pt, bg::strategy::expand::spherical_point()); + bg::expand(g.b, g.b, bg::strategy::expand::cartesian_box()); + bg::expand(g.b, g.b, bg::strategy::expand::spherical_box()); + bg::expand(g.b, g.s, bg::strategy::expand::cartesian_segment()); + bg::expand(g.b, g.s, bg::strategy::expand::spherical_segment<>()); + bg::expand(g.b, g.s, bg::strategy::expand::geographic_segment<>()); + + bg::envelope(g.pt, g.b, bg::strategy::envelope::cartesian_point()); + bg::envelope(g.pt, g.b, bg::strategy::envelope::spherical_point()); + bg::envelope(g.b, g.b, bg::strategy::envelope::cartesian_box()); + bg::envelope(g.b, g.b, bg::strategy::envelope::spherical_box()); + bg::envelope(g.s, g.b, bg::strategy::envelope::cartesian_segment<>()); + bg::envelope(g.s, g.b, bg::strategy::envelope::spherical_segment<>()); + bg::envelope(g.s, g.b, bg::strategy::envelope::geographic_segment<>()); + bg::envelope(g.ls, g.b, bg::strategy::envelope::cartesian<>()); + bg::envelope(g.ls, g.b, bg::strategy::envelope::spherical<>()); + bg::envelope(g.ls, g.b, bg::strategy::envelope::geographic<>()); + bg::envelope(g.r, g.b, bg::strategy::envelope::cartesian<>()); + bg::envelope(g.r, g.b, bg::strategy::envelope::spherical<>()); + bg::envelope(g.r, g.b, bg::strategy::envelope::geographic<>()); + bg::envelope(g.po, g.b, bg::strategy::envelope::cartesian<>()); + bg::envelope(g.po, g.b, bg::strategy::envelope::spherical<>()); + bg::envelope(g.po, g.b, bg::strategy::envelope::geographic<>()); + bg::envelope(g.mls, g.b, bg::strategy::envelope::cartesian<>()); + bg::envelope(g.mls, g.b, bg::strategy::envelope::spherical<>()); + bg::envelope(g.mls, g.b, bg::strategy::envelope::geographic<>()); + bg::envelope(g.mpo, g.b, bg::strategy::envelope::cartesian<>()); + bg::envelope(g.mpo, g.b, bg::strategy::envelope::spherical<>()); + bg::envelope(g.mpo, g.b, bg::strategy::envelope::geographic<>()); + bg::envelope(g.mpt, g.b, bg::strategy::envelope::cartesian_multipoint()); + bg::envelope(g.mpt, g.b, bg::strategy::envelope::spherical_multipoint()); + + return 0; +} diff --git a/src/boost/libs/geometry/test/cs_undefined/index.cpp b/src/boost/libs/geometry/test/cs_undefined/index.cpp new file mode 100644 index 00000000..00818704 --- /dev/null +++ b/src/boost/libs/geometry/test/cs_undefined/index.cpp @@ -0,0 +1,101 @@ +// Boost.Geometry + +// Copyright (c) 2019, Oracle and/or its affiliates. + +// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + +// Licensed under the Boost Software License version 1.0. +// http://www.boost.org/users/license.html + +#include "common.hpp" + +// These includes are required for the following code to compile. +// This is probably wrong. +#include <boost/geometry/algorithms/covered_by.hpp> +#include <boost/geometry/algorithms/disjoint.hpp> +#include <boost/geometry/algorithms/equals.hpp> +#include <boost/geometry/algorithms/intersects.hpp> + +#include <boost/geometry/index/rtree.hpp> + +#include <vector> + +namespace bgi = boost::geometry::index; + +template +< + typename VG, typename QG, + typename VTag = typename bg::tag<VG>::type, + typename QTag = typename bg::tag<QG>::type +> +struct call_query +{ + template <typename Rtree, typename Res> + static inline void apply(Rtree const& , Res const& ) + {} +}; + +template <typename VG, typename QG> +struct call_query<VG, QG, bg::box_tag, bg::point_tag> +{ + template <typename Rtree> + static inline void apply(Rtree const& rtree, QG const& qg) + { + std::vector<VG> res; + rtree.query(bgi::intersects(qg), std::back_inserter(res)); + } +}; + +template <typename G, typename P> +inline void rtree_test(G const& g, P const& p) +{ + { + bgi::rtree<G, P> rtree; + } + + std::vector<G> de2(100, g); + + bgi::rtree<G, P> rtree(de2, p); + rtree.insert(g); + rtree.remove(g); + rtree.count(g); + + call_query<G, geom::point>::apply(rtree, geom::point(0, 0)); +} + +int test_main(int, char*[]) +{ + geom g; + + rtree_test(g.pt, bgi::parameters<bgi::linear<4>, bg::strategy::index::cartesian<> >()); + rtree_test(g.pt, bgi::parameters<bgi::quadratic<4>, bg::strategy::index::cartesian<> >()); + rtree_test(g.pt, bgi::parameters<bgi::rstar<4>, bg::strategy::index::cartesian<> >()); + rtree_test(g.b, bgi::parameters<bgi::linear<4>, bg::strategy::index::cartesian<> >()); + rtree_test(g.b, bgi::parameters<bgi::quadratic<4>, bg::strategy::index::cartesian<> >()); + rtree_test(g.b, bgi::parameters<bgi::rstar<4>, bg::strategy::index::cartesian<> >()); + rtree_test(g.s, bgi::parameters<bgi::linear<4>, bg::strategy::index::cartesian<> >()); + rtree_test(g.s, bgi::parameters<bgi::quadratic<4>, bg::strategy::index::cartesian<> >()); + rtree_test(g.s, bgi::parameters<bgi::rstar<4>, bg::strategy::index::cartesian<> >()); + + rtree_test(g.pt, bgi::parameters<bgi::linear<4>, bg::strategy::index::spherical<> >()); + rtree_test(g.pt, bgi::parameters<bgi::quadratic<4>, bg::strategy::index::spherical<> >()); + rtree_test(g.pt, bgi::parameters<bgi::rstar<4>, bg::strategy::index::spherical<> >()); + rtree_test(g.b, bgi::parameters<bgi::linear<4>, bg::strategy::index::spherical<> >()); + rtree_test(g.b, bgi::parameters<bgi::quadratic<4>, bg::strategy::index::spherical<> >()); + rtree_test(g.b, bgi::parameters<bgi::rstar<4>, bg::strategy::index::spherical<> >()); + rtree_test(g.s, bgi::parameters<bgi::linear<4>, bg::strategy::index::spherical<> >()); + rtree_test(g.s, bgi::parameters<bgi::quadratic<4>, bg::strategy::index::spherical<> >()); + rtree_test(g.s, bgi::parameters<bgi::rstar<4>, bg::strategy::index::spherical<> >()); + + rtree_test(g.pt, bgi::parameters<bgi::linear<4>, bg::strategy::index::geographic<> >()); + rtree_test(g.pt, bgi::parameters<bgi::quadratic<4>, bg::strategy::index::geographic<> >()); + rtree_test(g.pt, bgi::parameters<bgi::rstar<4>, bg::strategy::index::geographic<> >()); + rtree_test(g.b, bgi::parameters<bgi::linear<4>, bg::strategy::index::geographic<> >()); + rtree_test(g.b, bgi::parameters<bgi::quadratic<4>, bg::strategy::index::geographic<> >()); + rtree_test(g.b, bgi::parameters<bgi::rstar<4>, bg::strategy::index::geographic<> >()); + rtree_test(g.s, bgi::parameters<bgi::linear<4>, bg::strategy::index::geographic<> >()); + rtree_test(g.s, bgi::parameters<bgi::quadratic<4>, bg::strategy::index::geographic<> >()); + rtree_test(g.s, bgi::parameters<bgi::rstar<4>, bg::strategy::index::geographic<> >()); + + return 0; +} diff --git a/src/boost/libs/geometry/test/cs_undefined/is.cpp b/src/boost/libs/geometry/test/cs_undefined/is.cpp new file mode 100644 index 00000000..c043d301 --- /dev/null +++ b/src/boost/libs/geometry/test/cs_undefined/is.cpp @@ -0,0 +1,44 @@ +// Boost.Geometry + +// Copyright (c) 2019, Oracle and/or its affiliates. + +// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + +// Licensed under the Boost Software License version 1.0. +// http://www.boost.org/users/license.html + +#include "common.hpp" + +#include <boost/geometry/algorithms/is_simple.hpp> +#include <boost/geometry/algorithms/is_valid.hpp> + +template <typename G, typename S> +inline void is(G const& g, S const& s) +{ + bg::is_simple(g, s); + bg::is_valid(g, s); +} + +template <typename G> +inline void is_x(G const& g) +{ + ::is(g, bg::strategy::intersection::cartesian_segments<>()); + ::is(g, bg::strategy::intersection::spherical_segments<>()); + ::is(g, bg::strategy::intersection::geographic_segments<>()); +} + +int test_main(int, char*[]) +{ + geom g; + + ::is_x(g.pt); + ::is_x(g.mpt); + ::is_x(g.s); + ::is_x(g.ls); + ::is_x(g.mls); + ::is_x(g.r); + ::is_x(g.po); + ::is_x(g.mpo); + + return 0; +} diff --git a/src/boost/libs/geometry/test/cs_undefined/measure.cpp b/src/boost/libs/geometry/test/cs_undefined/measure.cpp new file mode 100644 index 00000000..40d8a4f9 --- /dev/null +++ b/src/boost/libs/geometry/test/cs_undefined/measure.cpp @@ -0,0 +1,51 @@ +// Boost.Geometry + +// Copyright (c) 2019, Oracle and/or its affiliates. + +// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + +// Licensed under the Boost Software License version 1.0. +// http://www.boost.org/users/license.html + +#include "common.hpp" + +#include <boost/geometry/algorithms/area.hpp> +#include <boost/geometry/algorithms/length.hpp> +#include <boost/geometry/algorithms/perimeter.hpp> + +int test_main(int, char*[]) +{ + geom g; + + bg::area(g.r, bg::strategy::area::cartesian<>()); + bg::area(g.r, bg::strategy::area::spherical<>()); + bg::area(g.r, bg::strategy::area::geographic<>()); + bg::area(g.po, bg::strategy::area::cartesian<>()); + bg::area(g.po, bg::strategy::area::spherical<>()); + bg::area(g.po, bg::strategy::area::geographic<>()); + bg::area(g.mpo, bg::strategy::area::cartesian<>()); + bg::area(g.mpo, bg::strategy::area::spherical<>()); + bg::area(g.mpo, bg::strategy::area::geographic<>()); + + bg::length(g.s, bg::strategy::distance::pythagoras<>()); + bg::length(g.s, bg::strategy::distance::haversine<>()); + bg::length(g.s, bg::strategy::distance::geographic<>()); + bg::length(g.ls, bg::strategy::distance::pythagoras<>()); + bg::length(g.ls, bg::strategy::distance::haversine<>()); + bg::length(g.ls, bg::strategy::distance::geographic<>()); + bg::length(g.mls, bg::strategy::distance::pythagoras<>()); + bg::length(g.mls, bg::strategy::distance::haversine<>()); + bg::length(g.mls, bg::strategy::distance::geographic<>()); + + bg::perimeter(g.r, bg::strategy::distance::pythagoras<>()); + bg::perimeter(g.r, bg::strategy::distance::haversine<>()); + bg::perimeter(g.r, bg::strategy::distance::geographic<>()); + bg::perimeter(g.po, bg::strategy::distance::pythagoras<>()); + bg::perimeter(g.po, bg::strategy::distance::haversine<>()); + bg::perimeter(g.po, bg::strategy::distance::geographic<>()); + bg::perimeter(g.mpo, bg::strategy::distance::pythagoras<>()); + bg::perimeter(g.mpo, bg::strategy::distance::haversine<>()); + bg::perimeter(g.mpo, bg::strategy::distance::geographic<>()); + + return 0; +} diff --git a/src/boost/libs/geometry/test/cs_undefined/other.cpp b/src/boost/libs/geometry/test/cs_undefined/other.cpp new file mode 100644 index 00000000..fe2ad650 --- /dev/null +++ b/src/boost/libs/geometry/test/cs_undefined/other.cpp @@ -0,0 +1,40 @@ +// Boost.Geometry + +// Copyright (c) 2019, Oracle and/or its affiliates. + +// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + +// Licensed under the Boost Software License version 1.0. +// http://www.boost.org/users/license.html + +#include "common.hpp" + +#include <boost/geometry/algorithms/centroid.hpp> +#include <boost/geometry/algorithms/simplify.hpp> + +template <typename G> +inline void simplify(G const& g1, G & g2) +{ + bg::simplify(g1, g2, 1, bg::strategy::simplify::douglas_peucker<geom::point, bg::strategy::distance::projected_point<> >()); + bg::simplify(g1, g2, 1, bg::strategy::simplify::douglas_peucker<geom::point, bg::strategy::distance::cross_track<> >()); + + // TODO: douglas_peucker does not define a ctor taking distance strategy + // which is needed in geographic CS + bg::simplify(g1, g2, 1, bg::strategy::simplify::douglas_peucker<geom::point, bg::strategy::distance::geographic_cross_track<> >()); +} + +int test_main(int, char*[]) +{ + geom g, o; + + // this compiles but it shouldn't! + // internally default_strategy is defined as not_applicable_strategy for box + bg::centroid(g.b, o.pt); + + ::simplify(g.ls, o.ls); + // TODO: + //::simplify(g.r, o.r); // area (point order) strategy not propagated + //::simplify(g.po, o.po); // area (point order) strategy not propagated + + return 0; +} diff --git a/src/boost/libs/geometry/test/cs_undefined/relops1.cpp b/src/boost/libs/geometry/test/cs_undefined/relops1.cpp new file mode 100644 index 00000000..c22bb6b0 --- /dev/null +++ b/src/boost/libs/geometry/test/cs_undefined/relops1.cpp @@ -0,0 +1,50 @@ +// Boost.Geometry + +// Copyright (c) 2019, Oracle and/or its affiliates. + +// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + +// Licensed under the Boost Software License version 1.0. +// http://www.boost.org/users/license.html + +#include "test_relops.hpp" + +int test_main(int, char*[]) +{ + geom g; + + bg::disjoint(g.pt, g.b, bg::strategy::covered_by::cartesian_point_box()); + bg::disjoint(g.pt, g.b, bg::strategy::covered_by::spherical_point_box()); + bg::disjoint(g.b, g.b, bg::strategy::disjoint::cartesian_box_box()); + bg::disjoint(g.b, g.b, bg::strategy::disjoint::spherical_box_box()); + bg::within(g.pt, g.b, bg::strategy::within::cartesian_point_box()); + bg::within(g.pt, g.b, bg::strategy::within::spherical_point_box()); + bg::within(g.b, g.b, bg::strategy::within::cartesian_box_box()); + bg::within(g.b, g.b, bg::strategy::within::spherical_box_box()); + bg::covered_by(g.pt, g.b, bg::strategy::covered_by::cartesian_point_box()); + bg::covered_by(g.pt, g.b, bg::strategy::covered_by::spherical_point_box()); + bg::covered_by(g.b, g.b, bg::strategy::covered_by::cartesian_box_box()); + bg::covered_by(g.b, g.b, bg::strategy::covered_by::spherical_box_box()); + + // P/P + ::rel_pp(g.pt, g.pt); + ::rel_pp(g.pt, g.mpt); + ::rel_pp(g.mpt, g.mpt); + + // P/L + //::rel_ps(g.pt, g.s); // relate not implemented + ::rel_ps(g.pt, g.ls); + ::rel_ps(g.pt, g.mls); + //::rel_ps(g.mpt, g.s); // relate not implemented + ::rel_ps(g.mpt, g.ls); + ::rel_ps(g.mpt, g.mls); + // P/A + ::rel_ps(g.pt, g.r); + ::rel_ps(g.mpt, g.r); + ::rel_ps(g.pt, g.po); + ::rel_ps(g.mpt, g.po); + ::rel_ps(g.pt, g.mpo); + ::rel_ps(g.mpt, g.mpo); + + return 0; +} diff --git a/src/boost/libs/geometry/test/cs_undefined/relops2.cpp b/src/boost/libs/geometry/test/cs_undefined/relops2.cpp new file mode 100644 index 00000000..11f971b8 --- /dev/null +++ b/src/boost/libs/geometry/test/cs_undefined/relops2.cpp @@ -0,0 +1,48 @@ +// Boost.Geometry + +// Copyright (c) 2019, Oracle and/or its affiliates. + +// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + +// Licensed under the Boost Software License version 1.0. +// http://www.boost.org/users/license.html + +#include "test_relops.hpp" + +int test_main(int, char*[]) +{ + geom g; + + // L/L + //::rel_ss(g.s, g.s); // relate not implemented + //::rel_ss(g.s, g.ls); // relate not implemented + //::rel_ss(g.s, g.mls); // relate not implemented + //::rel_ss(g.ls, g.s); // relate not implemented + ::rel_ss(g.ls, g.ls); + ::rel_ss(g.ls, g.mls); + //::rel_ss(g.mls, g.s); // relate not implemented + ::rel_ss(g.mls, g.ls); + ::rel_ss(g.mls, g.mls); + // L/A + //::rel_ss(g.s, g.r); // relate not implemented + ::rel_ss(g.ls, g.r); + ::rel_ss(g.mls, g.r); + //::rel_ss(g.s, g.po); // relate not implemented + ::rel_ss(g.ls, g.po); + ::rel_ss(g.mls, g.po); + //::rel_ss(g.s, g.mpo); // relate not implemented + ::rel_ss(g.ls, g.mpo); + ::rel_ss(g.mls, g.mpo); + // A/A + ::rel_ss(g.r, g.r); + ::rel_ss(g.po, g.r); + ::rel_ss(g.mpo, g.r); + ::rel_ss(g.r, g.po); + ::rel_ss(g.po, g.po); + ::rel_ss(g.mpo, g.po); + ::rel_ss(g.r, g.mpo); + ::rel_ss(g.po, g.mpo); + ::rel_ss(g.mpo, g.mpo); + + return 0; +} diff --git a/src/boost/libs/geometry/test/cs_undefined/setops.cpp b/src/boost/libs/geometry/test/cs_undefined/setops.cpp new file mode 100644 index 00000000..d684214a --- /dev/null +++ b/src/boost/libs/geometry/test/cs_undefined/setops.cpp @@ -0,0 +1,281 @@ +// Boost.Geometry + +// Copyright (c) 2019, Oracle and/or its affiliates. + +// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + +// Licensed under the Boost Software License version 1.0. +// http://www.boost.org/users/license.html + +#include "common.hpp" + +#include <boost/geometry/algorithms/difference.hpp> +#include <boost/geometry/algorithms/intersection.hpp> +#include <boost/geometry/algorithms/sym_difference.hpp> +#include <boost/geometry/algorithms/union.hpp> + +template <typename G1, typename G2, typename G3, typename S> +inline void set_idsu(G1 const& g1, G2 const& g2, G3 & g3, S const& s) +{ + bg::intersection(g1, g2, g3, s); + bg::difference(g1, g2, g3, s); + bg::sym_difference(g1, g2, g3, s); + bg::union_(g1, g2, g3, s); +} + +template <typename G1, typename G2, typename G3, typename S> +inline void set_ids(G1 const& g1, G2 const& g2, G3 & g3, S const& s) +{ + bg::intersection(g1, g2, g3, s); + bg::difference(g1, g2, g3, s); + bg::sym_difference(g1, g2, g3, s); +} + +template <typename G1, typename G2, typename G3, typename S> +inline void set_id(G1 const& g1, G2 const& g2, G3 & g3, S const& s) +{ + bg::intersection(g1, g2, g3, s); + bg::difference(g1, g2, g3, s); +} + +template <typename G1, typename G2, typename G3, typename S> +inline void set_i(G1 const& g1, G2 const& g2, G3 & g3, S const& s) +{ + bg::intersection(g1, g2, g3, s); +} + +template <typename G1, typename G2, typename G3, typename S> +inline void set_d(G1 const& g1, G2 const& g2, G3 & g3, S const& s) +{ + bg::difference(g1, g2, g3, s); +} + +template <typename G1, typename G2, typename G3> +inline void set_idsu_pp(G1 const& g1, G2 const& g2, G3 & g3) +{ + ::set_idsu(g1, g2, g3, bg::strategy::within::cartesian_point_point()); + ::set_idsu(g1, g2, g3, bg::strategy::within::spherical_point_point()); +} + +template <typename G1, typename G2, typename G3> +inline void set_idsu_ps(G1 const& g1, G2 const& g2, G3 & g3) +{ + typedef typename bg::point_type<G1>::type point_type; + ::set_idsu(g1, g2, g3, bg::strategy::within::cartesian_winding<point_type>()); + ::set_idsu(g1, g2, g3, bg::strategy::within::spherical_winding<point_type>()); + ::set_idsu(g1, g2, g3, bg::strategy::within::geographic_winding<point_type>()); +} + +template <typename G1, typename G2, typename G3> +inline void set_idsu_ss(G1 const& g1, G2 const& g2, G3 & g3) +{ + ::set_idsu(g1, g2, g3, bg::strategy::intersection::cartesian_segments<>()); + ::set_idsu(g1, g2, g3, bg::strategy::intersection::spherical_segments<>()); + ::set_idsu(g1, g2, g3, bg::strategy::intersection::geographic_segments<>()); +} + +template <typename G1, typename G2, typename G3> +inline void set_ids_pp(G1 const& g1, G2 const& g2, G3 & g3) +{ + ::set_ids(g1, g2, g3, bg::strategy::within::cartesian_point_point()); + ::set_ids(g1, g2, g3, bg::strategy::within::spherical_point_point()); +} + +template <typename G1, typename G2, typename G3> +inline void set_ids_ps(G1 const& g1, G2 const& g2, G3 & g3) +{ + typedef typename bg::point_type<G1>::type point_type; + ::set_ids(g1, g2, g3, bg::strategy::within::cartesian_winding<point_type>()); + ::set_ids(g1, g2, g3, bg::strategy::within::spherical_winding<point_type>()); + ::set_ids(g1, g2, g3, bg::strategy::within::geographic_winding<point_type>()); +} + +template <typename G1, typename G2, typename G3> +inline void set_ids_ss(G1 const& g1, G2 const& g2, G3 & g3) +{ + ::set_ids(g1, g2, g3, bg::strategy::intersection::cartesian_segments<>()); + ::set_ids(g1, g2, g3, bg::strategy::intersection::spherical_segments<>()); + ::set_ids(g1, g2, g3, bg::strategy::intersection::geographic_segments<>()); +} + +template <typename G1, typename G2, typename G3> +inline void set_id_pp(G1 const& g1, G2 const& g2, G3 & g3) +{ + ::set_id(g1, g2, g3, bg::strategy::within::cartesian_point_point()); + ::set_id(g1, g2, g3, bg::strategy::within::spherical_point_point()); +} + +template <typename G1, typename G2, typename G3> +inline void set_id_ps(G1 const& g1, G2 const& g2, G3 & g3) +{ + typedef typename bg::point_type<G1>::type point_type; + ::set_id(g1, g2, g3, bg::strategy::within::cartesian_winding<point_type>()); + ::set_id(g1, g2, g3, bg::strategy::within::spherical_winding<point_type>()); + ::set_id(g1, g2, g3, bg::strategy::within::geographic_winding<point_type>()); +} + +template <typename G1, typename G2, typename G3> +inline void set_id_ss(G1 const& g1, G2 const& g2, G3 & g3) +{ + ::set_id(g1, g2, g3, bg::strategy::intersection::cartesian_segments<>()); + ::set_id(g1, g2, g3, bg::strategy::intersection::spherical_segments<>()); + ::set_id(g1, g2, g3, bg::strategy::intersection::geographic_segments<>()); +} + +template <typename G1, typename G2, typename G3> +inline void set_i_pp(G1 const& g1, G2 const& g2, G3 & g3) +{ + ::set_i(g1, g2, g3, bg::strategy::within::cartesian_point_point()); + ::set_i(g1, g2, g3, bg::strategy::within::spherical_point_point()); +} + +template <typename G1, typename G2, typename G3> +inline void set_i_ps(G1 const& g1, G2 const& g2, G3 & g3) +{ + typedef typename bg::point_type<G1>::type point_type; + ::set_i(g1, g2, g3, bg::strategy::within::cartesian_winding<point_type>()); + ::set_i(g1, g2, g3, bg::strategy::within::spherical_winding<point_type>()); + ::set_i(g1, g2, g3, bg::strategy::within::geographic_winding<point_type>()); +} + +template <typename G1, typename G2, typename G3> +inline void set_i_ss(G1 const& g1, G2 const& g2, G3 & g3) +{ + ::set_i(g1, g2, g3, bg::strategy::intersection::cartesian_segments<>()); + ::set_i(g1, g2, g3, bg::strategy::intersection::spherical_segments<>()); + ::set_i(g1, g2, g3, bg::strategy::intersection::geographic_segments<>()); +} + +template <typename G1, typename G2, typename G3> +inline void set_d_pp(G1 const& g1, G2 const& g2, G3 & g3) +{ + ::set_d(g1, g2, g3, bg::strategy::within::cartesian_point_point()); + ::set_d(g1, g2, g3, bg::strategy::within::spherical_point_point()); +} + +template <typename G1, typename G2, typename G3> +inline void set_d_ps(G1 const& g1, G2 const& g2, G3 & g3) +{ + typedef typename bg::point_type<G1>::type point_type; + ::set_d(g1, g2, g3, bg::strategy::within::cartesian_winding<point_type>()); + ::set_d(g1, g2, g3, bg::strategy::within::spherical_winding<point_type>()); + ::set_d(g1, g2, g3, bg::strategy::within::geographic_winding<point_type>()); +} + +template <typename G1, typename G2, typename G3> +inline void set_d_ss(G1 const& g1, G2 const& g2, G3 & g3) +{ + ::set_d(g1, g2, g3, bg::strategy::intersection::cartesian_segments<>()); + ::set_d(g1, g2, g3, bg::strategy::intersection::spherical_segments<>()); + ::set_d(g1, g2, g3, bg::strategy::intersection::geographic_segments<>()); +} + +int test_main(int, char*[]) +{ + geom g; + + // P/P->P + ::set_idsu_pp(g.pt, g.pt, g.mpt); + ::set_idsu_pp(g.pt, g.mpt, g.mpt); + ::set_idsu_pp(g.mpt, g.mpt, g.mpt); + + // P/L->P + ::set_id_ps(g.pt, g.s, g.mpt); + ::set_id_ps(g.pt, g.ls, g.mpt); + ::set_id_ps(g.pt, g.mls, g.mpt); + ::set_id_ps(g.mpt, g.s, g.mpt); + ::set_id_ps(g.mpt, g.ls, g.mpt); + ::set_id_ps(g.mpt, g.mls, g.mpt); + + // P/A->P + // no intersection nor difference + //::set_id_ps(g.pt, g.r, g.mpt); + //::set_id_ps(g.pt, g.po, g.mpt); + //::set_id_ps(g.pt, g.mpo, g.mpt); + //::set_id_ps(g.mpt, g.r, g.mpt); + //::set_id_ps(g.mpt, g.po, g.mpt); + //::set_id_ps(g.mpt, g.mpo, g.mpt); + + // L/L->P + ::set_ids_ss(g.s, g.s, g.mpt); + //::set_i_ss(g.s, g.ls, g.mpt); // no intersection nor difference + //::set_i_ss(g.s, g.mls, g.mpt); // no intersection nor difference + //::set_i_ss(g.ls, g.s, g.mpt); // no intersection nor difference + ::set_ids_ss(g.ls, g.ls, g.mpt); + ::set_i_ss(g.ls, g.mls, g.mpt); // no difference nor sym_difference + //::set_i_ss(g.mls, g.s, g.mpt); // no intersection nor difference + ::set_i_ss(g.mls, g.ls, g.mpt); // no difference nor sym_difference + ::set_ids_ss(g.mls, g.mls, g.mpt); + + // L/L->L + //::set_ids_ss(g.s, g.s, g.mls); // union not implemented, missing specialization + //::set_idsu_ss(g.s, g.ls, g.mls); // missing specialization + //::set_idsu_ss(g.s, g.mls, g.mls); // missing specialization + //::set_idsu_ss(g.ls, g.s, g.mls); // missing specialization + ::set_idsu_ss(g.ls, g.ls, g.mls); + ::set_idsu_ss(g.ls, g.mls, g.mls); + //::set_idsu_ss(g.mls, g.s, g.mls); // missing specialization + ::set_idsu_ss(g.mls, g.ls, g.mls); + ::set_idsu_ss(g.mls, g.mls, g.mls); + + // S/B->L ? + + // L/B->L ? + + // L/A->P + //::set_ids_ss(g.s, g.r, g.mpt); // no intersection + //::set_ids_ss(g.s, g.po, g.mpt); // no intersection + //::set_ids_ss(g.s, g.mpo, g.mpt); // no intersection + ::set_ids_ss(g.ls, g.r, g.mpt); + ::set_ids_ss(g.ls, g.po, g.mpt); + ::set_ids_ss(g.ls, g.mpo, g.mpt); + ::set_ids_ss(g.mls, g.r, g.mpt); + ::set_ids_ss(g.mls, g.po, g.mpt); + ::set_ids_ss(g.mls, g.mpo, g.mpt); + + // L/A->L + //::set_id_ss(g.s, g.r, g.mls); // no intersection + //::set_id_ss(g.s, g.po, g.mls); // no intersection + //::set_id_ss(g.s, g.mpo, g.mls); // no intersection + ::set_id_ss(g.ls, g.r, g.mls); + ::set_id_ss(g.ls, g.po, g.mls); + ::set_id_ss(g.ls, g.mpo, g.mls); + ::set_id_ss(g.mls, g.r, g.mls); + ::set_id_ss(g.mls, g.po, g.mls); + ::set_id_ss(g.mls, g.mpo, g.mls); + + // A/A->P + ::set_i_ss(g.r, g.r, g.mpt); + ::set_i_ss(g.r, g.po, g.mpt); + ::set_i_ss(g.r, g.mpo, g.mpt); + ::set_i_ss(g.po, g.r, g.mpt); + ::set_i_ss(g.po, g.po, g.mpt); + ::set_i_ss(g.po, g.mpo, g.mpt); + ::set_i_ss(g.mpo, g.r, g.mpt); + ::set_i_ss(g.mpo, g.po, g.mpt); + ::set_i_ss(g.mpo, g.mpo, g.mpt); + + // A/A->L + ::set_i_ss(g.r, g.r, g.mls); + ::set_i_ss(g.r, g.po, g.mls); + ::set_i_ss(g.r, g.mpo, g.mls); + ::set_i_ss(g.po, g.r, g.mls); + ::set_i_ss(g.po, g.po, g.mls); + ::set_i_ss(g.po, g.mpo, g.mls); + ::set_i_ss(g.mpo, g.r, g.mls); + ::set_i_ss(g.mpo, g.po, g.mls); + ::set_i_ss(g.mpo, g.mpo, g.mls); + + // A/A->A + ::set_idsu_ss(g.r, g.r, g.mpo); + ::set_idsu_ss(g.r, g.po, g.mpo); + ::set_idsu_ss(g.r, g.mpo, g.mpo); + ::set_idsu_ss(g.po, g.r, g.mpo); + ::set_idsu_ss(g.po, g.po, g.mpo); + ::set_idsu_ss(g.po, g.mpo, g.mpo); + ::set_idsu_ss(g.mpo, g.r, g.mpo); + ::set_idsu_ss(g.mpo, g.po, g.mpo); + ::set_idsu_ss(g.mpo, g.mpo, g.mpo); + + return 0; +} diff --git a/src/boost/libs/geometry/test/cs_undefined/test_relops.hpp b/src/boost/libs/geometry/test/cs_undefined/test_relops.hpp new file mode 100644 index 00000000..7a366bcd --- /dev/null +++ b/src/boost/libs/geometry/test/cs_undefined/test_relops.hpp @@ -0,0 +1,164 @@ +// Boost.Geometry + +// Copyright (c) 2019, Oracle and/or its affiliates. + +// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + +// Licensed under the Boost Software License version 1.0. +// http://www.boost.org/users/license.html + +#ifndef BOOST_GEOMETRY_TEST_CS_UNDEFINED_TEST_RELOPS_HPP +#define BOOST_GEOMETRY_TEST_CS_UNDEFINED_TEST_RELOPS_HPP + +#include "common.hpp" + +#include <boost/geometry/algorithms/covered_by.hpp> +#include <boost/geometry/algorithms/crosses.hpp> +#include <boost/geometry/algorithms/disjoint.hpp> +#include <boost/geometry/algorithms/equals.hpp> +#include <boost/geometry/algorithms/intersects.hpp> +#include <boost/geometry/algorithms/overlaps.hpp> +#include <boost/geometry/algorithms/relate.hpp> +#include <boost/geometry/algorithms/relation.hpp> +#include <boost/geometry/algorithms/touches.hpp> +#include <boost/geometry/algorithms/within.hpp> + +template +< + typename G1, + typename G2, + std::size_t Dim1 = bg::topological_dimension<G1>::value, + std::size_t Dim2 = bg::topological_dimension<G2>::value +> +struct call_equals +{ + template <typename S> + static void apply(G1 const& g1, G2 const& g2, S const& s) {} +}; + +template <typename G1, typename G2, std::size_t Dim> +struct call_equals<G1, G2, Dim, Dim> +{ + template <typename S> + static void apply(G1 const& g1, G2 const& g2, S const& s) + { + bg::equals(g1, g2, s); + } +}; + +template +< + typename G1, + typename G2, + std::size_t Dim1 = bg::topological_dimension<G1>::value, + std::size_t Dim2 = bg::topological_dimension<G2>::value +> +struct call_overlaps +{ + template <typename S> + static void apply(G1 const& g1, G2 const& g2, S const& s) {} +}; + +template <typename G1, typename G2, std::size_t Dim> +struct call_overlaps<G1, G2, Dim, Dim> +{ + template <typename S> + static void apply(G1 const& g1, G2 const& g2, S const& s) + { + bg::overlaps(g1, g2, s); + } +}; + +template +< + typename G1, + typename G2, + std::size_t Dim1 = bg::topological_dimension<G1>::value, + std::size_t Dim2 = bg::topological_dimension<G2>::value +> +struct call_touches +{ + template <typename S> + static void apply(G1 const& g1, G2 const& g2, S const& s) + { + bg::touches(g1, g2, s); + } +}; + +template <typename G1, typename G2> +struct call_touches<G1, G2, 0, 0> +{ + template <typename S> + static void apply(G1 const& g1, G2 const& g2, S const& s) {} +}; + +template +< + typename G1, + typename G2, + std::size_t Dim1 = bg::topological_dimension<G1>::value, + std::size_t Dim2 = bg::topological_dimension<G2>::value +> +struct call_crosses +{ + template <typename S> + static void apply(G1 const& g1, G2 const& g2, S const& s) + { + bg::crosses(g1, g2, s); + } +}; + +template <typename G1, typename G2> +struct call_crosses<G1, G2, 0, 0> +{ + template <typename S> + static void apply(G1 const& g1, G2 const& g2, S const& s) {} +}; + +template <typename G1, typename G2> +struct call_crosses<G1, G2, 2, 2> +{ + template <typename S> + static void apply(G1 const& g1, G2 const& g2, S const& s) {} +}; + +template <typename G1, typename G2, typename S> +inline void rel(G1 const& g1, G2 const& g2, S const& s) +{ + bg::relation(g1, g2, s); + bg::relate(g1, g2, bg::de9im::mask("*********"), s); + bg::covered_by(g1, g2, s); + call_crosses<G1, G2>::apply(g1, g2, s); + bg::disjoint(g1, g2, s); + call_equals<G1, G2>::apply(g1, g2, s); + bg::intersects(g1, g2, s); + call_overlaps<G1, G2>::apply(g1, g2, s); + call_touches<G1, G2>::apply(g1, g2, s); + bg::within(g1, g2, s); +} + +template <typename G1, typename G2> +inline void rel_pp(G1 const& g1, G2 const& g2) +{ + ::rel(g1, g2, bg::strategy::within::cartesian_point_point()); + ::rel(g1, g2, bg::strategy::within::spherical_point_point()); +} + +template <typename G1, typename G2> +inline void rel_ps(G1 const& g1, G2 const& g2) +{ + typedef typename bg::point_type<G1>::type point; + ::rel(g1, g2, bg::strategy::within::cartesian_winding<point>()); + ::rel(g1, g2, bg::strategy::within::spherical_winding<point>()); + ::rel(g1, g2, bg::strategy::within::geographic_winding<point>()); +} + +template <typename G1, typename G2> +inline void rel_ss(G1 const& g1, G2 const& g2) +{ + ::rel(g1, g2, bg::strategy::intersection::cartesian_segments<>()); + ::rel(g1, g2, bg::strategy::intersection::spherical_segments<>()); + ::rel(g1, g2, bg::strategy::intersection::geographic_segments<>()); +} + +#endif // BOOST_GEOMETRY_TEST_CS_UNDEFINED_TEST_RELOPS_HPP |