// Boost.Geometry (aka GGL, Generic Geometry Library) // Unit Test // Copyright (c) 2016 Oracle and/or its affiliates. // Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle // 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 template struct geo_strategies { // Set radius type, but for integer coordinates we want to have floating // point radius type typedef typename bg::promote_floating_point < typename bg::coordinate_type

::type >::type rtype; typedef bg::srs::spheroid stype; typedef bg::strategy::distance::andoyer andoyer_type; typedef bg::strategy::distance::thomas thomas_type; typedef bg::strategy::distance::vincenty vincenty_type; }; template void test_default() //this should use andoyer strategy { for(std::size_t i = 0; i < 2; ++i) { test_geometry >(Ls_data_geo[i], 1116814.237 + 1116152.605); } // Geometries with length zero test_geometry

("POINT(0 0)", 0); test_geometry >("POLYGON((0 0,0 1,1 1,1 0,0 0))", 0); } template void test_with_strategy(N exp_length, Strategy strategy) { for(std::size_t i = 0; i < 2; ++i) { test_geometry >(Ls_data_geo[i], exp_length, strategy); } // Geometries with length zero test_geometry

("POINT(0 0)", 0, strategy); test_geometry >("POLYGON((0 0,0 1,1 1,1 0,0 0))", 0, strategy); } template void test_andoyer() { typename geo_strategies

::andoyer_type andoyer; test_with_strategy

(1116814.237 + 1116152.605, andoyer); } template void test_thomas() { typename geo_strategies

::thomas_type thomas; test_with_strategy

(1116825.795 + 1116158.7417, thomas); } template void test_vincenty() { typename geo_strategies

::vincenty_type vincenty; test_with_strategy

(1116825.857 + 1116159.144, vincenty); } template void test_all() { test_default

(); test_andoyer

(); test_thomas

(); test_vincenty

(); } template void test_empty_input() { test_empty_input(bg::model::linestring

()); test_empty_input(bg::model::multi_linestring

()); } int test_main(int, char* []) { // Works only for double(?!) //test_all > >(); //test_all > >(); test_all > >(); #if defined(HAVE_TTMATH) test_all >(); #endif //test_empty_input > >(); return 0; }