From c0ad79ff235d2834f9a306f091af867806460a9e Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Sat, 4 May 2019 17:58:25 +0700 Subject: [PATCH] fix msvc compilation --- flat_map_tests.cpp | 34 +++++++++++++++++++++++++++------- flat_set_tests.cpp | 24 ++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 9 deletions(-) diff --git a/flat_map_tests.cpp b/flat_map_tests.cpp index fa2eeeb..1957624 100644 --- a/flat_map_tests.cpp +++ b/flat_map_tests.cpp @@ -17,16 +17,32 @@ namespace public: using value_type = T; - T* allocate(std::size_t n) { + dummy_allocator() = default; + + template < typename U > + dummy_allocator(const dummy_allocator&) noexcept { + } + + T* allocate(std::size_t n) noexcept { return static_cast(std::malloc(sizeof(T) * n)); } - void deallocate(T* p, std::size_t n) { + void deallocate(T* p, std::size_t n) noexcept { (void)n; std::free(p); } }; + template < typename T, typename U > + bool operator==(const dummy_allocator&, const dummy_allocator&) noexcept { + return true; + } + + template < typename T, typename U > + bool operator!=(const dummy_allocator& l, const dummy_allocator& r) noexcept { + return !(l == r); + } + template < typename T > constexpr std::add_const_t& my_as_const(T& t) noexcept { return t; @@ -150,6 +166,7 @@ TEST_CASE("flat_map") { REQUIRE(s0.at(1) == 84); REQUIRE(my_as_const(s0).at(1) == 84); REQUIRE_THROWS_AS(s0.at(0), std::out_of_range); + REQUIRE_THROWS_AS(my_as_const(s0).at(0), std::out_of_range); } SECTION("inserts") { struct obj_t { @@ -186,13 +203,16 @@ TEST_CASE("flat_map") { REQUIRE(i3 == s0.begin() + 2); s0.insert(s0.cend(), std::make_pair(4, obj_t(84))); + auto i4 = s0.insert(s0.cend(), std::make_pair(0, obj_t(21))); + REQUIRE(i4 == s0.begin()); - auto i4 = s0.emplace(5, 100500); - REQUIRE(i4 == std::make_pair(s0.end() - 1, true)); - REQUIRE(s0 == map_t{{1,42},{2,42},{3,84},{4,84},{5,100500}}); + auto i5 = s0.emplace(5, 100500); + REQUIRE(i5 == std::make_pair(s0.end() - 1, true)); + REQUIRE(s0 == map_t{{0,21},{1,42},{2,42},{3,84},{4,84},{5,100500}}); - auto i5 = s0.emplace_hint(s0.cend(), 6, 100500); - REQUIRE(s0 == map_t{{1,42},{2,42},{3,84},{4,84},{5,100500},{6,100500}}); + auto i6 = s0.emplace_hint(s0.cend(), 6, 100500); + REQUIRE(i6 == s0.end() - 1); + REQUIRE(s0 == map_t{{0,21},{1,42},{2,42},{3,84},{4,84},{5,100500},{6,100500}}); } } SECTION("erasers") { diff --git a/flat_set_tests.cpp b/flat_set_tests.cpp index cafc05a..d103f55 100644 --- a/flat_set_tests.cpp +++ b/flat_set_tests.cpp @@ -17,16 +17,32 @@ namespace public: using value_type = T; - T* allocate(std::size_t n) { + dummy_allocator() = default; + + template < typename U > + dummy_allocator(const dummy_allocator&) noexcept { + } + + T* allocate(std::size_t n) noexcept { return static_cast(std::malloc(sizeof(T) * n)); } - void deallocate(T* p, std::size_t n) { + void deallocate(T* p, std::size_t n) noexcept { (void)n; std::free(p); } }; + template < typename T, typename U > + bool operator==(const dummy_allocator&, const dummy_allocator&) noexcept { + return true; + } + + template < typename T, typename U > + bool operator!=(const dummy_allocator& l, const dummy_allocator& r) noexcept { + return !(l == r); + } + template < typename T > constexpr std::add_const_t& my_as_const(T& t) noexcept { return t; @@ -159,6 +175,10 @@ TEST_CASE("flat_set") { REQUIRE(s0 == set_t{1,2}); REQUIRE(i2 == std::make_pair(s0.begin() + 1, true)); + auto o2 = obj_t(2); + auto i3 = s0.insert(o2); + REQUIRE(i3 == std::make_pair(s0.begin() + 1, false)); + s0.insert(s0.cbegin(), 1); s0.insert(s0.cbegin(), 2); s0.insert(s0.cend(), 1);