|
|
|
@ -461,6 +461,9 @@ static std::vector<unsigned char> RandomData()
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(rolling_bloom)
|
|
|
|
|
{
|
|
|
|
|
SeedInsecureRand(/* deterministic */ true);
|
|
|
|
|
g_mock_deterministic_tests = true;
|
|
|
|
|
|
|
|
|
|
// last-100-entry, 1% false positive:
|
|
|
|
|
CRollingBloomFilter rb1(100, 0.01);
|
|
|
|
|
|
|
|
|
@ -485,12 +488,8 @@ BOOST_AUTO_TEST_CASE(rolling_bloom)
|
|
|
|
|
if (rb1.contains(RandomData()))
|
|
|
|
|
++nHits;
|
|
|
|
|
}
|
|
|
|
|
// Run test_bitcoin with --log_level=message to see BOOST_TEST_MESSAGEs:
|
|
|
|
|
BOOST_TEST_MESSAGE("RollingBloomFilter got " << nHits << " false positives (~100 expected)");
|
|
|
|
|
|
|
|
|
|
// Insanely unlikely to get a fp count outside this range:
|
|
|
|
|
BOOST_CHECK(nHits > 25);
|
|
|
|
|
BOOST_CHECK(nHits < 175);
|
|
|
|
|
// Expect about 100 hits
|
|
|
|
|
BOOST_CHECK_EQUAL(nHits, 75);
|
|
|
|
|
|
|
|
|
|
BOOST_CHECK(rb1.contains(data[DATASIZE-1]));
|
|
|
|
|
rb1.reset();
|
|
|
|
@ -517,10 +516,8 @@ BOOST_AUTO_TEST_CASE(rolling_bloom)
|
|
|
|
|
if (rb1.contains(data[i]))
|
|
|
|
|
++nHits;
|
|
|
|
|
}
|
|
|
|
|
// Expect about 5 false positives, more than 100 means
|
|
|
|
|
// something is definitely broken.
|
|
|
|
|
BOOST_TEST_MESSAGE("RollingBloomFilter got " << nHits << " false positives (~5 expected)");
|
|
|
|
|
BOOST_CHECK(nHits < 100);
|
|
|
|
|
// Expect about 5 false positives
|
|
|
|
|
BOOST_CHECK_EQUAL(nHits, 6);
|
|
|
|
|
|
|
|
|
|
// last-1000-entry, 0.01% false positive:
|
|
|
|
|
CRollingBloomFilter rb2(1000, 0.001);
|
|
|
|
@ -531,6 +528,7 @@ BOOST_AUTO_TEST_CASE(rolling_bloom)
|
|
|
|
|
for (int i = 0; i < DATASIZE; i++) {
|
|
|
|
|
BOOST_CHECK(rb2.contains(data[i]));
|
|
|
|
|
}
|
|
|
|
|
g_mock_deterministic_tests = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_SUITE_END()
|
|
|
|
|