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.
23 lines
1.4 KiB
C++
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
|