1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 16:57:35 +00:00

AK: Use a full-period xorshift PRNG for double_hash

The previous implementation had some pretty short cycles and two fixed
points (1711463637 and 2389024350). If two keys hashed to one of these
values insertions and lookups would loop forever.
This version is based on a standard xorshift PRNG with period 2**32-1.
The all-zero state is usually forbidden, so we insert it into the cycle
at an arbitrary location.
This commit is contained in:
Schlufi 2022-01-06 17:57:39 +01:00 committed by Andreas Kling
parent aa6e5e8cdc
commit 55a7738837
2 changed files with 12 additions and 7 deletions

View file

@ -17,8 +17,9 @@ TEST_CASE(int_hash)
TEST_CASE(double_hash)
{
static_assert(double_hash(42) == 524450u);
static_assert(double_hash(0) == 12384u);
static_assert(double_hash(666) == 171644115u);
static_assert(double_hash(0) == 1189591134u);
static_assert(double_hash(0xBA5EDB01) == 0u);
}
TEST_CASE(pair_int_hash)