mirror of
https://github.com/greg7mdp/parallel-hashmap.git
synced 2026-08-29 08:34:39 +08:00
cleanup some test failures.
This commit is contained in:
Vendored
+14
-8
@@ -137,18 +137,19 @@ constexpr bool IsNoThrowSwappable() {
|
||||
// --------------------------------------------------------------------------
|
||||
template <typename T>
|
||||
int TrailingZeros(T x) {
|
||||
return sizeof(T) == 8 ? base_internal::CountTrailingZerosNonZero64(
|
||||
static_cast<uint64_t>(x))
|
||||
: base_internal::CountTrailingZerosNonZero32(
|
||||
static_cast<uint32_t>(x));
|
||||
PHMAP_IF_CONSTEXPR(sizeof(T) == 8)
|
||||
return base_internal::CountTrailingZerosNonZero64(static_cast<uint64_t>(x));
|
||||
else
|
||||
return base_internal::CountTrailingZerosNonZero32(static_cast<uint32_t>(x));
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
template <typename T>
|
||||
int LeadingZeros(T x) {
|
||||
return sizeof(T) == 8
|
||||
? base_internal::CountLeadingZeros64(static_cast<uint64_t>(x))
|
||||
: base_internal::CountLeadingZeros32(static_cast<uint32_t>(x));
|
||||
PHMAP_IF_CONSTEXPR(sizeof(T) == 8)
|
||||
return base_internal::CountLeadingZeros64(static_cast<uint64_t>(x));
|
||||
else
|
||||
return base_internal::CountLeadingZeros32(static_cast<uint32_t>(x));
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
@@ -1432,7 +1433,12 @@ public:
|
||||
|
||||
// This overload is necessary because otherwise erase<K>(const K&) would be
|
||||
// a better match if non-const iterator is passed as an argument.
|
||||
iterator erase(iterator it) { _erase(it++); return it; }
|
||||
iterator erase(iterator it) {
|
||||
auto res = it;
|
||||
++res;
|
||||
_erase(it);
|
||||
return res;
|
||||
}
|
||||
|
||||
iterator erase(const_iterator first, const_iterator last) {
|
||||
while (first != last) {
|
||||
|
||||
Vendored
+9
-9
@@ -287,7 +287,7 @@ PHMAP_BASE_INTERNAL_FORCEINLINE int CountLeadingZeros64(uint64_t n) {
|
||||
return (int)(63 - result);
|
||||
}
|
||||
return 64;
|
||||
#elif defined(_MSC_VER)
|
||||
#elif defined(_MSC_VER) && !defined(__clang__)
|
||||
// MSVC does not have __buitin_clzll. Compose two calls to _BitScanReverse
|
||||
unsigned long result = 0; // NOLINT(runtime/int)
|
||||
if ((n >> 32) && _BitScanReverse(&result, (unsigned long)(n >> 32))) {
|
||||
@@ -297,7 +297,7 @@ PHMAP_BASE_INTERNAL_FORCEINLINE int CountLeadingZeros64(uint64_t n) {
|
||||
return 63 - result;
|
||||
}
|
||||
return 64;
|
||||
#elif defined(__GNUC__)
|
||||
#elif defined(__GNUC__) || defined(__clang__)
|
||||
// Use __builtin_clzll, which uses the following instructions:
|
||||
// x86: bsr
|
||||
// ARM64: clz
|
||||
@@ -324,13 +324,13 @@ PHMAP_BASE_INTERNAL_FORCEINLINE int CountLeadingZeros32Slow(uint64_t n) {
|
||||
}
|
||||
|
||||
PHMAP_BASE_INTERNAL_FORCEINLINE int CountLeadingZeros32(uint32_t n) {
|
||||
#if defined(_MSC_VER)
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
unsigned long result = 0; // NOLINT(runtime/int)
|
||||
if (_BitScanReverse(&result, n)) {
|
||||
return (int)(31 - result);
|
||||
}
|
||||
return 32;
|
||||
#elif defined(__GNUC__)
|
||||
#elif defined(__GNUC__) || defined(__clang__)
|
||||
// Use __builtin_clz, which uses the following instructions:
|
||||
// x86: bsr
|
||||
// ARM64: clz
|
||||
@@ -361,11 +361,11 @@ PHMAP_BASE_INTERNAL_FORCEINLINE int CountTrailingZerosNonZero64Slow(uint64_t n)
|
||||
}
|
||||
|
||||
PHMAP_BASE_INTERNAL_FORCEINLINE int CountTrailingZerosNonZero64(uint64_t n) {
|
||||
#if defined(_MSC_VER) && defined(_M_X64)
|
||||
#if defined(_MSC_VER) && !defined(__clang__) && defined(_M_X64)
|
||||
unsigned long result = 0; // NOLINT(runtime/int)
|
||||
_BitScanForward64(&result, n);
|
||||
return (int)result;
|
||||
#elif defined(_MSC_VER)
|
||||
#elif defined(_MSC_VER) && !defined(__clang__)
|
||||
unsigned long result = 0; // NOLINT(runtime/int)
|
||||
if (static_cast<uint32_t>(n) == 0) {
|
||||
_BitScanForward(&result, (unsigned long)(n >> 32));
|
||||
@@ -373,7 +373,7 @@ PHMAP_BASE_INTERNAL_FORCEINLINE int CountTrailingZerosNonZero64(uint64_t n) {
|
||||
}
|
||||
_BitScanForward(&result, (unsigned long)n);
|
||||
return result;
|
||||
#elif defined(__GNUC__)
|
||||
#elif defined(__GNUC__) || defined(__clang__)
|
||||
static_assert(sizeof(unsigned long long) == sizeof(n), // NOLINT(runtime/int)
|
||||
"__builtin_ctzll does not take 64-bit arg");
|
||||
return __builtin_ctzll(n);
|
||||
@@ -394,11 +394,11 @@ PHMAP_BASE_INTERNAL_FORCEINLINE int CountTrailingZerosNonZero32Slow(uint32_t n)
|
||||
}
|
||||
|
||||
PHMAP_BASE_INTERNAL_FORCEINLINE int CountTrailingZerosNonZero32(uint32_t n) {
|
||||
#if defined(_MSC_VER)
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
unsigned long result = 0; // NOLINT(runtime/int)
|
||||
_BitScanForward(&result, n);
|
||||
return (int)result;
|
||||
#elif defined(__GNUC__)
|
||||
#elif defined(__GNUC__) || defined(__clang__)
|
||||
static_assert(sizeof(int) == sizeof(n),
|
||||
"__builtin_ctz does not take 32-bit arg");
|
||||
return __builtin_ctz(n);
|
||||
|
||||
Vendored
+2
@@ -126,6 +126,8 @@
|
||||
#define PHMAP_HAVE_CC17 0
|
||||
#endif
|
||||
|
||||
#define PHMAP_BRANCHLESS 1
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
// Checks whether `std::is_trivially_destructible<T>` is supported.
|
||||
// ----------------------------------------------------------------
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#ifndef THIS_HASH_MAP
|
||||
#define THIS_HASH_MAP flat_hash_map
|
||||
#define THIS_TEST_NAME FlatHashMap
|
||||
#define ORIG_FLAT_HASH_MAP 1
|
||||
#endif
|
||||
|
||||
#ifndef THIS_EXTRA_TPL_PARAMS
|
||||
@@ -198,14 +199,16 @@ TEST(THIS_TEST_NAME, LazyKeyPattern) {
|
||||
m.try_emplace(LazyInt(2, &conversions), 3);
|
||||
EXPECT_THAT(m, UnorderedElementsAre(Pair(1, 2), Pair(2, 3)));
|
||||
EXPECT_EQ(conversions, 2);
|
||||
#ifdef NDEBUG
|
||||
#if defined(NDEBUG) && ORIG_FLAT_HASH_MAP
|
||||
// for parallel maps, the reserve(3) above is not sufficient to guarantee that a submap will not resize and therefore rehash
|
||||
EXPECT_EQ(hashes, 3);
|
||||
#endif
|
||||
|
||||
m.try_emplace(LazyInt(2, &conversions), 4);
|
||||
EXPECT_THAT(m, UnorderedElementsAre(Pair(1, 2), Pair(2, 3)));
|
||||
EXPECT_EQ(conversions, 2);
|
||||
#ifdef NDEBUG
|
||||
#if defined(NDEBUG) && ORIG_FLAT_HASH_MAP
|
||||
// for parallel maps, the reserve(3) above is not sufficient to guarantee that a submap will not resize and therefore rehash
|
||||
EXPECT_EQ(hashes, 4);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1112,8 +1112,7 @@ ExpectedStats XorSeedExpectedStats() {
|
||||
|
||||
// The effective load factor is larger in non-opt mode because we insert
|
||||
// elements out of order.
|
||||
switch (container_internal::Group::kWidth) {
|
||||
case 8:
|
||||
PHMAP_IF_CONSTEXPR (container_internal::Group::kWidth == 8) {
|
||||
if (kRandomizesInserts) {
|
||||
return {0.05,
|
||||
1.0,
|
||||
@@ -1125,8 +1124,8 @@ ExpectedStats XorSeedExpectedStats() {
|
||||
{{0.95, 0.1}},
|
||||
{{0.95, 0}, {0.99, 2}, {0.999, 4}, {0.9999, 10}}};
|
||||
}
|
||||
case 16:
|
||||
default:
|
||||
}
|
||||
else {
|
||||
if (kRandomizesInserts) {
|
||||
return {0.1,
|
||||
1.0,
|
||||
@@ -1217,8 +1216,7 @@ ExpectedStats LinearTransformExpectedStats() {
|
||||
|
||||
// The effective load factor is larger in non-opt mode because we insert
|
||||
// elements out of order.
|
||||
switch (container_internal::Group::kWidth) {
|
||||
case 8:
|
||||
PHMAP_IF_CONSTEXPR (container_internal::Group::kWidth == 8) {
|
||||
if (kRandomizesInserts) {
|
||||
return {0.1,
|
||||
0.5,
|
||||
@@ -1230,8 +1228,7 @@ ExpectedStats LinearTransformExpectedStats() {
|
||||
{{0.95, 0.3}},
|
||||
{{0.95, 0}, {0.99, 3}, {0.999, 15}, {0.9999, 25}}};
|
||||
}
|
||||
case 16:
|
||||
default:
|
||||
} else {
|
||||
if (kRandomizesInserts) {
|
||||
return {0.1,
|
||||
0.4,
|
||||
|
||||
Vendored
+8
@@ -15,11 +15,19 @@
|
||||
#ifndef PHMAP_CONTAINER_INTERNAL_UNORDERED_MAP_MODIFIERS_TEST_H_
|
||||
#define PHMAP_CONTAINER_INTERNAL_UNORDERED_MAP_MODIFIERS_TEST_H_
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(push, 0)
|
||||
#endif
|
||||
|
||||
#include "gmock/gmock.h"
|
||||
#include "gtest/gtest.h"
|
||||
#include "hash_generator_testing.h"
|
||||
#include "hash_policy_testing.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
||||
namespace phmap {
|
||||
namespace container_internal {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user