osrm-backend/unit_tests/common/range_tools.hpp
Michael Bell 96acdaf0d5 Fix osrm-contract, tests, on Windows
As part of graph contraction, node renumbering leads to
in-place permuting of graph state, including boolean vector elements.

std::vector<bool> returns proxy objects when referencing individual
bits. To correctly swap bool elements using MSVC, we need to explicitly
apply std::vector<bool>::swap.

Making this change fixes osrm-contract on Windows.

We also correct failing tests and other undefined behaviours
(mainly iterator access outside boundaries) highlighted by MSVC.
2020-11-15 14:22:26 +00:00

23 lines
1.4 KiB
C++

#ifndef UNIT_TESTS_RANGE_TOOLS_HPP
#define UNIT_TESTS_RANGE_TOOLS_HPP
#include <boost/test/unit_test.hpp>
#define REQUIRE_SIZE_RANGE(range, ref) BOOST_REQUIRE_EQUAL(range.size(), ref)
#define CHECK_EQUAL_RANGE(range, ...) \
do \
{ \
const auto &lhs = range; \
const auto &rhs = {__VA_ARGS__}; \
BOOST_CHECK_EQUAL_COLLECTIONS(lhs.begin(), lhs.end(), rhs.begin(), rhs.end()); \
} while (0)
#define CHECK_EQUAL_COLLECTIONS(coll_lhs, coll_rhs) \
do \
{ \
const auto &lhs = coll_lhs; \
const auto &rhs = coll_rhs; \
BOOST_CHECK_EQUAL_COLLECTIONS(lhs.begin(), lhs.end(), rhs.begin(), rhs.end()); \
} while (0)
#endif // UNIT_TESTS_RANGE_TOOLS_HPP