Move TestBloomFilter out of XPCOM and into mfbt/tests, now that it exists. No bug, r=testingonlychange
authorJeff Walden <jwalden@mit.edu>
Wed, 03 Oct 2012 17:09:59 -0700
changeset 109884 4e3e7e1496afe9c27fd503f14f33b9cb461d98ec
parent 109883 2a8a8a60451193e8b6e737860899cf5da1f06510
child 109885 176600f40ddfc4d73e2367285eca456eda33ed62
push idunknown
push userunknown
push dateunknown
reviewerstestingonlychange
milestone19.0a1
Move TestBloomFilter out of XPCOM and into mfbt/tests, now that it exists. No bug, r=testingonlychange
mfbt/BloomFilter.h
mfbt/tests/Makefile.in
mfbt/tests/TestBloomFilter.cpp
xpcom/tests/Makefile.in
xpcom/tests/TestBloomFilter.cpp
--- a/mfbt/BloomFilter.h
+++ b/mfbt/BloomFilter.h
@@ -8,16 +8,17 @@
  * do fast probabilistic "is item X in set Y?" testing which will
  * never answer "no" when the correct answer is "yes" (but might
  * incorrectly answer "yes" when the correct answer is "no").
  */
 
 #ifndef mozilla_BloomFilter_h_
 #define mozilla_BloomFilter_h_
 
+#include "mozilla/Assertions.h"
 #include "mozilla/Likely.h"
 #include "mozilla/StandardInteger.h"
 #include "mozilla/Util.h"
 
 #include <string.h>
 
 namespace mozilla {
 
--- a/mfbt/tests/Makefile.in
+++ b/mfbt/tests/Makefile.in
@@ -7,19 +7,20 @@ topsrcdir = @top_srcdir@
 srcdir = @srcdir@
 VPATH = @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 STL_FLAGS =
 
 CPP_UNIT_TESTS = \
+  TestBloomFilter.cpp \
   TestCheckedInt.cpp \
+  TestSHA1.cpp \
   TestTypeTraits.cpp \
-  TestSHA1.cpp \
   TestWeakPtr.cpp \
   $(NULL)
 
 # in order to prevent rules.mk from trying to link to libraries that are
 # not available to MFBT, we have to reset these MOZ_GLUE*_LDFLAGS before including it
 # and LIBS_ after including it. For WRAP_LDFLAGS, it shouldn't matter.
 # See later comments in bug 732875.
 
new file mode 100644
--- /dev/null
+++ b/mfbt/tests/TestBloomFilter.cpp
@@ -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;
+}
--- a/xpcom/tests/Makefile.in
+++ b/xpcom/tests/Makefile.in
@@ -55,17 +55,16 @@ endif
 
 SIMPLE_PROGRAMS	:= $(CPPSRCS:.cpp=$(BIN_SUFFIX))
 
 CPP_UNIT_TESTS = \
                  ShowAlignments.cpp \
                  ShowSSEConfig.cpp \
                  TestAutoPtr.cpp \
                  TestAutoRef.cpp \
-                 TestBloomFilter.cpp \
                  TestCOMArray.cpp \
                  TestCOMPtr.cpp \
                  TestCOMPtrEq.cpp \
                  TestDeque.cpp \
                  TestFile.cpp \
                  TestHashtables.cpp \
                  TestID.cpp \
                  TestObserverArray.cpp \
deleted file mode 100644
--- a/xpcom/tests/TestBloomFilter.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-/* -*- 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/BloomFilter.h"
-#include "TestHarness.h"
-
-#include <stdio.h>
-
-using namespace mozilla;
-
-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>();
-
-  FilterChecker one(1);
-  FilterChecker two(0x20000);
-  FilterChecker many(0x10000);
-  FilterChecker multiple(0x20001);
-
-  filter->add(&one);
-  if (!filter->mightContain(&one)) {
-    fail("Filter should contain 'one'");
-    return -1;
-  }
-
-  if (filter->mightContain(&multiple)) {
-    fail("Filter claims to contain 'multiple' when it should not");
-    return -1;
-  }
-
-  if (!filter->mightContain(&many)) {
-    fail("Filter should contain 'many' (false positive)");
-    return -1;
-  }
-
-  filter->add(&two);
-  if (!filter->mightContain(&multiple)) {
-    fail("Filter should contain 'multiple' (false positive)");
-    return -1;
-  }
-
-  // Test basic removals
-  filter->remove(&two);
-  if (filter->mightContain(&multiple)) {
-    fail("Filter claims to contain 'multiple' when it should not after two was "
-         "removed");
-    return -1;
-  }
-
-  // Test multiple addition/removal
-  const unsigned FILTER_SIZE = 255;
-  for (unsigned i = 0; i < FILTER_SIZE - 1; ++i) {
-    filter->add(&two);
-  }
-  if (!filter->mightContain(&multiple)) {
-    fail("Filter should contain 'multiple' after 'two' added lots of times "
-         "(false positive)");
-    return -1;
-  }
-  for (unsigned i = 0; i < FILTER_SIZE - 1; ++i) {
-    filter->remove(&two);
-  }
-  if (filter->mightContain(&multiple)) {
-    fail("Filter claims to contain 'multiple' when it should not after two was "
-         "removed lots of times");
-    return -1;
-  }
-
-  // Test overflowing the filter buckets
-  for (unsigned i = 0; i < FILTER_SIZE + 1; ++i) {
-    filter->add(&two);
-  }
-  if (!filter->mightContain(&multiple)) {
-    fail("Filter should contain 'multiple' after 'two' added lots more times "
-         "(false positive)");
-    return -1;
-  }
-  for (unsigned i = 0; i < FILTER_SIZE + 1; ++i) {
-    filter->remove(&two);
-  }
-  if (!filter->mightContain(&multiple)) {
-    fail("Filter claims to not contain 'multiple' even though we should have "
-         "run out of space in the buckets (false positive)");
-    return -1;
-  }
-  if (!filter->mightContain(&two)) {
-    fail("Filter claims to not contain 'two' even though we should have run "
-         "out of space in the buckets (false positive)");
-    return -1;
-  }
-
-  filter->remove(&one);
-  if (filter->mightContain(&one)) {
-    fail("Filter should not contain 'one', because we didn't overflow its "
-         "bucket");
-    return -1;
-  }
-  
-  filter->clear();
-  if (filter->mightContain(&multiple)) {
-    fail("clear() failed to work");
-    return -1;
-  }
-
-  return 0;
-}