//===-- Unittests for hash ------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "src/__support/CPP/new.h" #include "src/__support/hash.h" #include "src/stdlib/rand.h" #include "src/stdlib/srand.h" #include "src/string/memset.h" #include "test/UnitTest/Test.h" template <class T> struct AlignedMemory { … }; size_t sizes[] = …; uint8_t values[] = …; // Hash value should not change with different alignments. TEST(LlvmLibcHashTest, SanityCheck) { … } static inline size_t popcnt(uint64_t x) { … } // Mutate a single bit in a rather large input. The hash should change // significantly. At least one fifth of the bits should not match. TEST(LlvmLibcHashTest, Avalanche) { … } // Hash a random sequence of input. The LSB should be uniform enough such that // values spread across the entire range. TEST(LlvmLibcHashTest, UniformLSB) { … } // Hash a low entropy sequence. The MSB should be uniform enough such that // there is no significant bias even if the value range is small. // Top 7 bits is examined because it will be used as a secondary key in // the hash table. TEST(LlvmLibcHashTest, UniformMSB) { … }