diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml new file mode 100644 index 000000000..223ce3efb --- /dev/null +++ b/.github/workflows/cmake.yml @@ -0,0 +1,104 @@ +############################################################################## +# GitHub Actions Workflow for Boost.Geometry to build tests with cmake +# +# Copyright (c) 2024 Oracle and/or its affiliates. +# Contributed and/or modified by Vissarion Fysikopoulos, 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) +############################################################################## +name: cmake + +on: [push] + +jobs: + ############################################################################## + clang: + name: ${{ matrix.b2_toolset }} + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + b2_toolset: [ + clang-14 + ] + + include: + - b2_toolset: clang-14 + b2_cxxstd: 14,17,2a + version: "14" + os: ubuntu-22.04 + steps: + - name: Set up environment + id: setenv + run: | + if [[ "$GITHUB_REF" == *master ]]; then + echo "BOOST_BRANCH=master" >> $GITHUB_ENV + else + echo "BOOST_BRANCH=develop" >> $GITHUB_ENV + fi + echo "BOOST_SELF=$(basename $GITHUB_WORKSPACE)" >> $GITHUB_ENV + echo "BOOST_ROOT=$GITHUB_WORKSPACE/boost-root" >> $GITHUB_ENV + echo "boost_self=$(basename $GITHUB_WORKSPACE)" >> "$GITHUB_OUTPUT" + echo "boost_root=$GITHUB_WORKSPACE/boost-root" >> "$GITHUB_OUTPUT" + + - name: Clone boostorg/boost + run: | + git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git $BOOST_ROOT + cd $BOOST_ROOT + git submodule update -q --init libs/headers + git submodule update -q --init tools/boost_install + git submodule update -q --init tools/boostdep + git submodule update -q --init tools/build + mkdir -p libs/$BOOST_SELF + + - uses: actions/checkout@v2 + with: + path: ${{ steps.setenv.outputs.boost_root }}/libs/${{ steps.setenv.outputs.boost_self }} + + - name: Run tools/boostdep/depinst/depinst.py + run: | + cd $BOOST_ROOT + python tools/boostdep/depinst/depinst.py --include benchmark --include example --include examples --include tools $BOOST_SELF + + - name: Bootstrap boostorg/boost + run: | + gcc --version + cd $BOOST_ROOT + ./bootstrap.sh --with-toolset=gcc + ./b2 headers + test -f /usr/local/bin/b2 && rm -rf /usr/local/bin/b2 + test -f /usr/local/bin/bjam && rm -rf /usr/local/bin/bjam + sudo cp $BOOST_ROOT/b2 /usr/local/bin/ + ls -l /usr/local/bin/b2 + b2 -v + + - name: Set up clang toolset in ~/user-config.jam + run: | + export CXX_NAME=clang++-${{ matrix.version }} + echo ${CXX_NAME} + echo "# $HOME/user-config.jam" > $HOME/user-config.jam + echo "using clang : : $(which clang++-${{ matrix.version }}) ;" > ${HOME}/user-config.jam + test -f $HOME/user-config.jam && cat $HOME/user-config.jam + + - name: Build tests with cmake (c++17) + run: | + cd $BOOST_ROOT/libs/geometry + mkdir __build + cd __build + cmake -DCMAKE_CXX_STANDARD=17 -DBUILD_TESTING=ON .. + cmake --build . --target tests + + - name: Build tests with cmake + run: | + cd $BOOST_ROOT/libs/geometry/__build + rm -rf * + cmake -DBUILD_TESTING=ON .. + cmake --build . --target tests + + - name: Run tests + run: | + cd $BOOST_ROOT/libs/geometry/__build + ctest --output-on-failure --no-tests=error diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b859fe83..750938c0a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,7 @@ target_link_libraries(boost_geometry Boost::concept_check Boost::config Boost::core + Boost::crc Boost::function_types Boost::iterator Boost::lexical_cast @@ -32,6 +33,7 @@ target_link_libraries(boost_geometry Boost::mpl Boost::multiprecision Boost::numeric_conversion + Boost::program_options Boost::qvm Boost::range Boost::rational @@ -100,9 +102,11 @@ if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt") config algorithm any + crc lexical_cast math multiprecision + program_options qvm rational serialization @@ -123,7 +127,8 @@ if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt") endif() enable_testing() - add_subdirectory(test) + add_subdirectory(test EXCLUDE_FROM_ALL) + add_subdirectory(index/test EXCLUDE_FROM_ALL) endif() diff --git a/index/test/CMakeLists.txt b/index/test/CMakeLists.txt new file mode 100644 index 000000000..aa81b48f0 --- /dev/null +++ b/index/test/CMakeLists.txt @@ -0,0 +1,17 @@ +# Boost.Geometry +# Copyright (c) 2024, Oracle and/or its affiliates. +# Contributed and/or modified by Vissarion Fysikopoulos, 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) + +foreach(item IN ITEMS + minmax_heap + varray_old + varray + ) + boost_geometry_add_unit_test("index" ${item}) +endforeach() + +add_subdirectory(algorithms) +add_subdirectory(rtree) diff --git a/index/test/algorithms/CMakeLists.txt b/index/test/algorithms/CMakeLists.txt new file mode 100644 index 000000000..410138a23 --- /dev/null +++ b/index/test/algorithms/CMakeLists.txt @@ -0,0 +1,19 @@ +# Boost.Geometry +# Copyright (c) 2024, Oracle and/or its affiliates. +# Contributed and/or modified by Vissarion Fysikopoulos, 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) + +foreach(item IN ITEMS + content + intersection_content # this tests overlap() too + is_valid + margin + #minmaxdist + union_content + segment_intersection + path_intersection + ) + boost_geometry_add_unit_test("index" ${item}) +endforeach() diff --git a/index/test/rtree/CMakeLists.txt b/index/test/rtree/CMakeLists.txt new file mode 100644 index 000000000..5c09204f9 --- /dev/null +++ b/index/test/rtree/CMakeLists.txt @@ -0,0 +1,19 @@ +# Boost.Geometry +# Copyright (c) 2024, Oracle and/or its affiliates. +# Contributed and/or modified by Vissarion Fysikopoulos, 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) + +foreach(item IN ITEMS + rtree_contains_point + rtree_epsilon + rtree_insert_remove + rtree_intersects_geom + rtree_move_pack + rtree_non_cartesian + rtree_values + #compile-fail rtree_values_invalid + ) + boost_geometry_add_unit_test("index" ${item}) +endforeach() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e82943b54..3836548f7 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,5 +1,12 @@ # Boost.Geometry + # Copyright (c) 2024 Barend Gehrels, Amsterdam, the Netherlands. + +# This file was modified by Oracle on 2024. +# Modifications copyright (c) 2024 Oracle and/or its affiliates. + +# Contributed and/or modified by Vissarion Fysikopoulos, 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) @@ -8,55 +15,62 @@ # It also lets running the tests much faster. if (APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffp-contract=fast") -endif() +endif() function(boost_geometry_add_unit_test prefix item) set(unit_test_name "boost_geometry_${prefix}_${item}") add_executable(${unit_test_name} ${item}.cpp) - # Add a dependendcy to Boost.Geometry - target_link_libraries(${unit_test_name} + # Add a dependency to Boost.Geometry + target_link_libraries(${unit_test_name} PRIVATE Boost::geometry) # For unit tests, add a dependency to the unit test framework (in header only mode) - target_link_libraries(${unit_test_name} + target_link_libraries(${unit_test_name} PRIVATE Boost::included_unit_test_framework) - + # Include the main Geometry test folder and the current folder target_include_directories(${unit_test_name} PRIVATE - "${PROJECT_SOURCE_DIR}/test" + "${PROJECT_SOURCE_DIR}/test" + "${PROJECT_SOURCE_DIR}/index/test" .) # To compile with C++14 target_compile_features(${unit_test_name} PRIVATE cxx_std_14) # To be able to run ctest - add_test(NAME ${unit_test_name} COMMAND ${unit_test_name}) + set(extra_macro_args ${ARGN}) + if (NOT extra_macro_args STREQUAL "not_run") + add_test(NAME ${unit_test_name} COMMAND ${unit_test_name}) + endif() # Add a dependency to the global tests target add_dependencies(tests ${unit_test_name}) # Inform the caller about the test name. It can then set defines, if necessary. set(BOOST_GEOMETRY_UNIT_TEST_NAME ${unit_test_name} PARENT_SCOPE) + endfunction() if (NOT TARGET tests) add_custom_target(tests) endif() -add_subdirectory(core) -add_subdirectory(concepts) -add_subdirectory(geometries) -add_subdirectory(arithmetic) add_subdirectory(algorithms) +add_subdirectory(arithmetic) +add_subdirectory(concepts) +add_subdirectory(core) +add_subdirectory(cs_undefined) add_subdirectory(formulas) -add_subdirectory(iterators) -add_subdirectory(strategies) -add_subdirectory(policies) +add_subdirectory(geometries) add_subdirectory(io) +add_subdirectory(iterators) +add_subdirectory(policies) +add_subdirectory(robustness) add_subdirectory(srs) +add_subdirectory(strategies) add_subdirectory(util) add_subdirectory(views) diff --git a/test/cs_undefined/CMakeLists.txt b/test/cs_undefined/CMakeLists.txt new file mode 100644 index 000000000..88a2dddb2 --- /dev/null +++ b/test/cs_undefined/CMakeLists.txt @@ -0,0 +1,22 @@ +# Boost.Geometry +# Copyright (c) 2024, Oracle and/or its affiliates. +# Contributed and/or modified by Vissarion Fysikopoulos, 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) + +foreach(item IN ITEMS + distance + envelope_expand + index + is + measure + other + relops1 + relops2 + ) + boost_geometry_add_unit_test("cs_undefined" ${item}) +endforeach() + +boost_geometry_add_unit_test("cs_undefined" setops1 "not_run") +boost_geometry_add_unit_test("cs_undefined" setops2 "not_run") diff --git a/test/robustness/CMakeLists.txt b/test/robustness/CMakeLists.txt new file mode 100644 index 000000000..9ad40d9f2 --- /dev/null +++ b/test/robustness/CMakeLists.txt @@ -0,0 +1,10 @@ +# Boost.Geometry +# Copyright (c) 2024, Oracle and/or its affiliates. +# Contributed and/or modified by Vissarion Fysikopoulos, 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) + +add_subdirectory(convex_hull) +add_subdirectory(overlay) +#add_subdirectory(within) diff --git a/test/robustness/convex_hull/CMakeLists.txt b/test/robustness/convex_hull/CMakeLists.txt new file mode 100644 index 000000000..09392259d --- /dev/null +++ b/test/robustness/convex_hull/CMakeLists.txt @@ -0,0 +1,13 @@ +# Boost.Geometry +# Copyright (c) 2024, Oracle and/or its affiliates. +# Contributed and/or modified by Vissarion Fysikopoulos, 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) + +boost_geometry_add_unit_test("robustness" random_multi_points) + +target_include_directories(boost_geometry_robustness_random_multi_points + PRIVATE + "${PROJECT_SOURCE_DIR}/test/robustness" + .) diff --git a/test/robustness/overlay/CMakeLists.txt b/test/robustness/overlay/CMakeLists.txt new file mode 100644 index 000000000..5cd93c834 --- /dev/null +++ b/test/robustness/overlay/CMakeLists.txt @@ -0,0 +1,10 @@ +# Boost.Geometry +# Copyright (c) 2024, Oracle and/or its affiliates. +# Contributed and/or modified by Vissarion Fysikopoulos, 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) + +add_subdirectory(areal_areal) +add_subdirectory(buffer) +add_subdirectory(linear_areal) diff --git a/test/robustness/overlay/areal_areal/CMakeLists.txt b/test/robustness/overlay/areal_areal/CMakeLists.txt new file mode 100644 index 000000000..f01e7c688 --- /dev/null +++ b/test/robustness/overlay/areal_areal/CMakeLists.txt @@ -0,0 +1,24 @@ +# Boost.Geometry +# Copyright (c) 2024, Oracle and/or its affiliates. +# Contributed and/or modified by Vissarion Fysikopoulos, 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) + +foreach(item IN ITEMS + #general_intersection_precision + interior_triangles + intersection_pies + intersection_stars + intersects + random_ellipses_stars + recursive_polygons + star_comb + #ticket_9081 + ) + boost_geometry_add_unit_test("robustness" ${item}) + target_include_directories(${BOOST_GEOMETRY_UNIT_TEST_NAME} + PRIVATE + "${PROJECT_SOURCE_DIR}/test/robustness" + .) +endforeach() diff --git a/test/robustness/overlay/buffer/CMakeLists.txt b/test/robustness/overlay/buffer/CMakeLists.txt new file mode 100644 index 000000000..23b109581 --- /dev/null +++ b/test/robustness/overlay/buffer/CMakeLists.txt @@ -0,0 +1,18 @@ +# Boost.Geometry +# Copyright (c) 2024, Oracle and/or its affiliates. +# Contributed and/or modified by Vissarion Fysikopoulos, 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) + +foreach(item IN ITEMS + #many_ring_buffer + #multi_point_growth + recursive_polygons_buffer + ) + boost_geometry_add_unit_test("robustness" ${item}) + target_include_directories(${BOOST_GEOMETRY_UNIT_TEST_NAME} + PRIVATE + "${PROJECT_SOURCE_DIR}/test/robustness" + .) +endforeach() diff --git a/test/robustness/overlay/linear_areal/CMakeLists.txt b/test/robustness/overlay/linear_areal/CMakeLists.txt new file mode 100644 index 000000000..eef2de6be --- /dev/null +++ b/test/robustness/overlay/linear_areal/CMakeLists.txt @@ -0,0 +1,8 @@ +# Boost.Geometry +# Copyright (c) 2024, Oracle and/or its affiliates. +# Contributed and/or modified by Vissarion Fysikopoulos, 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) + +boost_geometry_add_unit_test("robustness" recursive_polygons_linear_areal)