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 id23657
push useremorley@mozilla.com
push dateThu, 11 Oct 2012 13:47:00 +0000
treeherdermozilla-central@2fae8bd461da [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerstestingonlychange
milestone19.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
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;
-}