General Purpose library for Freestanding C++ and POSIX systems
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

127 lines
2.3 KiB

#include "test_scaffold.h"
#include <random>
#include <string>
#include "gp/quotient_filter.hpp"
typedef std::mt19937_64 cheap_rand;
typedef std::mt19937_64 cheap_rand_bis;
struct qfilter_test : public test_scaffold {
uint32_t seed;
qfilter_test() {
seed = std::random_device{}();
name = __FILE__ ":1_seed";
name += std::to_string(seed);
}
virtual int run() {
cheap_rand setter(seed);
cheap_rand getter(seed);
gp::quotient_filter test_filter;
for(int a = 0 ; a < 100; a++)
{
test_filter.set_hash(setter());
}
bool result = true;
for(int a = 0 ; a < 100; a++)
{
result *= test_filter.test_hash(getter());
}
return !result;
}
};
append_test dummy_rshyr43(new qfilter_test{});
struct qfilter2_test : public test_scaffold {
uint32_t seedA;
uint32_t seedB;
qfilter2_test() {
seedA = std::random_device{}();
seedB = std::random_device{}();
name = __FILE__ ":2_seedA";
name += std::to_string(seedA);
name += "&seedB";
name += std::to_string(seedB);
}
virtual int run() {
cheap_rand setter(seedA);
cheap_rand deleter(seedA);
cheap_rand_bis getter(seedB);
gp::quotient_filter test_filter;
for(int a = 0 ; a < 100000; a++)
{
test_filter.set_hash(setter());
}
int interference = 0;
for(int a = 0 ; a < 100000; a++)
{
interference += test_filter.test_hash(getter());
}
for(int a = 0 ; a < 100000; a++)
{
test_filter.remove_hash(deleter());
}
return interference > 25;
}
};
append_test dummy_kegdflu3(new qfilter2_test{});
struct qfilter3_test : public test_scaffold {
uint32_t seedA;
uint32_t seedB;
qfilter3_test() {
seedA = std::random_device{}();
seedB = std::random_device{}();
name = __FILE__ ":3_seedA";
name += std::to_string(seedA);
name += "&seedB";
name += std::to_string(seedB);
}
virtual int run() {
cheap_rand setter(seedA);
cheap_rand deleter(seedA);
cheap_rand_bis getter(seedB);
gp::quotient_filter<uint32_t, 20,12, gp::stepcache_skipstone> test_filter;
for(int a = 0 ; a < 100000; a++)
{
test_filter.set_hash(setter());
}
int interference = 0;
for(int a = 0 ; a < 100000; a++)
{
interference += test_filter.test_hash(getter());
}
for(int a = 0 ; a < 100000; a++)
{
test_filter.remove_hash(deleter());
}
return interference > 25;
}
};
append_test dummy_kjdflu3(new qfilter3_test{});