forked from mozilla/gecko-dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move TestBloomFilter out of XPCOM and into mfbt/tests, now that it ex…
…ists. No bug, r=testingonlychange --HG-- extra : rebase_source : 85a2a56bcc02bf122ee7fd21d16dffd534d1c98d
- Loading branch information
Showing
5 changed files
with
105 additions
and
122 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ | ||
/* This Source Code Form is subject to the terms of the Mozilla Public | ||
* License, v. 2.0. If a copy of the MPL was not distributed with this file, | ||
* You can obtain one at http://mozilla.org/MPL/2.0/. */ | ||
|
||
#include "mozilla/Assertions.h" | ||
#include "mozilla/BloomFilter.h" | ||
|
||
#include <stddef.h> | ||
#include <stdio.h> | ||
|
||
using mozilla::BloomFilter; | ||
|
||
class FilterChecker | ||
{ | ||
public: | ||
FilterChecker(uint32_t hash) : mHash(hash) { } | ||
|
||
uint32_t hash() const { return mHash; } | ||
|
||
private: | ||
uint32_t mHash; | ||
}; | ||
|
||
int | ||
main() | ||
{ | ||
BloomFilter<12, FilterChecker> *filter = new BloomFilter<12, FilterChecker>(); | ||
MOZ_ASSERT(filter); | ||
|
||
FilterChecker one(1); | ||
FilterChecker two(0x20000); | ||
FilterChecker many(0x10000); | ||
FilterChecker multiple(0x20001); | ||
|
||
filter->add(&one); | ||
MOZ_ASSERT(filter->mightContain(&one), | ||
"Filter should contain 'one'"); | ||
|
||
MOZ_ASSERT(!filter->mightContain(&multiple), | ||
"Filter claims to contain 'multiple' when it should not"); | ||
|
||
MOZ_ASSERT(filter->mightContain(&many), | ||
"Filter should contain 'many' (false positive)"); | ||
|
||
filter->add(&two); | ||
MOZ_ASSERT(filter->mightContain(&multiple), | ||
"Filter should contain 'multiple' (false positive)"); | ||
|
||
// Test basic removals | ||
filter->remove(&two); | ||
MOZ_ASSERT(!filter->mightContain(&multiple), | ||
"Filter claims to contain 'multiple' when it should not after two " | ||
"was removed"); | ||
|
||
// Test multiple addition/removal | ||
const size_t FILTER_SIZE = 255; | ||
for (size_t i = 0; i < FILTER_SIZE - 1; ++i) | ||
filter->add(&two); | ||
|
||
MOZ_ASSERT(filter->mightContain(&multiple), | ||
"Filter should contain 'multiple' after 'two' added lots of times " | ||
"(false positive)"); | ||
|
||
for (size_t i = 0; i < FILTER_SIZE - 1; ++i) | ||
filter->remove(&two); | ||
|
||
MOZ_ASSERT(!filter->mightContain(&multiple), | ||
"Filter claims to contain 'multiple' when it should not after two " | ||
"was removed lots of times"); | ||
|
||
// Test overflowing the filter buckets | ||
for (size_t i = 0; i < FILTER_SIZE + 1; ++i) | ||
filter->add(&two); | ||
|
||
MOZ_ASSERT(filter->mightContain(&multiple), | ||
"Filter should contain 'multiple' after 'two' added lots more " | ||
"times (false positive)"); | ||
|
||
for (size_t i = 0; i < FILTER_SIZE + 1; ++i) | ||
filter->remove(&two); | ||
|
||
MOZ_ASSERT(filter->mightContain(&multiple), | ||
"Filter claims to not contain 'multiple' even though we should " | ||
"have run out of space in the buckets (false positive)"); | ||
MOZ_ASSERT(filter->mightContain(&two), | ||
"Filter claims to not contain 'two' even though we should have " | ||
"run out of space in the buckets (false positive)"); | ||
|
||
filter->remove(&one); | ||
|
||
MOZ_ASSERT(!filter->mightContain(&one), | ||
"Filter should not contain 'one', because we didn't overflow its " | ||
"bucket"); | ||
|
||
filter->clear(); | ||
|
||
MOZ_ASSERT(!filter->mightContain(&multiple), | ||
"clear() failed to work"); | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.