Compare commits

..

36 Commits

Author SHA1 Message Date
Siarhei Fedartsou 3d9f0c6549 Try to fix flaky tests 2024-11-03 18:51:42 +01:00
Siarhei Fedartsou 21c9f5d17d Merge branch 'master' into sf-try-to-fix-flaky-tests 2024-11-03 18:32:04 +01:00
Siarhei Fedartsou 6f73d2b4e0 Try to fix flaky tests 2024-11-03 18:31:01 +01:00
Siarhei Fedartsou 40446e416f Try to fix flaky tests 2024-11-03 18:30:45 +01:00
Siarhei Fedartsou 24e4068d07 Try to fix flaky tests 2024-11-03 18:22:56 +01:00
Siarhei Fedartsou c4edaad85d Try to fix flaky tests 2024-11-03 17:29:41 +01:00
Siarhei Fedartsou 13c92c72d5 Try to fix flaky tests 2024-11-03 17:25:02 +01:00
Siarhei Fedartsou baada3bd49 Try to fix flaky tests 2024-11-03 17:21:28 +01:00
Siarhei Fedartsou 1c2410b57d Try to fix flaky tests 2024-11-03 17:20:28 +01:00
Siarhei Fedartsou 74aab7b2ea Try to fix flaky tests 2024-11-03 17:12:50 +01:00
Siarhei Fedartsou 832b576549 wip 2024-11-03 15:26:31 +01:00
Siarhei Fedartsou b65d8f1e34 Try to fix flaky tests 2024-11-03 15:16:20 +01:00
Siarhei Fedartsou c01685f38d Try to fix flaky tests 2024-11-03 15:12:21 +01:00
Siarhei Fedartsou f0bb5faa6a wip 2024-11-03 14:59:10 +01:00
Siarhei Fedartsou 1b0a89fbd0 wip 2024-11-03 14:57:50 +01:00
Siarhei Fedartsou 69777e2784 wip 2024-11-03 14:56:31 +01:00
Siarhei Fedartsou cf4f04d08f wip 2024-11-03 13:56:55 +01:00
Siarhei Fedartsou 9c6a78e865 wip 2024-11-03 13:36:17 +01:00
Siarhei Fedartsou c46f92b6c3 wip 2024-11-03 13:28:56 +01:00
Siarhei Fedartsou b9d095e644 wip 2024-11-03 13:24:12 +01:00
Siarhei Fedartsou 1bf831a318 wip 2024-11-03 13:15:59 +01:00
Siarhei Fedartsou d5ab66496c wip 2024-11-03 13:07:28 +01:00
Siarhei Fedartsou 5b69c0a7f2 wip 2024-11-03 13:01:33 +01:00
Siarhei Fedartsou 7f70f9068a wip 2024-11-03 12:52:53 +01:00
Siarhei Fedartsou 761883e8d6 wip 2024-11-03 12:47:34 +01:00
Siarhei Fedartsou 09020115d2 wip 2024-11-03 12:41:33 +01:00
Siarhei Fedartsou c3e9e12fc3 wip 2024-11-03 12:21:12 +01:00
Siarhei Fedartsou 5581ac16bd wip 2024-11-03 12:19:36 +01:00
Siarhei Fedartsou bd3d409f03 wip 2024-11-03 12:18:57 +01:00
Siarhei Fedartsou 668dafc242 wip 2024-11-03 12:06:03 +01:00
Siarhei Fedartsou ea1f2be3d4 wip 2024-11-03 11:58:34 +01:00
Siarhei Fedartsou 1ae0a6e275 wip 2024-11-02 14:38:34 +01:00
Siarhei Fedartsou 085f852315 wip 2024-11-02 14:20:01 +01:00
Siarhei Fedartsou 918c33cb2d wip 2024-11-02 11:36:10 +01:00
Siarhei Fedartsou a94368cc87 Use std::string_view for key type in json::Object 2024-11-02 11:24:19 +01:00
Siarhei Fedartsou 97872e34d8 Use std::string_view for key type in json::Object 2024-11-02 11:23:06 +01:00
37 changed files with 776 additions and 691 deletions
+420 -414
View File
@@ -23,218 +23,218 @@ concurrency:
cancel-in-progress: true
jobs:
windows-release-node:
needs: format-taginfo-docs
runs-on: windows-2022
continue-on-error: false
env:
BUILD_TYPE: Release
steps:
- uses: actions/checkout@v4
- run: pip install "conan<2.0.0"
- run: conan --version
- run: cmake --version
- uses: actions/setup-node@v4
with:
node-version: 18
- run: node --version
- run: npm --version
- name: Prepare environment
shell: bash
run: |
PACKAGE_JSON_VERSION=$(node -e "console.log(require('./package.json').version)")
echo PUBLISH=$([[ "${GITHUB_REF:-}" == "refs/tags/v${PACKAGE_JSON_VERSION}" ]] && echo "On" || echo "Off") >> $GITHUB_ENV
- run: npm install --ignore-scripts
- run: npm link --ignore-scripts
- name: Build
shell: bash
run: |
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_CONAN=ON -DENABLE_NODE_BINDINGS=ON ..
cmake --build . --config Release
# windows-release-node:
# needs: format-taginfo-docs
# runs-on: windows-2022
# continue-on-error: false
# env:
# BUILD_TYPE: Release
# steps:
# - uses: actions/checkout@v4
# - run: pip install "conan<2.0.0"
# - run: conan --version
# - run: cmake --version
# - uses: actions/setup-node@v4
# with:
# node-version: 18
# - run: node --version
# - run: npm --version
# - name: Prepare environment
# shell: bash
# run: |
# PACKAGE_JSON_VERSION=$(node -e "console.log(require('./package.json').version)")
# echo PUBLISH=$([[ "${GITHUB_REF:-}" == "refs/tags/v${PACKAGE_JSON_VERSION}" ]] && echo "On" || echo "Off") >> $GITHUB_ENV
# - run: npm install --ignore-scripts
# - run: npm link --ignore-scripts
# - name: Build
# shell: bash
# run: |
# mkdir build
# cd build
# cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_CONAN=ON -DENABLE_NODE_BINDINGS=ON ..
# cmake --build . --config Release
# TODO: MSVC goes out of memory when building our tests
# - name: Run tests
# shell: bash
# run: |
# cd build
# cmake --build . --config Release --target tests
# # TODO: run tests
# - name: Run node tests
# shell: bash
# run: |
# ./lib/binding/osrm-extract.exe -p profiles/car.lua test/data/monaco.osm.pbf
# # TODO: MSVC goes out of memory when building our tests
# # - name: Run tests
# # shell: bash
# # run: |
# # cd build
# # cmake --build . --config Release --target tests
# # # TODO: run tests
# # - name: Run node tests
# # shell: bash
# # run: |
# # ./lib/binding/osrm-extract.exe -p profiles/car.lua test/data/monaco.osm.pbf
# mkdir -p test/data/ch
# cp test/data/monaco.osrm* test/data/ch/
# ./lib/binding/osrm-contract.exe test/data/ch/monaco.osrm
# # mkdir -p test/data/ch
# # cp test/data/monaco.osrm* test/data/ch/
# # ./lib/binding/osrm-contract.exe test/data/ch/monaco.osrm
# ./lib/binding/osrm-datastore.exe test/data/ch/monaco.osrm
# node test/nodejs/index.js
- name: Build Node package
shell: bash
run: ./scripts/ci/node_package.sh
- name: Publish Node package
if: ${{ env.PUBLISH == 'On' }}
uses: ncipollo/release-action@v1
with:
allowUpdates: true
artifactErrorsFailBuild: true
artifacts: build/stage/**/*.tar.gz
omitBody: true
omitBodyDuringUpdate: true
omitName: true
omitNameDuringUpdate: true
replacesArtifacts: true
token: ${{ secrets.GITHUB_TOKEN }}
# # ./lib/binding/osrm-datastore.exe test/data/ch/monaco.osrm
# # node test/nodejs/index.js
# - name: Build Node package
# shell: bash
# run: ./scripts/ci/node_package.sh
# - name: Publish Node package
# if: ${{ env.PUBLISH == 'On' }}
# uses: ncipollo/release-action@v1
# with:
# allowUpdates: true
# artifactErrorsFailBuild: true
# artifacts: build/stage/**/*.tar.gz
# omitBody: true
# omitBodyDuringUpdate: true
# omitName: true
# omitNameDuringUpdate: true
# replacesArtifacts: true
# token: ${{ secrets.GITHUB_TOKEN }}
format-taginfo-docs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: 18
- name: Enable Node.js cache
uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Prepare environment
run: |
npm ci --ignore-scripts
clang-format-15 --version
- name: Run checks
run: |
./scripts/check_taginfo.py taginfo.json profiles/car.lua
./scripts/format.sh && ./scripts/error_on_dirty.sh
node ./scripts/validate_changelog.js
npm run docs && ./scripts/error_on_dirty.sh
npm audit --production
# format-taginfo-docs:
# runs-on: ubuntu-22.04
# steps:
# - uses: actions/checkout@v4
# - name: Use Node.js
# uses: actions/setup-node@v4
# with:
# node-version: 18
# - name: Enable Node.js cache
# uses: actions/cache@v4
# with:
# path: ~/.npm
# key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
# restore-keys: |
# ${{ runner.os }}-node-
# - name: Prepare environment
# run: |
# npm ci --ignore-scripts
# clang-format-15 --version
# - name: Run checks
# run: |
# ./scripts/check_taginfo.py taginfo.json profiles/car.lua
# ./scripts/format.sh && ./scripts/error_on_dirty.sh
# node ./scripts/validate_changelog.js
# npm run docs && ./scripts/error_on_dirty.sh
# npm audit --production
docker-image-matrix:
strategy:
matrix:
docker-base-image: ["debian", "alpine"]
needs: format-taginfo-docs
runs-on: ubuntu-22.04
continue-on-error: false
steps:
- name: Check out the repo
uses: actions/checkout@v4
- name: Enable osm.pbf cache
uses: actions/cache@v4
with:
path: berlin-latest.osm.pbf
key: v1-berlin-osm-pbf
restore-keys: |
v1-berlin-osm-pbf
- name: Docker build
run: |
docker build -t osrm-backend-local -f docker/Dockerfile-${{ matrix.docker-base-image }} .
- name: Test Docker image
run: |
if [ ! -f "${PWD}/berlin-latest.osm.pbf" ]; then
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
fi
TAG=osrm-backend-local
# when `--memory-swap` value equals `--memory` it means container won't use swap
# see https://docs.docker.com/config/containers/resource_constraints/#--memory-swap-details
MEMORY_ARGS="--memory=1g --memory-swap=1g"
docker run $MEMORY_ARGS -t -v "${PWD}:/data" "${TAG}" osrm-extract --dump-nbg-graph -p /opt/car.lua /data/berlin-latest.osm.pbf
docker run $MEMORY_ARGS -t -v "${PWD}:/data" "${TAG}" osrm-components /data/berlin-latest.osrm.nbg /data/berlin-latest.geojson
if [ ! -s "${PWD}/berlin-latest.geojson" ]
then
>&2 echo "No berlin-latest.geojson found"
exit 1
fi
# removing `.osrm.nbg` to check that whole pipeline works without it
rm -rf "${PWD}/berlin-latest.osrm.nbg"
# docker-image-matrix:
# strategy:
# matrix:
# docker-base-image: ["debian", "alpine"]
# needs: format-taginfo-docs
# runs-on: ubuntu-22.04
# continue-on-error: false
# steps:
# - name: Check out the repo
# uses: actions/checkout@v4
# - name: Enable osm.pbf cache
# uses: actions/cache@v4
# with:
# path: berlin-latest.osm.pbf
# key: v1-berlin-osm-pbf
# restore-keys: |
# v1-berlin-osm-pbf
# - name: Docker build
# run: |
# docker build -t osrm-backend-local -f docker/Dockerfile-${{ matrix.docker-base-image }} .
# - name: Test Docker image
# run: |
# if [ ! -f "${PWD}/berlin-latest.osm.pbf" ]; then
# wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
# fi
# TAG=osrm-backend-local
# # when `--memory-swap` value equals `--memory` it means container won't use swap
# # see https://docs.docker.com/config/containers/resource_constraints/#--memory-swap-details
# MEMORY_ARGS="--memory=1g --memory-swap=1g"
# docker run $MEMORY_ARGS -t -v "${PWD}:/data" "${TAG}" osrm-extract --dump-nbg-graph -p /opt/car.lua /data/berlin-latest.osm.pbf
# docker run $MEMORY_ARGS -t -v "${PWD}:/data" "${TAG}" osrm-components /data/berlin-latest.osrm.nbg /data/berlin-latest.geojson
# if [ ! -s "${PWD}/berlin-latest.geojson" ]
# then
# >&2 echo "No berlin-latest.geojson found"
# exit 1
# fi
# # removing `.osrm.nbg` to check that whole pipeline works without it
# rm -rf "${PWD}/berlin-latest.osrm.nbg"
docker run $MEMORY_ARGS -t -v "${PWD}:/data" "${TAG}" osrm-partition /data/berlin-latest.osrm
docker run $MEMORY_ARGS -t -v "${PWD}:/data" "${TAG}" osrm-customize /data/berlin-latest.osrm
docker run $MEMORY_ARGS --name=osrm-container -t -p 5000:5000 -v "${PWD}:/data" "${TAG}" osrm-routed --algorithm mld /data/berlin-latest.osrm &
curl --retry-delay 3 --retry 10 --retry-all-errors "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true"
docker stop osrm-container
# docker run $MEMORY_ARGS -t -v "${PWD}:/data" "${TAG}" osrm-partition /data/berlin-latest.osrm
# docker run $MEMORY_ARGS -t -v "${PWD}:/data" "${TAG}" osrm-customize /data/berlin-latest.osrm
# docker run $MEMORY_ARGS --name=osrm-container -t -p 5000:5000 -v "${PWD}:/data" "${TAG}" osrm-routed --algorithm mld /data/berlin-latest.osrm &
# curl --retry-delay 3 --retry 10 --retry-all-errors "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true"
# docker stop osrm-container
build-test-publish:
needs: format-taginfo-docs
#needs: format-taginfo-docs
strategy:
matrix:
include:
- name: gcc-13-debug-cov
continue-on-error: false
node: 20
runs-on: ubuntu-24.04
BUILD_TOOLS: ON
BUILD_TYPE: Debug
CCOMPILER: gcc-13
CUCUMBER_TIMEOUT: 20000
CXXCOMPILER: g++-13
ENABLE_COVERAGE: ON
# - name: gcc-13-debug-cov
# continue-on-error: false
# node: 20
# runs-on: ubuntu-24.04
# BUILD_TOOLS: ON
# BUILD_TYPE: Debug
# CCOMPILER: gcc-13
# CUCUMBER_TIMEOUT: 20000
# CXXCOMPILER: g++-13
# ENABLE_COVERAGE: ON
- name: clang-18-debug-asan-ubsan
continue-on-error: false
node: 20
runs-on: ubuntu-24.04
BUILD_TOOLS: ON
BUILD_TYPE: Debug
CCOMPILER: clang-18
CUCUMBER_TIMEOUT: 20000
CXXCOMPILER: clang++-18
ENABLE_SANITIZER: ON
TARGET_ARCH: x86_64-asan-ubsan
OSRM_CONNECTION_RETRIES: 10
OSRM_CONNECTION_EXP_BACKOFF_COEF: 1.5
# - name: clang-18-debug-asan-ubsan
# continue-on-error: false
# node: 20
# runs-on: ubuntu-24.04
# BUILD_TOOLS: ON
# BUILD_TYPE: Debug
# CCOMPILER: clang-18
# CUCUMBER_TIMEOUT: 20000
# CXXCOMPILER: clang++-18
# ENABLE_SANITIZER: ON
# TARGET_ARCH: x86_64-asan-ubsan
# OSRM_CONNECTION_RETRIES: 10
# OSRM_CONNECTION_EXP_BACKOFF_COEF: 1.5
- name: clang-18-release
continue-on-error: false
node: 18
runs-on: ubuntu-24.04
BUILD_TOOLS: ON
BUILD_TYPE: Release
CCOMPILER: clang-18
CXXCOMPILER: clang++-18
CUCUMBER_TIMEOUT: 60000
ENABLE_LTO: OFF
# - name: clang-18-release
# continue-on-error: false
# node: 18
# runs-on: ubuntu-24.04
# BUILD_TOOLS: ON
# BUILD_TYPE: Release
# CCOMPILER: clang-18
# CXXCOMPILER: clang++-18
# CUCUMBER_TIMEOUT: 60000
# ENABLE_LTO: OFF
- name: clang-18-debug
continue-on-error: false
node: 18
runs-on: ubuntu-24.04
BUILD_TOOLS: ON
BUILD_TYPE: Debug
CCOMPILER: clang-18
CXXCOMPILER: clang++-18
CUCUMBER_TIMEOUT: 60000
ENABLE_LTO: OFF
# - name: clang-18-debug
# continue-on-error: false
# node: 18
# runs-on: ubuntu-24.04
# BUILD_TOOLS: ON
# BUILD_TYPE: Debug
# CCOMPILER: clang-18
# CXXCOMPILER: clang++-18
# CUCUMBER_TIMEOUT: 60000
# ENABLE_LTO: OFF
- name: clang-18-debug-clang-tidy
continue-on-error: false
node: 18
runs-on: ubuntu-24.04
BUILD_TOOLS: ON
BUILD_TYPE: Debug
CCOMPILER: clang-18
CXXCOMPILER: clang++-18
CUCUMBER_TIMEOUT: 60000
ENABLE_CLANG_TIDY: ON
# - name: clang-18-debug-clang-tidy
# continue-on-error: false
# node: 18
# runs-on: ubuntu-24.04
# BUILD_TOOLS: ON
# BUILD_TYPE: Debug
# CCOMPILER: clang-18
# CXXCOMPILER: clang++-18
# CUCUMBER_TIMEOUT: 60000
# ENABLE_CLANG_TIDY: ON
- name: clang-17-release
continue-on-error: false
node: 18
runs-on: ubuntu-24.04
BUILD_TOOLS: ON
BUILD_TYPE: Release
CCOMPILER: clang-17
CXXCOMPILER: clang++-17
CUCUMBER_TIMEOUT: 60000
ENABLE_LTO: OFF
# - name: clang-17-release
# continue-on-error: false
# node: 18
# runs-on: ubuntu-24.04
# BUILD_TOOLS: ON
# BUILD_TYPE: Release
# CCOMPILER: clang-17
# CXXCOMPILER: clang++-17
# CUCUMBER_TIMEOUT: 60000
# ENABLE_LTO: OFF
- name: clang-16-release
continue-on-error: false
@@ -247,104 +247,104 @@ jobs:
CUCUMBER_TIMEOUT: 60000
ENABLE_LTO: OFF
- name: conan-linux-debug-asan-ubsan
continue-on-error: false
node: 18
runs-on: ubuntu-24.04
BUILD_TOOLS: ON
BUILD_TYPE: Release
CCOMPILER: clang-18
CXXCOMPILER: clang++-18
ENABLE_CONAN: ON
ENABLE_SANITIZER: ON
ENABLE_LTO: OFF
# - name: conan-linux-debug-asan-ubsan
# continue-on-error: false
# node: 18
# runs-on: ubuntu-24.04
# BUILD_TOOLS: ON
# BUILD_TYPE: Release
# CCOMPILER: clang-18
# CXXCOMPILER: clang++-18
# ENABLE_CONAN: ON
# ENABLE_SANITIZER: ON
# ENABLE_LTO: OFF
- name: conan-linux-release
continue-on-error: false
node: 18
runs-on: ubuntu-24.04
BUILD_TOOLS: ON
BUILD_TYPE: Release
CCOMPILER: clang-18
CXXCOMPILER: clang++-18
ENABLE_CONAN: ON
ENABLE_LTO: OFF
# - name: conan-linux-release
# continue-on-error: false
# node: 18
# runs-on: ubuntu-24.04
# BUILD_TOOLS: ON
# BUILD_TYPE: Release
# CCOMPILER: clang-18
# CXXCOMPILER: clang++-18
# ENABLE_CONAN: ON
# ENABLE_LTO: OFF
- name: gcc-14-release
continue-on-error: false
node: 20
runs-on: ubuntu-24.04
BUILD_TOOLS: ON
BUILD_TYPE: Release
CCOMPILER: gcc-14
CXXCOMPILER: g++-14
CXXFLAGS: '-Wno-array-bounds -Wno-uninitialized'
# - name: gcc-14-release
# continue-on-error: false
# node: 20
# runs-on: ubuntu-24.04
# BUILD_TOOLS: ON
# BUILD_TYPE: Release
# CCOMPILER: gcc-14
# CXXCOMPILER: g++-14
# CXXFLAGS: '-Wno-array-bounds -Wno-uninitialized'
- name: gcc-13-release
continue-on-error: false
node: 20
runs-on: ubuntu-24.04
BUILD_TOOLS: ON
BUILD_TYPE: Release
CCOMPILER: gcc-13
CXXCOMPILER: g++-13
CXXFLAGS: '-Wno-array-bounds -Wno-uninitialized'
# - name: gcc-13-release
# continue-on-error: false
# node: 20
# runs-on: ubuntu-24.04
# BUILD_TOOLS: ON
# BUILD_TYPE: Release
# CCOMPILER: gcc-13
# CXXCOMPILER: g++-13
# CXXFLAGS: '-Wno-array-bounds -Wno-uninitialized'
- name: gcc-12-release
continue-on-error: false
node: 20
runs-on: ubuntu-22.04
BUILD_TOOLS: ON
BUILD_TYPE: Release
CCOMPILER: gcc-12
CXXCOMPILER: g++-12
CXXFLAGS: '-Wno-array-bounds -Wno-uninitialized'
# - name: gcc-12-release
# continue-on-error: false
# node: 20
# runs-on: ubuntu-22.04
# BUILD_TOOLS: ON
# BUILD_TYPE: Release
# CCOMPILER: gcc-12
# CXXCOMPILER: g++-12
# CXXFLAGS: '-Wno-array-bounds -Wno-uninitialized'
- name: conan-linux-release-node
build_node_package: true
continue-on-error: false
node: 20
runs-on: ubuntu-24.04
BUILD_TYPE: Release
CCOMPILER: clang-16
CXXCOMPILER: clang++-16
ENABLE_CONAN: ON
NODE_PACKAGE_TESTS_ONLY: ON
# - name: conan-linux-release-node
# build_node_package: true
# continue-on-error: false
# node: 20
# runs-on: ubuntu-24.04
# BUILD_TYPE: Release
# CCOMPILER: clang-16
# CXXCOMPILER: clang++-16
# ENABLE_CONAN: ON
# NODE_PACKAGE_TESTS_ONLY: ON
- name: conan-linux-debug-node
build_node_package: true
continue-on-error: false
node: 20
runs-on: ubuntu-24.04
BUILD_TYPE: Debug
CCOMPILER: clang-16
CXXCOMPILER: clang++-16
ENABLE_CONAN: ON
NODE_PACKAGE_TESTS_ONLY: ON
# - name: conan-linux-debug-node
# build_node_package: true
# continue-on-error: false
# node: 20
# runs-on: ubuntu-24.04
# BUILD_TYPE: Debug
# CCOMPILER: clang-16
# CXXCOMPILER: clang++-16
# ENABLE_CONAN: ON
# NODE_PACKAGE_TESTS_ONLY: ON
- name: conan-macos-x64-release-node
build_node_package: true
continue-on-error: true
node: 20
runs-on: macos-13 # x86_64
BUILD_TYPE: Release
CCOMPILER: clang
CXXCOMPILER: clang++
CUCUMBER_TIMEOUT: 60000
ENABLE_ASSERTIONS: ON
ENABLE_CONAN: ON
# - name: conan-macos-x64-release-node
# build_node_package: true
# continue-on-error: true
# node: 20
# runs-on: macos-13 # x86_64
# BUILD_TYPE: Release
# CCOMPILER: clang
# CXXCOMPILER: clang++
# CUCUMBER_TIMEOUT: 60000
# ENABLE_ASSERTIONS: ON
# ENABLE_CONAN: ON
- name: conan-macos-arm64-release-node
build_node_package: true
continue-on-error: true
node: 20
runs-on: macos-14 # arm64
BUILD_TYPE: Release
CCOMPILER: clang
CXXCOMPILER: clang++
CUCUMBER_TIMEOUT: 60000
ENABLE_ASSERTIONS: ON
ENABLE_CONAN: ON
# - name: conan-macos-arm64-release-node
# build_node_package: true
# continue-on-error: true
# node: 20
# runs-on: macos-14 # arm64
# BUILD_TYPE: Release
# CCOMPILER: clang
# CXXCOMPILER: clang++
# CUCUMBER_TIMEOUT: 60000
# ENABLE_ASSERTIONS: ON
# ENABLE_CONAN: ON
name: ${{ matrix.name}}
continue-on-error: ${{ matrix.continue-on-error }}
@@ -446,14 +446,14 @@ jobs:
if: steps.cache-boost.outputs.cache-hit != 'true' && runner.os == 'Linux' && matrix.ENABLE_CONAN != 'ON'
run: |
BOOST_VERSION="1.85.0"
BOOST_VERSION_FLAVOR="${BOOST_VERSION}-b2-nodocs"
wget -q https://github.com/boostorg/boost/releases/download/boost-${BOOST_VERSION}/boost-${BOOST_VERSION_FLAVOR}.tar.gz
tar xzf boost-${BOOST_VERSION_FLAVOR}.tar.gz
cd boost-${BOOST_VERSION}
BOOST_VERSION_UNDERSCORE="${BOOST_VERSION//./_}"
wget -q https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION_UNDERSCORE}.tar.gz
tar xzf boost_${BOOST_VERSION_UNDERSCORE}.tar.gz
cd boost_${BOOST_VERSION_UNDERSCORE}
sudo ./bootstrap.sh
sudo ./b2 install
cd ..
sudo rm -rf boost-${BOOST_VERSION}*
sudo rm -rf boost_${BOOST_VERSION_UNDERSCORE}*
- name: Install dev dependencies
run: |
@@ -575,7 +575,13 @@ jobs:
# All tests assume to be run from the build directory
pushd ${OSRM_BUILD_DIR}
for i in ./unit_tests/*-tests ; do echo Running $i ; $i ; done
for i in $(seq 1 100); do
echo "Iteration $i"
for test in ./unit_tests/*-tests; do
echo "Running $test"
$test
done
done
if [ -z "${ENABLE_SANITIZER}" ]; then
npm run nodejs-tests
fi
@@ -657,130 +663,130 @@ jobs:
ccache -p
ccache -s
benchmarks:
if: github.event_name == 'pull_request'
needs: [format-taginfo-docs]
runs-on: self-hosted
env:
CCOMPILER: clang-16
CXXCOMPILER: clang++-16
CC: clang-16
CXX: clang++-16
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
GITHUB_REPOSITORY: ${{ github.repository }}
RUN_BIG_BENCHMARK: ${{ contains(github.event.pull_request.labels.*.name, 'Performance') }}
steps:
- name: Checkout PR Branch
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
path: pr
- name: Activate virtualenv
run: |
python3 -m venv .venv
source .venv/bin/activate
echo PATH=$PATH >> $GITHUB_ENV
pip install "conan<2.0.0" "requests==2.31.0" "numpy==1.26.4"
- name: Prepare data
run: |
if [ "$RUN_BIG_BENCHMARK" = "true" ]; then
rm -rf ~/data.osm.pbf
wget http://download.geofabrik.de/europe/poland-latest.osm.pbf -O ~/data.osm.pbf --quiet
gunzip -c ./pr/test/data/poland_gps_traces.csv.gz > ~/gps_traces.csv
else
if [ ! -f "~/data.osm.pbf" ]; then
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf -O ~/data.osm.pbf
else
echo "Using cached data.osm.pbf"
fi
gunzip -c ./pr/test/data/berlin_gps_traces.csv.gz > ~/gps_traces.csv
fi
- name: Prepare environment
run: |
echo "CCACHE_DIR=$HOME/.ccache" >> $GITHUB_ENV
mkdir -p $HOME/.ccache
ccache --zero-stats
ccache --max-size=256M
- name: Checkout Base Branch
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.base.ref }}
path: base
- name: Build Base Branch
run: |
cd base
npm ci --ignore-scripts
cd ..
mkdir base/build
cd base/build
cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_NODE_BINDINGS=ON ..
make -j$(nproc)
make -j$(nproc) benchmarks
cd ..
make -C test/data
- name: Build PR Branch
run: |
cd pr
npm ci --ignore-scripts
cd ..
mkdir -p pr/build
cd pr/build
cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_NODE_BINDINGS=ON ..
make -j$(nproc)
make -j$(nproc) benchmarks
cd ..
make -C test/data
# we run benchmarks in tmpfs to avoid impact of disk IO
- name: Create folder for tmpfs
run: |
# if by any chance it was mounted before(e.g. due to previous job failed), unmount it
sudo umount ~/benchmarks | true
rm -rf ~/benchmarks
mkdir -p ~/benchmarks
# see https://llvm.org/docs/Benchmarking.html
- name: Run PR Benchmarks
run: |
sudo cset shield -c 2-3 -k on
sudo mount -t tmpfs -o size=4g none ~/benchmarks
cp -rf pr/build ~/benchmarks/build
cp -rf pr/lib ~/benchmarks/lib
mkdir -p ~/benchmarks/test
cp -rf pr/test/data ~/benchmarks/test/data
cp -rf pr/profiles ~/benchmarks/profiles
# benchmarks:
# if: github.event_name == 'pull_request'
# needs: [format-taginfo-docs]
# runs-on: self-hosted
# env:
# CCOMPILER: clang-16
# CXXCOMPILER: clang++-16
# CC: clang-16
# CXX: clang++-16
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# PR_NUMBER: ${{ github.event.pull_request.number }}
# GITHUB_REPOSITORY: ${{ github.repository }}
# RUN_BIG_BENCHMARK: ${{ contains(github.event.pull_request.labels.*.name, 'Performance') }}
# steps:
# - name: Checkout PR Branch
# uses: actions/checkout@v4
# with:
# ref: ${{ github.head_ref }}
# path: pr
# - name: Activate virtualenv
# run: |
# python3 -m venv .venv
# source .venv/bin/activate
# echo PATH=$PATH >> $GITHUB_ENV
# pip install "conan<2.0.0" "requests==2.31.0" "numpy==1.26.4"
# - name: Prepare data
# run: |
# if [ "$RUN_BIG_BENCHMARK" = "true" ]; then
# rm -rf ~/data.osm.pbf
# wget http://download.geofabrik.de/europe/poland-latest.osm.pbf -O ~/data.osm.pbf --quiet
# gunzip -c ./pr/test/data/poland_gps_traces.csv.gz > ~/gps_traces.csv
# else
# if [ ! -f "~/data.osm.pbf" ]; then
# wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf -O ~/data.osm.pbf
# else
# echo "Using cached data.osm.pbf"
# fi
# gunzip -c ./pr/test/data/berlin_gps_traces.csv.gz > ~/gps_traces.csv
# fi
# - name: Prepare environment
# run: |
# echo "CCACHE_DIR=$HOME/.ccache" >> $GITHUB_ENV
# mkdir -p $HOME/.ccache
# ccache --zero-stats
# ccache --max-size=256M
# - name: Checkout Base Branch
# uses: actions/checkout@v4
# with:
# ref: ${{ github.event.pull_request.base.ref }}
# path: base
# - name: Build Base Branch
# run: |
# cd base
# npm ci --ignore-scripts
# cd ..
# mkdir base/build
# cd base/build
# cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_NODE_BINDINGS=ON ..
# make -j$(nproc)
# make -j$(nproc) benchmarks
# cd ..
# make -C test/data
# - name: Build PR Branch
# run: |
# cd pr
# npm ci --ignore-scripts
# cd ..
# mkdir -p pr/build
# cd pr/build
# cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_NODE_BINDINGS=ON ..
# make -j$(nproc)
# make -j$(nproc) benchmarks
# cd ..
# make -C test/data
# # we run benchmarks in tmpfs to avoid impact of disk IO
# - name: Create folder for tmpfs
# run: |
# # if by any chance it was mounted before(e.g. due to previous job failed), unmount it
# sudo umount ~/benchmarks | true
# rm -rf ~/benchmarks
# mkdir -p ~/benchmarks
# # see https://llvm.org/docs/Benchmarking.html
# - name: Run PR Benchmarks
# run: |
# sudo cset shield -c 2-3 -k on
# sudo mount -t tmpfs -o size=4g none ~/benchmarks
# cp -rf pr/build ~/benchmarks/build
# cp -rf pr/lib ~/benchmarks/lib
# mkdir -p ~/benchmarks/test
# cp -rf pr/test/data ~/benchmarks/test/data
# cp -rf pr/profiles ~/benchmarks/profiles
sudo cset shield --exec -- ./pr/scripts/ci/run_benchmarks.sh -f ~/benchmarks -r $(pwd)/pr_results -s $(pwd)/pr -b ~/benchmarks/build -o ~/data.osm.pbf -g ~/gps_traces.csv
sudo umount ~/benchmarks
sudo cset shield --reset
- name: Run Base Benchmarks
run: |
sudo cset shield -c 2-3 -k on
sudo mount -t tmpfs -o size=4g none ~/benchmarks
cp -rf base/build ~/benchmarks/build
cp -rf base/lib ~/benchmarks/lib
mkdir -p ~/benchmarks/test
cp -rf base/test/data ~/benchmarks/test/data
cp -rf base/profiles ~/benchmarks/profiles
# sudo cset shield --exec -- ./pr/scripts/ci/run_benchmarks.sh -f ~/benchmarks -r $(pwd)/pr_results -s $(pwd)/pr -b ~/benchmarks/build -o ~/data.osm.pbf -g ~/gps_traces.csv
# sudo umount ~/benchmarks
# sudo cset shield --reset
# - name: Run Base Benchmarks
# run: |
# sudo cset shield -c 2-3 -k on
# sudo mount -t tmpfs -o size=4g none ~/benchmarks
# cp -rf base/build ~/benchmarks/build
# cp -rf base/lib ~/benchmarks/lib
# mkdir -p ~/benchmarks/test
# cp -rf base/test/data ~/benchmarks/test/data
# cp -rf base/profiles ~/benchmarks/profiles
# TODO: remove it when base branch will have this file at needed location
if [ ! -f ~/benchmarks/test/data/portugal_to_korea.json ]; then
cp base/src/benchmarks/portugal_to_korea.json ~/benchmarks/test/data/portugal_to_korea.json
fi
# we intentionally use scripts from PR branch to be able to update them and see results in the same PR
sudo cset shield --exec -- cset shield --exec -- ./pr/scripts/ci/run_benchmarks.sh -f ~/benchmarks -r $(pwd)/base_results -s $(pwd)/pr -b ~/benchmarks/build -o ~/data.osm.pbf -g ~/gps_traces.csv
sudo umount ~/benchmarks
sudo cset shield --reset
- name: Post Benchmark Results
run: |
python3 pr/scripts/ci/post_benchmark_results.py base_results pr_results
- name: Show CCache statistics
run: |
ccache -p
ccache -s
# # TODO: remove it when base branch will have this file at needed location
# if [ ! -f ~/benchmarks/test/data/portugal_to_korea.json ]; then
# cp base/src/benchmarks/portugal_to_korea.json ~/benchmarks/test/data/portugal_to_korea.json
# fi
# # we intentionally use scripts from PR branch to be able to update them and see results in the same PR
# sudo cset shield --exec -- cset shield --exec -- ./pr/scripts/ci/run_benchmarks.sh -f ~/benchmarks -r $(pwd)/base_results -s $(pwd)/pr -b ~/benchmarks/build -o ~/data.osm.pbf -g ~/gps_traces.csv
# sudo umount ~/benchmarks
# sudo cset shield --reset
# - name: Post Benchmark Results
# run: |
# python3 pr/scripts/ci/post_benchmark_results.py base_results pr_results
# - name: Show CCache statistics
# run: |
# ccache -p
# ccache -s
ci-complete:
runs-on: ubuntu-22.04
needs: [build-test-publish, docker-image-matrix, windows-release-node, benchmarks]
steps:
- run: echo "CI complete"
# ci-complete:
# runs-on: ubuntu-22.04
# needs: [build-test-publish, docker-image-matrix, windows-release-node, benchmarks]
# steps:
# - run: echo "CI complete"
-3
View File
@@ -56,9 +56,6 @@ endif()
if (POLICY CMP0074)
cmake_policy(SET CMP0074 NEW)
endif()
if (POLICY CMP0167)
cmake_policy(SET CMP0167 NEW)
endif()
project(OSRM C CXX)
+12 -29
View File
@@ -1,34 +1,20 @@
FROM alpine:3.21.2 AS alpine-mimalloc
FROM alpine:3.20.0 as alpine-mimalloc
RUN apk update && \
apk upgrade && \
apk add --no-cache \
boost-iostreams \
boost-program_options \
boost-thread \
mimalloc
RUN apk add --no-cache mimalloc
ENV LD_PRELOAD=/usr/lib/libmimalloc.so.2
ENV MIMALLOC_LARGE_OS_PAGES=1
FROM alpine-mimalloc AS builder
FROM alpine-mimalloc as builder
ARG DOCKER_TAG
ARG BUILD_CONCURRENCY
RUN mkdir -p /src && mkdir -p /opt
RUN mkdir -p /src /opt && \
apk add --no-cache \
boost-dev \
boost-filesystem \
clang \
cmake \
expat-dev \
git \
libbz2 \
libxml2 \
lua5.4-dev \
make \
onetbb-dev
RUN apk add --no-cache \
cmake make git clang libbz2 libxml2 \
boost-dev boost-program_options boost-filesystem boost-iostreams boost-thread \
lua5.4-dev onetbb-dev expat-dev
COPY . /src
WORKDIR /src
@@ -53,18 +39,16 @@ RUN NPROC=${BUILD_CONCURRENCY:-$(nproc)} && \
rm -rf /src
# Multistage build to reduce image size - https://docs.docker.com/build/building/multi-stage/#use-multi-stage-builds
# Multistage build to reduce image size - https://docs.docker.com/engine/userguide/eng-image/multistage-build/#use-multi-stage-builds
# Only the content below ends up in the image, this helps remove /src from the image (which is large)
FROM alpine-mimalloc AS runstage
FROM alpine-mimalloc as runstage
COPY --from=builder /usr/local /usr/local
COPY --from=builder /opt /opt
RUN apk add --no-cache \
boost-date_time \
expat \
lua5.4 \
onetbb && \
boost-program_options boost-date_time boost-iostreams boost-thread \
expat lua5.4 onetbb && \
ldconfig /usr/local/lib
RUN /usr/local/bin/osrm-extract --help && \
@@ -76,4 +60,3 @@ RUN /usr/local/bin/osrm-extract --help && \
WORKDIR /opt
EXPOSE 5000
+21 -30
View File
@@ -1,24 +1,21 @@
FROM debian:bookworm-slim AS builder
FROM debian:bookworm-slim as builder
ARG DOCKER_TAG
ARG BUILD_CONCURRENCY
RUN mkdir -p /src && mkdir -p /opt
RUN mkdir -p /src /opt && \
apt-get update && \
apt-get -y --no-install-recommends --no-install-suggests install \
ca-certificates \
cmake \
g++ \
gcc \
git \
libboost1.81-all-dev \
libbz2-dev \
liblua5.4-dev \
libtbb-dev \
libxml2-dev \
libzip-dev \
lua5.4 \
make \
pkg-config
RUN apt-get update && \
apt-get -y --no-install-recommends install ca-certificates cmake make git gcc g++ libbz2-dev libxml2-dev wget \
libzip-dev libboost1.81-all-dev lua5.4 liblua5.4-dev pkg-config -o APT::Install-Suggests=0 -o APT::Install-Recommends=0
RUN NPROC=${BUILD_CONCURRENCY:-$(nproc)} && \
ldconfig /usr/local/lib && \
git clone --branch v2021.12.0 --single-branch https://github.com/oneapi-src/oneTBB.git && \
cd oneTBB && \
mkdir build && \
cd build && \
cmake -DTBB_TEST=OFF -DCMAKE_BUILD_TYPE=Release .. && \
cmake --build . && \
cmake --install .
COPY . /src
WORKDIR /src
@@ -44,24 +41,19 @@ RUN NPROC=${BUILD_CONCURRENCY:-$(nproc)} && \
rm -rf /src
# Multistage build to reduce image size - https://docs.docker.com/build/building/multi-stage/#use-multi-stage-builds
# Multistage build to reduce image size - https://docs.docker.com/engine/userguide/eng-image/multistage-build/#use-multi-stage-builds
# Only the content below ends up in the image, this helps remove /src from the image (which is large)
FROM debian:bookworm-slim AS runstage
FROM debian:bookworm-slim as runstage
COPY --from=builder /usr/local /usr/local
COPY --from=builder /opt /opt
RUN apt-get update && \
apt-get install -y --no-install-recommends --no-install-suggests \
expat \
libboost-date-time1.81.0 \
libboost-iostreams1.81.0 \
libboost-program-options1.81.0 \
libboost-thread1.81.0 \
liblua5.4-0 \
libtbb12 && \
apt-get install -y --no-install-recommends \
libboost-program-options1.81.0 libboost-date-time1.81.0 libboost-iostreams1.81.0 libboost-thread1.81.0 \
expat liblua5.4-0 && \
rm -rf /var/lib/apt/lists/* && \
# Add /usr/local/lib to ldconfig to allow loading libraries from there
# add /usr/local/lib to ldconfig to allow loading libraries from there
ldconfig /usr/local/lib
RUN /usr/local/bin/osrm-extract --help && \
@@ -73,4 +65,3 @@ RUN /usr/local/bin/osrm-extract --help && \
WORKDIR /opt
EXPOSE 5000
+3 -3
View File
@@ -100,9 +100,9 @@ class CellCustomizer
distances.front() =
inserted ? heap.GetData(destination).distance : INVALID_EDGE_DISTANCE;
weights.advance(1);
durations.advance(1);
distances.advance(1);
weights.advance_begin(1);
durations.advance_begin(1);
distances.advance_begin(1);
}
BOOST_ASSERT(weights.empty());
BOOST_ASSERT(durations.empty());
+3 -3
View File
@@ -136,7 +136,7 @@ class NearestAPI final : public BaseAPI
forward_geometry = facade.GetUncompressedForwardGeometry(geometry_id);
auto osm_node_id =
facade.GetOSMNodeIDOfNode(forward_geometry[phantom_node.fwd_segment_position]);
facade.GetOSMNodeIDOfNode(forward_geometry(phantom_node.fwd_segment_position));
to_node = static_cast<std::uint64_t>(osm_node_id);
}
@@ -146,14 +146,14 @@ class NearestAPI final : public BaseAPI
const auto geometry_id = facade.GetGeometryIndex(segment_id).id;
const auto geometry = facade.GetUncompressedForwardGeometry(geometry_id);
auto osm_node_id =
facade.GetOSMNodeIDOfNode(geometry[phantom_node.fwd_segment_position + 1]);
facade.GetOSMNodeIDOfNode(geometry(phantom_node.fwd_segment_position + 1));
from_node = static_cast<std::uint64_t>(osm_node_id);
}
else if (phantom_node.forward_segment_id.enabled && phantom_node.fwd_segment_position > 0)
{
// In the case of one way, rely on forward segment only
auto osm_node_id =
facade.GetOSMNodeIDOfNode(forward_geometry[phantom_node.fwd_segment_position - 1]);
facade.GetOSMNodeIDOfNode(forward_geometry(phantom_node.fwd_segment_position - 1));
from_node = static_cast<std::uint64_t>(osm_node_id);
}
+1
View File
@@ -13,6 +13,7 @@
#include <boost/archive/iterators/base64_from_binary.hpp>
#include <boost/archive/iterators/binary_from_base64.hpp>
#include <boost/archive/iterators/transform_width.hpp>
#include <boost/range/algorithm/copy.hpp>
namespace osrm
{
+11 -10
View File
@@ -29,11 +29,13 @@
#include "util/typedefs.hpp"
#include "osrm/coordinate.hpp"
#include <boost/range/adaptor/reversed.hpp>
#include <boost/range/any_range.hpp>
#include <cstddef>
#include <engine/bearing.hpp>
#include <optional>
#include <ranges>
#include <string>
#include <string_view>
#include <utility>
@@ -48,21 +50,20 @@ class BaseDataFacade
using RTreeLeaf = extractor::EdgeBasedNodeSegment;
using NodeForwardRange =
std::ranges::subrange<extractor::SegmentDataView::SegmentNodeVector::const_iterator>;
using NodeReverseRange = std::ranges::reverse_view<NodeForwardRange>;
boost::iterator_range<extractor::SegmentDataView::SegmentNodeVector::const_iterator>;
using NodeReverseRange = boost::reversed_range<const NodeForwardRange>;
using WeightForwardRange =
std::ranges::subrange<extractor::SegmentDataView::SegmentWeightVector::const_iterator>;
using WeightReverseRange = std::ranges::reverse_view<WeightForwardRange>;
boost::iterator_range<extractor::SegmentDataView::SegmentWeightVector::const_iterator>;
using WeightReverseRange = boost::reversed_range<const WeightForwardRange>;
using DurationForwardRange =
std::ranges::subrange<extractor::SegmentDataView::SegmentDurationVector::const_iterator>;
using DurationReverseRange = std::ranges::reverse_view<DurationForwardRange>;
boost::iterator_range<extractor::SegmentDataView::SegmentDurationVector::const_iterator>;
using DurationReverseRange = boost::reversed_range<const DurationForwardRange>;
using DatasourceForwardRange =
std::ranges::subrange<extractor::SegmentDataView::SegmentDatasourceVector::const_iterator>;
using DatasourceReverseRange = std::ranges::reverse_view<DatasourceForwardRange>;
boost::iterator_range<extractor::SegmentDataView::SegmentDatasourceVector::const_iterator>;
using DatasourceReverseRange = boost::reversed_range<const DatasourceForwardRange>;
BaseDataFacade() {}
virtual ~BaseDataFacade() {}
+2 -2
View File
@@ -394,7 +394,7 @@ template <typename RTreeT, typename DataFacadeT> class GeospatialQuery
alias_cast<EdgeDuration>(forward_durations[data.fwd_segment_position]);
EdgeDistance forward_distance =
to_alias<EdgeDistance>(util::coordinate_calculation::greatCircleDistance(
datafacade.GetCoordinateOfNode(forward_geometry[data.fwd_segment_position]),
datafacade.GetCoordinateOfNode(forward_geometry(data.fwd_segment_position)),
point_on_segment));
const auto reverse_weight_offset = alias_cast<EdgeWeight>(
@@ -426,7 +426,7 @@ template <typename RTreeT, typename DataFacadeT> class GeospatialQuery
EdgeDistance reverse_distance =
to_alias<EdgeDistance>(util::coordinate_calculation::greatCircleDistance(
point_on_segment,
datafacade.GetCoordinateOfNode(forward_geometry[data.fwd_segment_position + 1])));
datafacade.GetCoordinateOfNode(forward_geometry(data.fwd_segment_position + 1))));
ratio = std::min(1.0, std::max(0.0, ratio));
if (data.forward_segment_id.id != SPECIAL_SEGMENTID)
@@ -61,7 +61,7 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade,
const auto source_geometry_id = facade.GetGeometryIndex(source_node_id).id;
const auto source_geometry = facade.GetUncompressedForwardGeometry(source_geometry_id);
geometry.node_ids.push_back(source_geometry[source_segment_start_coordinate]);
geometry.node_ids.push_back(source_geometry(source_segment_start_coordinate));
auto cumulative_distance = 0.;
auto current_distance = 0.;
@@ -142,7 +142,7 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade,
LegGeometry::Annotation{current_distance,
duration,
weight,
forward_datasources[target_node.fwd_segment_position]});
forward_datasources(target_node.fwd_segment_position)});
}
else
{
@@ -154,7 +154,7 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade,
from_alias<double>(reversed_target ? target_node.reverse_weight
: target_node.forward_weight) /
facade.GetWeightMultiplier(),
forward_datasources[target_node.fwd_segment_position]});
forward_datasources(target_node.fwd_segment_position)});
}
geometry.segment_offsets.push_back(geometry.locations.size());
@@ -168,7 +168,7 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade,
const auto target_segment_end_coordinate =
target_node.fwd_segment_position + (reversed_target ? 0 : 1);
const auto target_geometry = facade.GetUncompressedForwardGeometry(target_geometry_id);
geometry.node_ids.push_back(target_geometry[target_segment_end_coordinate]);
geometry.node_ids.push_back(target_geometry(target_segment_end_coordinate));
BOOST_ASSERT(geometry.segment_distances.size() == geometry.segment_offsets.size() - 1);
BOOST_ASSERT(geometry.locations.size() > geometry.segment_distances.size());
+3 -3
View File
@@ -14,7 +14,7 @@
#include <string>
#include <vector>
#include <ranges>
#include <boost/range/iterator_range.hpp>
namespace osrm::engine::guidance
{
@@ -220,14 +220,14 @@ inline auto RouteStep::LanesToTheLeft() const
{
const auto &description = intersections.front().lane_description;
LaneID num_lanes_left = NumLanesToTheLeft();
return std::ranges::subrange(description.begin(), description.begin() + num_lanes_left);
return boost::make_iterator_range(description.begin(), description.begin() + num_lanes_left);
}
inline auto RouteStep::LanesToTheRight() const
{
const auto &description = intersections.front().lane_description;
LaneID num_lanes_right = NumLanesToTheRight();
return std::ranges::subrange(description.end() - num_lanes_right, description.end());
return boost::make_iterator_range(description.end() - num_lanes_right, description.end());
}
} // namespace osrm::engine::guidance
-2
View File
@@ -6,8 +6,6 @@
#include <algorithm>
#include <cctype>
#include <cstdint>
#include <limits>
#include <string>
namespace osrm::extractor
{
+4 -2
View File
@@ -5,6 +5,8 @@
#include "restriction_graph.hpp"
#include "util/typedefs.hpp"
#include <boost/range/adaptor/filtered.hpp>
#include <unordered_map>
#include <utility>
#include <vector>
@@ -24,7 +26,7 @@ template <typename RestrictionFilter> class NodeRestrictionMap
// Find all restrictions applicable to (from,via,*) turns
auto Restrictions(NodeID from, NodeID via) const
{
return getRange(from, via) | std::views::filter(index_filter);
return getRange(from, via) | boost::adaptors::filtered(index_filter);
};
// Find all restrictions applicable to (from,via,to) turns
@@ -32,7 +34,7 @@ template <typename RestrictionFilter> class NodeRestrictionMap
{
const auto turnFilter = [this, to](const auto &restriction)
{ return index_filter(restriction) && restriction->IsTurnRestricted(to); };
return getRange(from, via) | std::views::filter(turnFilter);
return getRange(from, via) | boost::adaptors::filtered(turnFilter);
};
private:
+3 -3
View File
@@ -6,7 +6,7 @@
#include "util/node_based_graph.hpp"
#include "util/std_hash.hpp"
#include "util/typedefs.hpp"
#include <ranges>
#include <unordered_map>
namespace osrm::extractor
@@ -102,9 +102,9 @@ struct RestrictionGraph
friend restriction_graph_details::transferBuilder;
friend RestrictionGraph constructRestrictionGraph(const std::vector<TurnRestriction> &);
using EdgeRange = std::ranges::subrange<std::vector<RestrictionEdge>::const_iterator>;
using EdgeRange = boost::iterator_range<std::vector<RestrictionEdge>::const_iterator>;
using RestrictionRange =
std::ranges::subrange<std::vector<const TurnRestriction *>::const_iterator>;
boost::iterator_range<std::vector<const TurnRestriction *>::const_iterator>;
using EdgeKey = std::pair<NodeID, NodeID>;
// Helper functions for iterating over node restrictions and edges
+20 -17
View File
@@ -7,8 +7,11 @@
#include "storage/shared_memory_ownership.hpp"
#include "storage/tar_fwd.hpp"
#include <boost/range/adaptor/reversed.hpp>
#include <boost/range/iterator_range.hpp>
#include <filesystem>
#include <ranges>
#include <string>
#include <unordered_map>
#include <vector>
@@ -76,12 +79,12 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = nodes.begin() + index[id];
const auto end = nodes.begin() + index[id + 1];
return std::ranges::subrange(begin, end);
return boost::make_iterator_range(begin, end);
}
auto GetReverseGeometry(const DirectionalGeometryID id)
{
return GetForwardGeometry(id) | std::views::reverse;
return boost::adaptors::reverse(GetForwardGeometry(id));
}
auto GetForwardDurations(const DirectionalGeometryID id)
@@ -89,7 +92,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = fwd_durations.begin() + index[id] + 1;
const auto end = fwd_durations.begin() + index[id + 1];
return std::ranges::subrange(begin, end);
return boost::make_iterator_range(begin, end);
}
auto GetReverseDurations(const DirectionalGeometryID id)
@@ -97,7 +100,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = rev_durations.begin() + index[id];
const auto end = rev_durations.begin() + index[id + 1] - 1;
return std::ranges::subrange(begin, end) | std::views::reverse;
return boost::adaptors::reverse(boost::make_iterator_range(begin, end));
}
auto GetForwardWeights(const DirectionalGeometryID id)
@@ -105,7 +108,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = fwd_weights.begin() + index[id] + 1;
const auto end = fwd_weights.begin() + index[id + 1];
return std::ranges::subrange(begin, end);
return boost::make_iterator_range(begin, end);
}
auto GetReverseWeights(const DirectionalGeometryID id)
@@ -113,7 +116,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = rev_weights.begin() + index[id];
const auto end = rev_weights.begin() + index[id + 1] - 1;
return std::ranges::subrange(begin, end) | std::views::reverse;
return boost::adaptors::reverse(boost::make_iterator_range(begin, end));
}
auto GetForwardDatasources(const DirectionalGeometryID id)
@@ -121,7 +124,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = fwd_datasources.begin() + index[id] + 1;
const auto end = fwd_datasources.begin() + index[id + 1];
return std::ranges::subrange(begin, end);
return boost::make_iterator_range(begin, end);
}
auto GetReverseDatasources(const DirectionalGeometryID id)
@@ -129,7 +132,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = rev_datasources.begin() + index[id];
const auto end = rev_datasources.begin() + index[id + 1] - 1;
return std::ranges::subrange(begin, end) | std::views::reverse;
return boost::adaptors::reverse(boost::make_iterator_range(begin, end));
}
auto GetForwardGeometry(const DirectionalGeometryID id) const
@@ -137,12 +140,12 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = nodes.cbegin() + index[id];
const auto end = nodes.cbegin() + index[id + 1];
return std::ranges::subrange(begin, end);
return boost::make_iterator_range(begin, end);
}
auto GetReverseGeometry(const DirectionalGeometryID id) const
{
return GetForwardGeometry(id) | std::views::reverse;
return boost::adaptors::reverse(GetForwardGeometry(id));
}
auto GetForwardDurations(const DirectionalGeometryID id) const
@@ -150,7 +153,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = fwd_durations.cbegin() + index[id] + 1;
const auto end = fwd_durations.cbegin() + index[id + 1];
return std::ranges::subrange(begin, end);
return boost::make_iterator_range(begin, end);
}
auto GetReverseDurations(const DirectionalGeometryID id) const
@@ -158,7 +161,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = rev_durations.cbegin() + index[id];
const auto end = rev_durations.cbegin() + index[id + 1] - 1;
return std::ranges::subrange(begin, end) | std::views::reverse;
return boost::adaptors::reverse(boost::make_iterator_range(begin, end));
}
auto GetForwardWeights(const DirectionalGeometryID id) const
@@ -166,7 +169,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = fwd_weights.cbegin() + index[id] + 1;
const auto end = fwd_weights.cbegin() + index[id + 1];
return std::ranges::subrange(begin, end);
return boost::make_iterator_range(begin, end);
}
auto GetReverseWeights(const DirectionalGeometryID id) const
@@ -174,7 +177,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = rev_weights.cbegin() + index[id];
const auto end = rev_weights.cbegin() + index[id + 1] - 1;
return std::ranges::subrange(begin, end) | std::views::reverse;
return boost::adaptors::reverse(boost::make_iterator_range(begin, end));
}
auto GetForwardDatasources(const DirectionalGeometryID id) const
@@ -182,7 +185,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = fwd_datasources.cbegin() + index[id] + 1;
const auto end = fwd_datasources.cbegin() + index[id + 1];
return std::ranges::subrange(begin, end);
return boost::make_iterator_range(begin, end);
}
auto GetReverseDatasources(const DirectionalGeometryID id) const
@@ -190,7 +193,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = rev_datasources.cbegin() + index[id];
const auto end = rev_datasources.cbegin() + index[id + 1] - 1;
return std::ranges::subrange(begin, end) | std::views::reverse;
return boost::adaptors::reverse(boost::make_iterator_range(begin, end));
}
auto GetNumberOfGeometries() const { return index.size() - 1; }
+2 -2
View File
@@ -5,7 +5,7 @@
#include <boost/iterator/filter_iterator.hpp>
#include <boost/iterator/iterator_facade.hpp>
#include <ranges>
#include <boost/range/iterator_range.hpp>
#include <cstddef>
#include <cstdint>
@@ -40,7 +40,7 @@ class BisectionGraphView
// Iteration over all nodes (direct access into the node)
ConstNodeIterator Begin() const;
ConstNodeIterator End() const;
auto Nodes() const { return std::ranges::subrange(begin, end); }
auto Nodes() const { return boost::make_iterator_range(begin, end); }
// Re-Construct the ID of a node from a reference
NodeID GetID(const NodeT &node) const;
+12 -10
View File
@@ -14,7 +14,9 @@
#include "customizer/cell_metric.hpp"
#include <ranges>
#include <boost/iterator/iterator_facade.hpp>
#include <boost/range/iterator_range.hpp>
#include <tbb/parallel_sort.h>
#include <algorithm>
@@ -126,19 +128,19 @@ template <storage::Ownership Ownership> class CellStorageImpl
friend class ::boost::iterator_core_access;
ValuePtrT current;
std::size_t stride;
const std::size_t stride;
};
template <typename ValuePtr> auto GetOutRange(const ValuePtr ptr, const NodeID node) const
{
auto iter = std::find(source_boundary, source_boundary + num_source_nodes, node);
if (iter == source_boundary + num_source_nodes)
return std::ranges::subrange(ptr, ptr);
return boost::make_iterator_range(ptr, ptr);
auto row = std::distance(source_boundary, iter);
auto begin = ptr + num_destination_nodes * row;
auto end = begin + num_destination_nodes;
return std::ranges::subrange(begin, end);
return boost::make_iterator_range(begin, end);
}
template <typename ValuePtr> auto GetInRange(const ValuePtr ptr, const NodeID node) const
@@ -146,14 +148,14 @@ template <storage::Ownership Ownership> class CellStorageImpl
auto iter =
std::find(destination_boundary, destination_boundary + num_destination_nodes, node);
if (iter == destination_boundary + num_destination_nodes)
return std::ranges::subrange(ColumnIterator<ValuePtr>{},
ColumnIterator<ValuePtr>{});
return boost::make_iterator_range(ColumnIterator<ValuePtr>{},
ColumnIterator<ValuePtr>{});
auto column = std::distance(destination_boundary, iter);
auto begin = ColumnIterator<ValuePtr>{ptr + column, num_destination_nodes};
auto end = ColumnIterator<ValuePtr>{
ptr + column + num_source_nodes * num_destination_nodes, num_destination_nodes};
return std::ranges::subrange(begin, end);
return boost::make_iterator_range(begin, end);
}
public:
@@ -171,13 +173,13 @@ template <storage::Ownership Ownership> class CellStorageImpl
auto GetSourceNodes() const
{
return std::ranges::subrange(source_boundary, source_boundary + num_source_nodes);
return boost::make_iterator_range(source_boundary, source_boundary + num_source_nodes);
}
auto GetDestinationNodes() const
{
return std::ranges::subrange(destination_boundary,
destination_boundary + num_destination_nodes);
return boost::make_iterator_range(destination_boundary,
destination_boundary + num_destination_nodes);
}
CellImpl(const CellData &data,
@@ -18,7 +18,7 @@
#include <numeric>
#include <vector>
#include <ranges>
#include <boost/range/adaptor/reversed.hpp>
namespace osrm::partitioner
{
@@ -281,7 +281,7 @@ template <storage::Ownership Ownership> class MultiLevelPartitionImpl final
// top down assign new cell ids
LevelID level = partitions.size();
for (const auto &partition : std::ranges::reverse_view(partitions))
for (const auto &partition : boost::adaptors::reverse(partitions))
{
BOOST_ASSERT(permutation.size() > 0);
CellID last_cell_id = partition[permutation.front()];
+12 -11
View File
@@ -8,7 +8,8 @@
#include <vector>
#include "util/typedefs.hpp"
#include <ranges>
#include <boost/range/iterator_range.hpp>
namespace osrm::partitioner
{
@@ -83,26 +84,26 @@ template <typename NodeEntryT, typename EdgeEntryT> class RemappableGraph
auto Edges(const NodeID nid)
{
return std::ranges::subrange(edges.begin() + nodes[nid].edges_begin,
edges.begin() + nodes[nid].edges_end);
return boost::make_iterator_range(edges.begin() + nodes[nid].edges_begin,
edges.begin() + nodes[nid].edges_end);
}
auto Edges(const NodeID nid) const
{
return std::ranges::subrange(edges.begin() + nodes[nid].edges_begin,
edges.begin() + nodes[nid].edges_end);
return boost::make_iterator_range(edges.begin() + nodes[nid].edges_begin,
edges.begin() + nodes[nid].edges_end);
}
auto Edges(const NodeT &node)
{
return std::ranges::subrange(edges.begin() + node.edges_begin,
edges.begin() + node.edges_end);
return boost::make_iterator_range(edges.begin() + node.edges_begin,
edges.begin() + node.edges_end);
}
auto Edges(const NodeT &node) const
{
return std::ranges::subrange(edges.begin() + node.edges_begin,
edges.begin() + node.edges_end);
return boost::make_iterator_range(edges.begin() + node.edges_begin,
edges.begin() + node.edges_end);
}
auto BeginEdges(const NodeID nid) const { return edges.begin() + nodes[nid].edges_begin; }
@@ -117,8 +118,8 @@ template <typename NodeEntryT, typename EdgeEntryT> class RemappableGraph
EdgeID EndEdgeID(const NodeID nid) const { return nodes[nid].edges_end; }
// iterate over all nodes
auto Nodes() { return std::ranges::subrange(nodes.begin(), nodes.end()); }
auto Nodes() const { return std::ranges::subrange(nodes.begin(), nodes.end()); }
auto Nodes() { return boost::make_iterator_range(nodes.begin(), nodes.end()); }
auto Nodes() const { return boost::make_iterator_range(nodes.begin(), nodes.end()); }
NodeID GetID(const NodeT &node) const
{
+2 -2
View File
@@ -4,7 +4,7 @@
#include "util/msb.hpp"
#include <bit>
#include <boost/iterator/iterator_facade.hpp>
#include <ranges>
#include <boost/range/iterator_range.hpp>
namespace osrm::util
{
@@ -58,7 +58,7 @@ class BitIterator : public boost::iterator_facade<BitIterator<DataT>,
// Returns range over all 1 bits of value
template <typename T> auto makeBitRange(const T value)
{
return std::ranges::subrange(BitIterator<T>{value}, BitIterator<T>{});
return boost::make_iterator_range(BitIterator<T>{value}, BitIterator<T>{});
}
} // namespace osrm::util
-2
View File
@@ -340,8 +340,6 @@ template <typename T, std::size_t Bits, storage::Ownership Ownership> class Pack
{
}
ReferenceT operator[](difference_type n) const { return container->operator[](index + n); }
private:
void increment() { ++index; }
void decrement() { --index; }
-2
View File
@@ -42,8 +42,6 @@ class VectorViewIterator : public boost::iterator_facade<VectorViewIterator<Data
explicit VectorViewIterator() : m_value(nullptr) {}
explicit VectorViewIterator(DataT *x) : m_value(x) {}
reference operator[](difference_type n) const { return m_value[n]; }
private:
void increment() { ++m_value; }
void decrement() { --m_value; }
+1
View File
@@ -13,6 +13,7 @@
#include <boost/assert.hpp>
#include <boost/numeric/conversion/cast.hpp>
#include <boost/range/iterator_range.hpp>
#include <algorithm>
#include <cmath>
+3 -4
View File
@@ -482,10 +482,9 @@ void encodeVectorTile(const DataFacadeBase &facade,
reverse_duration_range[reverse_duration_range.size() -
edge.fwd_segment_position - 1];
const auto forward_datasource_idx =
forward_datasource_range[edge.fwd_segment_position];
const auto reverse_datasource_idx =
reverse_datasource_range[reverse_datasource_range.size() -
edge.fwd_segment_position - 1];
forward_datasource_range(edge.fwd_segment_position);
const auto reverse_datasource_idx = reverse_datasource_range(
reverse_datasource_range.size() - edge.fwd_segment_position - 1);
const auto is_startpoint = edge.is_startpoint;
@@ -2,7 +2,7 @@
#include "engine/routing_algorithms/routing_base_ch.hpp"
#include <boost/assert.hpp>
#include <ranges>
#include <boost/range/iterator_range_core.hpp>
#include <limits>
#include <memory>
@@ -106,7 +106,7 @@ void forwardRoutingStep(const DataFacade<Algorithm> &facade,
search_space_with_buckets.end(),
heapNode.node,
NodeBucket::Compare());
for (const auto &current_bucket : std::ranges::subrange(bucket_list.first, bucket_list.second))
for (const auto &current_bucket : boost::make_iterator_range(bucket_list))
{
// Get target id from bucket entry
const auto column_index = current_bucket.column_index;
@@ -2,7 +2,7 @@
#include "engine/routing_algorithms/routing_base_mld.hpp"
#include <boost/assert.hpp>
#include <ranges>
#include <boost/range/iterator_range_core.hpp>
#include <limits>
#include <memory>
@@ -148,8 +148,8 @@ void relaxOutgoingEdges(
}
}
++destination;
shortcut_durations.advance(1);
shortcut_distances.advance(1);
shortcut_durations.advance_begin(1);
shortcut_distances.advance_begin(1);
}
BOOST_ASSERT(shortcut_durations.empty());
BOOST_ASSERT(shortcut_distances.empty());
@@ -169,8 +169,8 @@ void relaxOutgoingEdges(
if (shortcut_weight != INVALID_EDGE_WEIGHT && heapNode.node != to)
{
const auto to_weight = heapNode.weight + shortcut_weight;
const auto to_duration = heapNode.data.duration + *shortcut_durations.begin();
const auto to_distance = heapNode.data.distance + *shortcut_distances.begin();
const auto to_duration = heapNode.data.duration + shortcut_durations.front();
const auto to_distance = heapNode.data.distance + shortcut_distances.front();
const auto toHeapNode = query_heap.GetHeapNodeIfWasInserted(to);
if (!toHeapNode)
{
@@ -189,8 +189,8 @@ void relaxOutgoingEdges(
}
}
++source;
shortcut_durations.advance(1);
shortcut_distances.advance(1);
shortcut_durations.advance_begin(1);
shortcut_distances.advance_begin(1);
}
BOOST_ASSERT(shortcut_durations.empty());
BOOST_ASSERT(shortcut_distances.empty());
@@ -426,7 +426,7 @@ void forwardRoutingStep(const DataFacade<Algorithm> &facade,
search_space_with_buckets.end(),
heapNode.node,
NodeBucket::Compare());
for (const auto &current_bucket : std::ranges::subrange(bucket_list.first, bucket_list.second))
for (const auto &current_bucket : boost::make_iterator_range(bucket_list))
{
// Get target id from bucket entry
const auto column_idx = current_bucket.column_index;
+5 -2
View File
@@ -968,8 +968,11 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges(
buffer->continuous_data.push_back(edge_with_data);
// get conditional restrictions that apply to this turn
auto restrictions = conditional_node_restriction_map.Restrictions(
incoming_edge.node, outgoing_edge.node, outgoing_edge_target);
const auto &restrictions =
conditional_node_restriction_map.Restrictions(
incoming_edge.node,
outgoing_edge.node,
outgoing_edge_target);
for (const auto &restriction : restrictions)
{
buffer->conditionals.push_back(
@@ -424,11 +424,13 @@ double findEdgeLength(const IntersectionEdgeGeometries &geometries, const EdgeID
}
template <typename RestrictionsRange>
bool isTurnRestricted(RestrictionsRange restrictions, const NodeID to)
bool isTurnRestricted(const RestrictionsRange &restrictions, const NodeID to)
{
// Check if any of the restrictions would prevent a turn to 'to'
return std::ranges::any_of(
restrictions, [&to](const auto &restriction) { return restriction->IsTurnRestricted(to); });
return std::any_of(restrictions.begin(),
restrictions.end(),
[&to](const auto &restriction)
{ return restriction->IsTurnRestricted(to); });
}
bool isTurnAllowed(const util::NodeBasedDynamicGraph &graph,
+7 -5
View File
@@ -5,6 +5,8 @@
#include "util/timing_util.hpp"
#include <util/for_each_pair.hpp>
#include <boost/range/algorithm/copy.hpp>
namespace osrm::extractor
{
@@ -274,16 +276,16 @@ RestrictionGraph constructRestrictionGraph(const std::vector<TurnRestriction> &t
RestrictionGraph::RestrictionRange RestrictionGraph::GetRestrictions(RestrictionID id) const
{
const auto &node = nodes[id];
return std::ranges::subrange(restrictions.begin() + node.restrictions_begin_idx,
restrictions.begin() + node.restrictions_begin_idx +
node.num_restrictions);
return boost::make_iterator_range(restrictions.begin() + node.restrictions_begin_idx,
restrictions.begin() + node.restrictions_begin_idx +
node.num_restrictions);
}
RestrictionGraph::EdgeRange RestrictionGraph::GetEdges(RestrictionID id) const
{
const auto &node = nodes[id];
return std::ranges::subrange(edges.begin() + node.edges_begin_idx,
edges.begin() + node.edges_begin_idx + node.num_edges);
return boost::make_iterator_range(edges.begin() + node.edges_begin_idx,
edges.begin() + node.edges_begin_idx + node.num_edges);
}
} // namespace osrm::extractor
+1 -1
View File
@@ -124,7 +124,7 @@ bisectionToPartition(const std::vector<BisectionID> &node_to_bisection_id,
std::vector<std::uint32_t> num_cells(max_cell_sizes.size());
int level_idx = max_cell_sizes.size() - 1;
for (auto max_cell_size : std::ranges::reverse_view(max_cell_sizes))
for (auto max_cell_size : boost::adaptors::reverse(max_cell_sizes))
{
BOOST_ASSERT(level_idx >= 0);
partitionLevel(node_to_bisection_id, max_cell_size, permutation, cells);
+5 -5
View File
@@ -252,11 +252,11 @@ updateSegmentData(const UpdaterConfig &config,
// In this case we want it oriented from in forward directions
auto rev_weights_range =
segment_data.GetReverseWeights(geometry_id) | std::views::reverse;
boost::adaptors::reverse(segment_data.GetReverseWeights(geometry_id));
auto rev_durations_range =
segment_data.GetReverseDurations(geometry_id) | std::views::reverse;
boost::adaptors::reverse(segment_data.GetReverseDurations(geometry_id));
auto rev_datasources_range =
segment_data.GetReverseDatasources(geometry_id) | std::views::reverse;
boost::adaptors::reverse(segment_data.GetReverseDatasources(geometry_id));
bool rev_was_updated = false;
for (const auto segment_offset :
@@ -337,11 +337,11 @@ updateSegmentData(const UpdaterConfig &config,
auto new_fwd_durations_range = segment_data.GetForwardDurations(geometry_id);
auto new_fwd_datasources_range = segment_data.GetForwardDatasources(geometry_id);
auto new_rev_durations_range =
segment_data.GetReverseDurations(geometry_id) | std::views::reverse;
boost::adaptors::reverse(segment_data.GetReverseDurations(geometry_id));
auto new_rev_datasources_range = segment_data.GetReverseDatasources(geometry_id);
auto old_fwd_durations_range = segment_data_backup->GetForwardDurations(geometry_id);
auto old_rev_durations_range =
segment_data_backup->GetReverseDurations(geometry_id) | std::views::reverse;
boost::adaptors::reverse(segment_data_backup->GetReverseDurations(geometry_id));
for (const auto segment_offset :
util::irange<std::size_t>(0, new_fwd_durations_range.size()))
+1 -2
View File
@@ -6752,8 +6752,7 @@ namespace sol {
static_assert(std::is_constructible<T, Args&&...>::value, "T must be constructible with Args");
*this = nullopt;
new (static_cast<void*>(this)) optional(std::in_place, std::forward<Args>(args)...);
return **this;
this->construct(std::forward<Args>(args)...);
}
/// Swaps this optional with the other.
+7 -5
View File
@@ -4,7 +4,6 @@
#include "util/integer_range.hpp"
#include <boost/test/unit_test.hpp>
#include <ranges>
namespace osrm::engine
{
@@ -72,17 +71,20 @@ struct ExternalCellStorage
{
auto GetOutWeight(NodeID /*node*/) const
{
return std::ranges::subrange((EdgeWeight *)0, (EdgeWeight *)0);
return boost::make_iterator_range((EdgeWeight *)0, (EdgeWeight *)0);
}
auto GetInWeight(NodeID /*node*/) const
{
return std::ranges::subrange((EdgeWeight *)0, (EdgeWeight *)0);
return boost::make_iterator_range((EdgeWeight *)0, (EdgeWeight *)0);
}
auto GetSourceNodes() const { return std::ranges::subrange((NodeID *)0, (NodeID *)0); }
auto GetSourceNodes() const { return boost::make_iterator_range((NodeID *)0, (NodeID *)0); }
auto GetDestinationNodes() const { return std::ranges::subrange((NodeID *)0, (NodeID *)0); }
auto GetDestinationNodes() const
{
return boost::make_iterator_range((NodeID *)0, (NodeID *)0);
}
};
using Cell = CellImpl;
+112 -90
View File
@@ -5,6 +5,9 @@
#include "osrm/extractor_config.hpp"
#include <boost/algorithm/string.hpp>
#include <oneapi/tbb/global_control.h>
#include <oneapi/tbb/parallel_for.h>
#include <tbb/flow_graph.h>
#include <thread>
// utility class to redirect stderr so we can test it
@@ -29,16 +32,24 @@ class redirect_stderr
BOOST_AUTO_TEST_SUITE(library_extract)
BOOST_AUTO_TEST_CASE(dummy)
{
BOOST_CHECK(true);
}
BOOST_AUTO_TEST_CASE(test_extract_with_invalid_config)
{
oneapi::tbb::task_scheduler_handle handle{tbb::attach{}};
osrm::ExtractorConfig config;
config.requested_num_threads = std::thread::hardware_concurrency();
BOOST_CHECK_THROW(osrm::extract(config),
std::exception); // including osrm::util::exception, osmium::io_error, etc.
oneapi::tbb::finalize(handle);
}
BOOST_AUTO_TEST_CASE(test_extract_with_valid_config)
{
oneapi::tbb::task_scheduler_handle handle{tbb::attach{}};
osrm::ExtractorConfig config;
config.input_path = OSRM_TEST_DATA_DIR "/monaco.osm.pbf";
config.UseDefaultOutputNames(OSRM_TEST_DATA_DIR "/monaco.osm.pbf");
@@ -46,116 +57,127 @@ BOOST_AUTO_TEST_CASE(test_extract_with_valid_config)
config.small_component_size = 1000;
config.requested_num_threads = std::thread::hardware_concurrency();
BOOST_CHECK_NO_THROW(osrm::extract(config));
oneapi::tbb::finalize(handle);
}
BOOST_AUTO_TEST_CASE(test_setup_runtime_error)
{
osrm::ExtractorConfig config;
config.input_path = OSRM_TEST_DATA_DIR "/monaco.osm.pbf";
config.UseDefaultOutputNames(OSRM_TEST_DATA_DIR "/monaco.osm.pbf");
config.profile_path = OSRM_TEST_DATA_DIR "/profiles/bad_setup.lua";
config.small_component_size = 1000;
config.requested_num_threads = std::thread::hardware_concurrency();
// BOOST_AUTO_TEST_CASE(test_setup_runtime_error)
// {
// oneapi::tbb::task_scheduler_handle handle{tbb::attach{}};
// osrm::ExtractorConfig config;
// config.input_path = OSRM_TEST_DATA_DIR "/monaco.osm.pbf";
// config.UseDefaultOutputNames(OSRM_TEST_DATA_DIR "/monaco.osm.pbf");
// config.profile_path = OSRM_TEST_DATA_DIR "/profiles/bad_setup.lua";
// config.small_component_size = 1000;
// config.requested_num_threads = std::thread::hardware_concurrency();
std::stringstream output;
// std::stringstream output;
{
redirect_stderr redir(output.rdbuf());
BOOST_CHECK_THROW(osrm::extract(config), osrm::util::exception);
}
// {
// redirect_stderr redir(output.rdbuf());
// BOOST_CHECK_THROW(osrm::extract(config), osrm::util::exception);
// }
// We just look for the line number, file name, and error message. This avoids portability
// issues since the output contains the full path to the file, which may change between systems
BOOST_CHECK(boost::algorithm::contains(output.str(),
"bad_setup.lua:6: attempt to compare number with nil"));
}
// // We just look for the line number, file name, and error message. This avoids portability
// // issues since the output contains the full path to the file, which may change between systems
// BOOST_CHECK(boost::algorithm::contains(output.str(),
// "bad_setup.lua:6: attempt to compare number with nil"));
// oneapi::tbb::finalize(handle);
// }
BOOST_AUTO_TEST_CASE(test_way_runtime_error)
{
osrm::ExtractorConfig config;
config.input_path = OSRM_TEST_DATA_DIR "/monaco.osm.pbf";
config.UseDefaultOutputNames(OSRM_TEST_DATA_DIR "/monaco.osm.pbf");
config.profile_path = OSRM_TEST_DATA_DIR "/profiles/bad_way.lua";
config.small_component_size = 1000;
config.requested_num_threads = std::thread::hardware_concurrency();
// BOOST_AUTO_TEST_CASE(test_way_runtime_error)
// {
// oneapi::tbb::task_scheduler_handle handle{tbb::attach{}};
// osrm::ExtractorConfig config;
// config.input_path = OSRM_TEST_DATA_DIR "/monaco.osm.pbf";
// config.UseDefaultOutputNames(OSRM_TEST_DATA_DIR "/monaco.osm.pbf");
// config.profile_path = OSRM_TEST_DATA_DIR "/profiles/bad_way.lua";
// config.small_component_size = 1000;
// config.requested_num_threads = std::thread::hardware_concurrency();
std::stringstream output;
// std::stringstream output;
{
redirect_stderr redir(output.rdbuf());
BOOST_CHECK_THROW(osrm::extract(config), osrm::util::exception);
}
// {
// redirect_stderr redir(output.rdbuf());
// BOOST_CHECK_THROW(osrm::extract(config), osrm::util::exception);
// }
// We just look for the line number, file name, and error message. This avoids portability
// issues since the output contains the full path to the file, which may change between systems
BOOST_CHECK(boost::algorithm::contains(output.str(),
"bad_way.lua:41: attempt to compare number with nil"));
}
// // We just look for the line number, file name, and error message. This avoids portability
// // issues since the output contains the full path to the file, which may change between systems
// BOOST_CHECK(boost::algorithm::contains(output.str(),
// "bad_way.lua:41: attempt to compare number with nil"));
// oneapi::tbb::finalize(handle);
// }
BOOST_AUTO_TEST_CASE(test_node_runtime_error)
{
osrm::ExtractorConfig config;
config.input_path = OSRM_TEST_DATA_DIR "/monaco.osm.pbf";
config.UseDefaultOutputNames(OSRM_TEST_DATA_DIR "/monaco.osm.pbf");
config.profile_path = OSRM_TEST_DATA_DIR "/profiles/bad_node.lua";
config.small_component_size = 1000;
config.requested_num_threads = std::thread::hardware_concurrency();
// BOOST_AUTO_TEST_CASE(test_node_runtime_error)
// {
// oneapi::tbb::task_scheduler_handle handle{tbb::attach{}};
// osrm::ExtractorConfig config;
// config.input_path = OSRM_TEST_DATA_DIR "/monaco.osm.pbf";
// config.UseDefaultOutputNames(OSRM_TEST_DATA_DIR "/monaco.osm.pbf");
// config.profile_path = OSRM_TEST_DATA_DIR "/profiles/bad_node.lua";
// config.small_component_size = 1000;
// config.requested_num_threads = std::thread::hardware_concurrency();
std::stringstream output;
// std::stringstream output;
{
redirect_stderr redir(output.rdbuf());
BOOST_CHECK_THROW(osrm::extract(config), osrm::util::exception);
}
// {
// redirect_stderr redir(output.rdbuf());
// BOOST_CHECK_THROW(osrm::extract(config), osrm::util::exception);
// }
// We just look for the line number, file name, and error message. This avoids portability
// issues since the output contains the full path to the file, which may change between systems
BOOST_CHECK(boost::algorithm::contains(output.str(),
"bad_node.lua:36: attempt to compare number with nil"));
}
// // We just look for the line number, file name, and error message. This avoids portability
// // issues since the output contains the full path to the file, which may change between systems
// BOOST_CHECK(boost::algorithm::contains(output.str(),
// "bad_node.lua:36: attempt to compare number with nil"));
// oneapi::tbb::finalize(handle);
// }
BOOST_AUTO_TEST_CASE(test_segment_runtime_error)
{
osrm::ExtractorConfig config;
config.input_path = OSRM_TEST_DATA_DIR "/monaco.osm.pbf";
config.UseDefaultOutputNames(OSRM_TEST_DATA_DIR "/monaco.osm.pbf");
config.profile_path = OSRM_TEST_DATA_DIR "/profiles/bad_segment.lua";
config.small_component_size = 1000;
config.requested_num_threads = std::thread::hardware_concurrency();
// BOOST_AUTO_TEST_CASE(test_segment_runtime_error)
// {
// oneapi::tbb::task_scheduler_handle handle{tbb::attach{}};
// osrm::ExtractorConfig config;
// config.input_path = OSRM_TEST_DATA_DIR "/monaco.osm.pbf";
// config.UseDefaultOutputNames(OSRM_TEST_DATA_DIR "/monaco.osm.pbf");
// config.profile_path = OSRM_TEST_DATA_DIR "/profiles/bad_segment.lua";
// config.small_component_size = 1000;
// config.requested_num_threads = std::thread::hardware_concurrency();
std::stringstream output;
// std::stringstream output;
{
redirect_stderr redir(output.rdbuf());
BOOST_CHECK_THROW(osrm::extract(config), osrm::util::exception);
}
// {
// redirect_stderr redir(output.rdbuf());
// BOOST_CHECK_THROW(osrm::extract(config), osrm::util::exception);
// }
// We just look for the line number, file name, and error message. This avoids portability
// issues since the output contains the full path to the file, which may change between systems
BOOST_CHECK(boost::algorithm::contains(
output.str(), "bad_segment.lua:132: attempt to compare number with nil"));
}
// // We just look for the line number, file name, and error message. This avoids portability
// // issues since the output contains the full path to the file, which may change between systems
// BOOST_CHECK(boost::algorithm::contains(
// output.str(), "bad_segment.lua:132: attempt to compare number with nil"));
// oneapi::tbb::finalize(handle);
// }
BOOST_AUTO_TEST_CASE(test_turn_runtime_error)
{
osrm::ExtractorConfig config;
config.input_path = OSRM_TEST_DATA_DIR "/monaco.osm.pbf";
config.UseDefaultOutputNames(OSRM_TEST_DATA_DIR "/monaco.osm.pbf");
config.profile_path = OSRM_TEST_DATA_DIR "/profiles/bad_turn.lua";
config.small_component_size = 1000;
config.requested_num_threads = std::thread::hardware_concurrency();
// BOOST_AUTO_TEST_CASE(test_turn_runtime_error)
// {
// oneapi::tbb::task_scheduler_handle handle{tbb::attach{}};
// osrm::ExtractorConfig config;
// config.input_path = OSRM_TEST_DATA_DIR "/monaco.osm.pbf";
// config.UseDefaultOutputNames(OSRM_TEST_DATA_DIR "/monaco.osm.pbf");
// config.profile_path = OSRM_TEST_DATA_DIR "/profiles/bad_turn.lua";
// config.small_component_size = 1000;
// config.requested_num_threads = std::thread::hardware_concurrency();
std::stringstream output;
// std::stringstream output;
{
redirect_stderr redir(output.rdbuf());
BOOST_CHECK_THROW(osrm::extract(config), osrm::util::exception);
}
// {
// redirect_stderr redir(output.rdbuf());
// BOOST_CHECK_THROW(osrm::extract(config), osrm::util::exception);
// }
// We just look for the line number, file name, and error message. This avoids portability
// issues since the output contains the full path to the file, which may change between systems
BOOST_CHECK(boost::algorithm::contains(output.str(),
"bad_turn.lua:122: attempt to compare number with nil"));
}
// // We just look for the line number, file name, and error message. This avoids portability
// // issues since the output contains the full path to the file, which may change between systems
// BOOST_CHECK(boost::algorithm::contains(output.str(),
// "bad_turn.lua:122: attempt to compare number with nil"));
// oneapi::tbb::finalize(handle);
// }
BOOST_AUTO_TEST_SUITE_END()
+1 -1
View File
@@ -54,7 +54,7 @@ class MockBaseDataFacade : public engine::datafacade::BaseDataFacade
{
static NodeID data[] = {0, 1, 2, 3};
static extractor::SegmentDataView::SegmentNodeVector nodes(data, 4);
return std::ranges::subrange(nodes.cbegin(), nodes.cend());
return boost::make_iterator_range(nodes.cbegin(), nodes.cend());
}
NodeReverseRange GetUncompressedReverseGeometry(const EdgeID id) const override
{
+79 -7
View File
@@ -3,11 +3,14 @@
#include "common/range_tools.hpp"
#include <algorithm>
#include <boost/range/adaptor/reversed.hpp>
#include <boost/range/any_range.hpp>
#include <boost/range/iterator_range.hpp>
#include <boost/test/unit_test.hpp>
#include <algorithm>
#include <numeric>
#include <random>
#include <ranges>
BOOST_AUTO_TEST_SUITE(packed_vector_test)
@@ -81,22 +84,22 @@ BOOST_AUTO_TEST_CASE(packed_vector_iterator_test)
}
BOOST_CHECK_EQUAL(vec_idx, packed_vec.size());
auto range = std::ranges::subrange(packed_vec.cbegin(), packed_vec.cend());
auto range = boost::make_iterator_range(packed_vec.cbegin(), packed_vec.cend());
BOOST_CHECK_EQUAL(range.size(), packed_vec.size());
for (auto idx : util::irange<std::size_t>(0, packed_vec.size()))
{
BOOST_CHECK_EQUAL(packed_vec[idx], range[idx]);
}
auto reverse_range =
std::ranges::subrange(packed_vec.cbegin(), packed_vec.cend()) | std::views::reverse;
auto reverse_range = boost::adaptors::reverse(
boost::make_iterator_range(packed_vec.cbegin(), packed_vec.cend()));
BOOST_CHECK_EQUAL(reverse_range.size(), packed_vec.size());
for (auto idx : util::irange<std::size_t>(0, packed_vec.size()))
{
BOOST_CHECK_EQUAL(packed_vec[packed_vec.size() - 1 - idx], reverse_range[idx]);
}
auto mut_range = std::ranges::subrange(packed_vec.begin(), packed_vec.end());
auto mut_range = boost::make_iterator_range(packed_vec.begin(), packed_vec.end());
BOOST_CHECK_EQUAL(range.size(), packed_vec.size());
for (auto idx : util::irange<std::size_t>(0, packed_vec.size()))
{
@@ -104,7 +107,7 @@ BOOST_AUTO_TEST_CASE(packed_vector_iterator_test)
}
auto mut_reverse_range =
std::ranges::subrange(packed_vec.begin(), packed_vec.end()) | std::views::reverse;
boost::adaptors::reverse(boost::make_iterator_range(packed_vec.begin(), packed_vec.end()));
BOOST_CHECK_EQUAL(reverse_range.size(), packed_vec.size());
for (auto idx : util::irange<std::size_t>(0, packed_vec.size()))
{
@@ -202,4 +205,73 @@ BOOST_AUTO_TEST_CASE(packed_vector_33bit_continious)
}
}
BOOST_AUTO_TEST_CASE(packed_weights_container_with_type_erasure)
{
using Vector = PackedVector<SegmentWeight, SEGMENT_WEIGHT_BITS>;
using WeightsAnyRange = boost::any_range<SegmentWeight,
boost::random_access_traversal_tag,
const typename Vector::internal_reference,
std::ptrdiff_t>;
PackedVector<SegmentWeight, SEGMENT_WEIGHT_BITS> vector(7);
std::iota(vector.begin(), vector.end(), SegmentWeight{0});
auto forward = boost::make_iterator_range(vector.begin() + 1, vector.begin() + 6);
auto forward_any = WeightsAnyRange(forward.begin(), forward.end());
CHECK_EQUAL_RANGE(forward,
SegmentWeight{1},
SegmentWeight{2},
SegmentWeight{3},
SegmentWeight{4},
SegmentWeight{5});
CHECK_EQUAL_RANGE(forward_any,
SegmentWeight{1},
SegmentWeight{2},
SegmentWeight{3},
SegmentWeight{4},
SegmentWeight{5});
auto reverse = boost::adaptors::reverse(forward);
auto reverse_any = WeightsAnyRange(reverse);
CHECK_EQUAL_RANGE(reverse,
SegmentWeight{5},
SegmentWeight{4},
SegmentWeight{3},
SegmentWeight{2},
SegmentWeight{1});
CHECK_EQUAL_RANGE(reverse_any,
SegmentWeight{5},
SegmentWeight{4},
SegmentWeight{3},
SegmentWeight{2},
SegmentWeight{1});
}
BOOST_AUTO_TEST_CASE(packed_weights_view_with_type_erasure)
{
using View = PackedVectorView<SegmentWeight, SEGMENT_WEIGHT_BITS>;
using PackedDataWord = std::uint64_t; // PackedVectorView<>::WordT
using WeightsAnyRange = boost::any_range<SegmentWeight,
boost::random_access_traversal_tag,
const typename View::internal_reference,
std::ptrdiff_t>;
PackedDataWord data[] = {0x200000400000, 0xc, 0};
View view(vector_view<PackedDataWord>(data, 3), 7);
auto forward = boost::make_iterator_range(view.begin() + 1, view.begin() + 4);
auto forward_any = WeightsAnyRange(forward.begin(), forward.end());
CHECK_EQUAL_RANGE(forward, SegmentWeight{1}, SegmentWeight{2}, SegmentWeight{3});
CHECK_EQUAL_RANGE(forward_any, SegmentWeight{1}, SegmentWeight{2}, SegmentWeight{3});
auto reverse = boost::adaptors::reverse(forward);
auto reverse_any = WeightsAnyRange(reverse);
CHECK_EQUAL_RANGE(reverse, SegmentWeight{3}, SegmentWeight{2}, SegmentWeight{1});
CHECK_EQUAL_RANGE(reverse_any, SegmentWeight{3}, SegmentWeight{2}, SegmentWeight{1});
}
BOOST_AUTO_TEST_SUITE_END()
+2
View File
@@ -1,6 +1,8 @@
#include "util/vector_view.hpp"
#include "util/typedefs.hpp"
#include <boost/range/adaptor/reversed.hpp>
#include <boost/range/iterator_range.hpp>
#include <boost/test/unit_test.hpp>
#include <algorithm>