1 // Boost.Geometry (aka GGL, Generic Geometry Library)
2 // Unit Test
3
4 // Copyright (c) 2016 Oracle and/or its affiliates.
5 // Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
6
7 // Use, modification and distribution is subject to the Boost Software License,
8 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
9 // http://www.boost.org/LICENSE_1_0.txt)
10
11 #include <algorithms/test_perimeter.hpp>
12
13 #include <boost/geometry/geometries/geometries.hpp>
14 #include <boost/geometry/geometries/point_xy.hpp>
15
16 template <typename P>
test_all()17 void test_all()
18 {
19 // Simple
20 test_geometry<bg::model::polygon<P> >("POLYGON((0 0,3 4,4 3,0 0))",
21 5 + sqrt(2.0) + 5);
22 // Non-simple
23 test_geometry<bg::model::polygon<P> >("POLYGON((0 0,3 4,4 3,0 3,0 0))",
24 5 + sqrt(2.0) + 4 + 3);
25 // With holes
26 test_geometry<bg::model::polygon<P> >("POLYGON((0 0,3 4,4 3,0 0),\
27 (2 2,3 4,3 3,2 2))",
28 5 + sqrt(2.0) + 5 +
29 sqrt(5.0) + 1 + sqrt(2.0));
30 // Repeated points
31 test_geometry<bg::model::polygon<P> >("POLYGON((0 0,3 4,3 4,3 4,4 3,4 3,\
32 4 3,4 3,4 3,4 3,0 3,0 0))",
33 5 + sqrt(2.0) + 4 + 3);
34 // Multipolygon
35 test_geometry<bg::model::multi_polygon<bg::model::polygon<P> > >
36 (
37 "MULTIPOLYGON(((0 0,3 4,4 3,0 0)), ((0 0,3 4,4 3,0 3,0 0)))",
38 5 + sqrt(2.0) + 5 + 5 + sqrt(2.0) + 4 + 3
39 );
40
41 // Geometries with perimeter zero
42 test_geometry<P>("POINT(0 0)", 0);
43 test_geometry<bg::model::linestring<P> >("LINESTRING(0 0,3 4,4 3)", 0);
44 }
45
46 template <typename P>
test_empty_input()47 void test_empty_input()
48 {
49 test_empty_input(bg::model::polygon<P>());
50 test_empty_input(bg::model::multi_polygon<bg::model::polygon<P> >());
51 }
52
test_main(int,char * [])53 int test_main(int, char* [])
54 {
55 test_all<bg::model::d2::point_xy<int> >();
56 test_all<bg::model::d2::point_xy<float> >();
57 test_all<bg::model::d2::point_xy<double> >();
58
59 #if defined(HAVE_TTMATH)
60 test_all<bg::model::d2::point_xy<ttmath_big> >();
61 #endif
62
63 // test_empty_input<bg::model::d2::point_xy<int> >();
64
65 return 0;
66 }
67