1 // Boost.Geometry (aka GGL, Generic Geometry Library)
2 //
3 // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
4 // Use, modification and distribution is subject to the Boost Software License,
5 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
7 
8 #include <algorithms/test_convert.hpp>
9 
10 
11 template <typename Point1, typename Point2>
test_mixed_point_types()12 void test_mixed_point_types()
13 {
14     test_mixed_identical_result
15         <
16             bg::model::multi_point<Point1>,
17             bg::model::multi_point<Point2>
18         >
19         ("MULTIPOINT((1 1),(2 2),(3 3))");
20 
21     test_mixed_identical_result
22         <
23             bg::model::multi_linestring<bg::model::linestring<Point1> >,
24             bg::model::multi_linestring<bg::model::linestring<Point2> >
25         >
26         ("MULTILINESTRING((1 1,2 2),(3 3,4 4))");
27 
28     // Single -> multi (always possible)
29     test_mixed
30         <
31             Point1, bg::model::multi_point<Point2>
32         >
33         (
34             "POINT(1 1)",
35             "MULTIPOINT((1 1))",
36             1
37         );
38     test_mixed
39         <
40             bg::model::linestring<Point1>,
41             bg::model::multi_linestring<bg::model::linestring<Point2> >
42         >
43         (
44             "LINESTRING(1 1,2 2)",
45             "MULTILINESTRING((1 1,2 2))",
46             2
47         );
48     test_mixed
49         <
50             bg::model::segment<Point1>,
51             bg::model::multi_linestring<bg::model::linestring<Point2> >
52         >
53         (
54             "LINESTRING(1 1,2 2)",
55             "MULTILINESTRING((1 1,2 2))",
56             2
57         );
58     test_mixed
59         <
60             bg::model::box<Point1>,
61             bg::model::multi_polygon<bg::model::polygon<Point2> >
62         >
63         (
64             "BOX(0 0,1 1)",
65             "MULTIPOLYGON(((0 0,0 1,1 1,1 0,0 0)))",
66             5
67         );
68     test_mixed
69         <
70             bg::model::ring<Point1, true>,
71             bg::model::multi_polygon<bg::model::polygon<Point2, false> >
72         >
73         (
74             "POLYGON((0 0,0 1,1 1,1 0,0 0))",
75             "MULTIPOLYGON(((0 0,1 0,1 1,0 1,0 0)))",
76             5
77         );
78 
79     // Multi -> single: should not compile (because multi often have 0 or >1 elements)
80 }
81 
82 template <typename Point1, typename Point2>
test_mixed_types()83 void test_mixed_types()
84 {
85     test_mixed_point_types<Point1, Point2>();
86     test_mixed_point_types<Point2, Point1>();
87 }
88 
test_main(int,char * [])89 int test_main( int , char* [] )
90 {
91     test_mixed_types
92         <
93             bg::model::point<int, 2, bg::cs::cartesian>,
94             bg::model::point<double, 2, bg::cs::cartesian>
95         >();
96 
97     return 0;
98 }
99