52#include <gtest/gtest.h>
87 const char* test_string =
"test_string_for_hashing";
88 const std::string test_std_string =
"test_string_for_hashing";
89 const int test_int = 42;
90 const double test_double = 3.14159265359;
225 unsigned seed = 12345;
233 auto h4 =
jen_hash((
void*)test_std_string.c_str(), test_std_string.size(), seed);
257 unsigned long seed = 42;
283 const char* empty_string =
"";
284 const std::string empty_std_string =
"";
285 const char* single_char =
"a";
291 large_string.resize(1024 * 1024,
'x');
353 char data1[] = {1, 0, 2, 0, 3};
354 char data2[] = {1, 0, 2, 0, 3};
371 const char*
s1 =
"hello";
372 const char*
s2 =
"world";
373 const char*
s3 =
"hello1";
407 const std::string key =
"test_key";
434 int arr1[] = {1, 2, 3, 4, 5};
435 int arr2[] = {1, 2, 3, 4, 5};
436 int arr3[] = {1, 2, 3, 4, 6};
465 s1.a = 1;
s1.b = 2.5;
s1.c =
'x';
466 s2.a = 1;
s2.b = 2.5;
s2.c =
'x';
467 s3.a = 1;
s3.b = 2.5;
s3.c =
'y';
498 double val = 3.14159;
511 long long val = 9223372036854775807LL;
526 std::pair<int, int> p1{1, 2};
527 std::pair<int, int> p2{1, 2};
528 std::pair<int, int> p3{2, 1};
542 std::pair<std::string, std::string> p1{
"hello",
"world"};
543 std::pair<std::string, std::string> p2{
"hello",
"world"};
556 static constexpr size_t NUM_KEYS = 10000;
561 std::mt19937
gen(42);
562 std::uniform_int_distribution<>
len_dist(5, 20);
563 std::uniform_int_distribution<>
char_dist(
'a',
'z');
565 for (
size_t i = 0; i < NUM_KEYS; ++i)
570 for (
int j = 0; j < len; ++j)
572 keys.push_back(std::move(s));
580 std::set<size_t>
unique_hashes(hashes.begin(), hashes.end());
582 static_cast<double>(hashes.size());
590 std::vector<size_t> hashes;
591 hashes.reserve(NUM_KEYS);
592 for (
const auto& key : keys)
595 double uniqueness = measureHashUniqueness(hashes);
601 std::vector<size_t> hashes;
602 hashes.reserve(NUM_KEYS);
603 for (
const auto& key : keys)
606 double uniqueness = measureHashUniqueness(hashes);
612 std::vector<size_t> hashes;
613 hashes.reserve(NUM_KEYS);
614 for (
const auto& key : keys)
617 double uniqueness = measureHashUniqueness(hashes);
623 std::vector<size_t> hashes;
624 hashes.reserve(NUM_KEYS);
625 for (
const auto& key : keys)
628 double uniqueness = measureHashUniqueness(hashes);
634 std::vector<size_t> hashes;
635 hashes.reserve(NUM_KEYS);
636 for (
const auto& key : keys)
639 double uniqueness = measureHashUniqueness(hashes);
645 std::vector<size_t> hashes;
646 hashes.reserve(NUM_KEYS);
647 for (
const auto& key : keys)
650 double uniqueness = measureHashUniqueness(hashes);
678 unsigned char data1[16] = {0};
679 unsigned char data2[16] = {0};
688 <<
"Jenkins hash has poor avalanche property";
693 unsigned char data1[16] = {0};
694 unsigned char data2[16] = {0};
702 <<
"MurmurHash3 has poor avalanche property";
707 unsigned char data1[16] = {0};
708 unsigned char data2[16] = {0};
716 <<
"One-at-a-Time hash has poor avalanche property";
746 const std::string data =
"test";
754 const std::string key =
"test_key";
767 unsigned int unsigned_val =
static_cast<unsigned int>(-1);
780 const char* ptr =
"hello";
781 std::string str =
"hello";
797 std::string
large_data(10 * 1024 * 1024,
'x');
815 for (
int i = 0; i < 100000; ++i)
TEST_F(StaticArenaFixture, simple_fail)
size_t size() const noexcept
Count the number of elements of the list.
static int bitDifference(size_t h1, size_t h2)
double measureHashUniqueness(const std::vector< size_t > &hashes)
std::vector< std::string > keys
Collection of general-purpose hash functions.
testing::Environment *const hash_env
Main namespace for Aleph-w library functions.
size_t sax_hash(const void *key, const size_t len) noexcept
Shift-Add-XOR hash.
size_t add_hash(const void *key, const size_t len) noexcept
Additive hash.
size_t pair_dft_hash_fct(const std::pair< K1, K2 > &p) noexcept
size_t jsw_hash(const void *key, size_t len)
JSW hash (Julienne Walker)
size_t murmur3hash(const Key &key, unsigned long seed)
size_t djb_hash(const void *key, const size_t len) noexcept
Modified Bernstein hash.
bool diff(const C1 &c1, const C2 &c2, Eq e=Eq())
Check if two containers differ.
size_t SuperFastHash(const void *key, size_t len) noexcept
Paul Hsieh super fast hash function.
size_t jen_hash(const void *key, const size_t length, const unsigned initval=Default_Hash_Seed) noexcept
Jenkins hash.
size_t dft_hash_fct(const Key &key) noexcept
size_t pair_snd_hash_fct(const std::pair< K1, K2 > &p) noexcept
const unsigned Default_Hash_Seed
Hash functions (implementaciones concretas).
size_t xor_hash(const void *key, const size_t len) noexcept
XOR hash.
size_t fnv_hash(const void *key, const size_t len) noexcept
Fowler-Noll-Vo (FNV-1) hash function.
size_t rot_hash(const void *key, const size_t len) noexcept
Rotating hash.
size_t elf_hash(const void *key, const size_t len) noexcept
ELF hash.
size_t oat_hash(const void *key, const size_t len) noexcept
One-at-a-Time hash by Bob Jenkins.
DynList< T > maps(const C &c, Op op)
Classic map operation.
Itor::difference_type count(const Itor &beg, const Itor &end, const T &value)
Count elements equal to a value.
T sum(const Container &container, const T &init=T{})
Compute sum of all elements.