36#include <gtest/gtest.h>
115 for (
int i = 0; i < 100; ++i)
120 for (
int i = 0; i < 100; ++i)
128 for (
int i = 0; i < 100; ++i)
132 for (
int i = 1000; i < 2000; ++i)
174 for (
int i = 0; i < 50; ++i)
177 for (
int i = 0; i < 50; ++i)
189 for (
int i = 0; i < 50; ++i)
192 for (
int i = 0; i < 50; ++i)
233 for (
int i = 0; i < 50; ++i)
236 for (
int i = 0; i < 50; ++i)
260 for (
int i = 0; i < 100; ++i)
264 for (
int i = 0; i < 100; i += 2)
270 for (
int i = 1; i < 100; i += 2)
274 for (
int i = 0; i < 100; i += 2)
287 for (
int i = 0; i < 8; ++i)
297 for (
int i = 0; i < 4; ++i)
301 for (
int i = 100; i < 200; ++i)
307 catch (
const std::overflow_error &)
321 for (
int i = 0; i < 230; ++i)
327 for (
int i = 0; i < 230; ++i)
338 size_t expected = (1024 * 11 + 7) / 8;
364 for (
int i = 0; i < 30; ++i)
372 for (
int i = 0; i < 30; ++i)
379 for (
int i = 0; i < 30; ++i)
386 for (
int i = 0; i < 30; ++i)
410 for (
int i = 0; i < 50; ++i)
417 for (
int i = 0; i < 50; ++i)
425 for (
int i = 0; i < 20; ++i)
430 for (
int i = 100; i < 120; ++i)
434 for (
int i = 100; i < 120; ++i)
447 for (
int i = 0; i < 50; ++i)
449 for (
int i = 50; i < 100; ++i)
454 for (
int i = 0; i < 100; ++i)
479 for (
int i = 0; i < 60; ++i)
481 for (
int i = 40; i < 100; ++i)
487 for (
int i = 0; i < 100; ++i)
497 const size_t n = 500;
500 for (
size_t i = 0; i < n; ++i)
501 qf.insert(
static_cast<int>(i));
505 for (
size_t i = n + 10000; i < n + 10000 +
test_count; ++i)
506 if (
qf.contains(
static_cast<int>(i)))
521 for (
int i = 0; i < 200; ++i)
525 for (
int i = 10000; i < 20000; ++i)
540 std::mt19937
rng(42);
541 std::uniform_int_distribution<int> dist(0, 1000000);
543 std::set<int> inserted;
546 for (
int i = 0; i < 5000; ++i)
550 inserted.insert(val);
554 for (
int val : inserted)
567 for (
int i = 0; i < 200; ++i)
571 for (
int i = 0; i < 100; ++i)
575 for (
int i = 100; i < 200; ++i)
585 for (
int i = 0; i < 40; ++i)
588 for (
int i = 0; i < 40; ++i)
592 for (
int i = 0; i < 20; ++i)
596 for (
int i = 20; i < 40; ++i)
620 for (
int i = 0; i < 50; ++i)
623 for (
int i = 0; i < 50; ++i)
641 for (
int i = 0; i < 16; ++i)
644 for (
int i = 0; i < 16; ++i)
658 std::vector<int> values = {1, 5, 10, 42, 99, 123, 456, 789};
660 for (
int val : values)
667 for (
int val : values)
Memory-optimized quotient filter with bit-packed slots.
void swap(Compact_Quotient_Filter &other) noexcept
Swap in O(1).
static std::pair< uint8_t, uint8_t > estimate(size_t n, double fp_rate)
Estimate (q, r) for n elements and target FP rate.
static Compact_Quotient_Filter from_capacity(size_t expected_n, double fp_rate, uint32_t seed=0x5F3759DF)
Construct from desired capacity and false positive rate.
Compact_Quotient_Filter & insert(const T &item)
Insert an element.
void merge(const Compact_Quotient_Filter &other)
Merge another filter (same q, r, seed).
bool contains(const T &item) const noexcept
Test membership.
Quotient filter for probabilistic set membership with deletion.
Quotient_Filter & insert(const T &item)
Insert an element.
size_t memory_usage() const noexcept
Memory usage in bytes.
size_t size() const noexcept
Number of elements.
bool contains(const T &item) const noexcept
Test membership.
Memory-optimized quotient filter with bit-packed slots.
Main namespace for Aleph-w library functions.
Itor2 copy(Itor1 sourceBeg, const Itor1 &sourceEnd, Itor2 destBeg)
Copy elements from one range to another.
Divide_Conquer_DP_Result< Cost > divide_and_conquer_partition_dp(const size_t groups, const size_t n, Transition_Cost_Fn transition_cost, const Cost inf=dp_optimization_detail::default_inf< Cost >())
Optimize partition DP using divide-and-conquer optimization.
Quotient filter: a cache-friendly probabilistic set with deletion.