Bug 1313485 - Convert XPCOM test TestJemalloc to a gtest. r=njn
☠☠ backed out by d140a7a856b7 ☠ ☠
authorEric Rahm <erahm@mozilla.com>
Mon, 07 Nov 2016 14:26:25 -0800
changeset 321435 1b545e55e42aae19c6ba66f316b3b8167732be4b
parent 321434 6a7831fbca696651b68f30cbe0d984d2fc1357c3
child 321436 22e770047827a7852201162b86b661cee76479dc
push id83600
push usererahm@mozilla.com
push dateMon, 07 Nov 2016 22:26:47 +0000
treeherdermozilla-inbound@1b545e55e42a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersnjn
bugs1313485
milestone52.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
Bug 1313485 - Convert XPCOM test TestJemalloc to a gtest. r=njn MozReview-Commit-ID: 5yzn8o33Ne5
memory/gtest/TestJemalloc.cpp
memory/gtest/moz.build
memory/moz.build
testing/cppunittest.ini
xpcom/tests/TestJemalloc.cpp
xpcom/tests/moz.build
rename from xpcom/tests/TestJemalloc.cpp
rename to memory/gtest/TestJemalloc.cpp
--- a/xpcom/tests/TestJemalloc.cpp
+++ b/memory/gtest/TestJemalloc.cpp
@@ -1,78 +1,51 @@
 /* -*-  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/. */
 
-/*
- * Ideally, this test would be in memory/test/.  But I couldn't get it to build
- * there (couldn't find TestHarness.h).  I think memory/ is processed too early
- * in the build.  So it's here.
- */
-
-#include "TestHarness.h"
+#include "mozilla/mozalloc.h"
 #include "mozmemory.h"
 
-static inline bool
+#include "gtest/gtest.h"
+
+static inline void
 TestOne(size_t size)
 {
     size_t req = size;
     size_t adv = malloc_good_size(req);
     char* p = (char*)malloc(req);
     size_t usable = moz_malloc_usable_size(p);
-    if (adv != usable) {
-      fail("malloc_good_size(%d) --> %d; "
-           "malloc_usable_size(%d) --> %d",
-           req, adv, req, usable);
-      return false;
-    }
+    // NB: Using EXPECT here so that we still free the memory on failure.
+    EXPECT_EQ(adv, usable) <<
+           "malloc_good_size(" << req << ") --> " << adv << "; "
+           "malloc_usable_size(" << req << ") --> " << usable;
     free(p);
-    return true;
 }
 
-static inline bool
+static inline void
 TestThree(size_t size)
 {
-    return TestOne(size - 1) && TestOne(size) && TestOne(size + 1);
+    ASSERT_NO_FATAL_FAILURE(TestOne(size - 1));
+    ASSERT_NO_FATAL_FAILURE(TestOne(size));
+    ASSERT_NO_FATAL_FAILURE(TestOne(size + 1));
 }
 
-static nsresult
-TestJemallocUsableSizeInAdvance()
+TEST(Jemalloc, UsableSizeInAdvance)
 {
   #define K   * 1024
   #define M   * 1024 * 1024
 
   /*
    * Test every size up to a certain point, then (N-1, N, N+1) triplets for a
    * various sizes beyond that.
    */
 
   for (size_t n = 0; n < 16 K; n++)
-    if (!TestOne(n))
-      return NS_ERROR_UNEXPECTED;
+    ASSERT_NO_FATAL_FAILURE(TestOne(n));
 
   for (size_t n = 16 K; n < 1 M; n += 4 K)
-    if (!TestThree(n))
-      return NS_ERROR_UNEXPECTED;
+    ASSERT_NO_FATAL_FAILURE(TestThree(n));
 
   for (size_t n = 1 M; n < 8 M; n += 128 K)
-    if (!TestThree(n))
-      return NS_ERROR_UNEXPECTED;
-
-  passed("malloc_good_size");
-
-  return NS_OK;
+    ASSERT_NO_FATAL_FAILURE(TestThree(n));
 }
-
-int main(int argc, char** argv)
-{
-  int rv = 0;
-  ScopedXPCOM xpcom("jemalloc");
-  if (xpcom.failed())
-      return 1;
-
-  if (NS_FAILED(TestJemallocUsableSizeInAdvance()))
-    rv = 1;
-
-  return rv;
-}
-
new file mode 100644
--- /dev/null
+++ b/memory/gtest/moz.build
@@ -0,0 +1,11 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# 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/.
+
+UNIFIED_SOURCES += [
+    'TestJemalloc.cpp',
+]
+
+FINAL_LIBRARY = 'xul-gtest'
--- a/memory/moz.build
+++ b/memory/moz.build
@@ -10,16 +10,17 @@ DIRS += [
 ]
 
 if not CONFIG['JS_STANDALONE']:
     DIRS += ['volatile']
 
 if CONFIG['MOZ_MEMORY']:
     DIRS += [
         'build',
+        'gtest',
         'mozjemalloc',
     ]
 
     if CONFIG['MOZ_JEMALLOC4'] or CONFIG['MOZ_REPLACE_MALLOC']:
         if not CONFIG['MOZ_SYSTEM_JEMALLOC']:
             DIRS += ['jemalloc']
 
     if CONFIG['MOZ_REPLACE_MALLOC']:
--- a/testing/cppunittest.ini
+++ b/testing/cppunittest.ini
@@ -29,17 +29,16 @@ skip-if = os != 'win'
 [TestEnumTypeTraits]
 [TestFastBernoulliTrial]
 [TestFloatingPoint]
 [TestFunction]
 [TestIntegerPrintfMacros]
 [TestIntegerRange]
 [TestIsCertBuiltInRoot]
 [TestJSONWriter]
-[TestJemalloc]
 [TestLinkedList]
 [TestMacroArgs]
 [TestMacroForEach]
 [TestMathAlgorithms]
 [TestMaybe]
 [TestNtPathToDosPath]
 skip-if = os != 'win'
 [TestPLDHash]
--- a/xpcom/tests/moz.build
+++ b/xpcom/tests/moz.build
@@ -40,21 +40,16 @@ if CONFIG['OS_TARGET'] == 'WINNT':
 
 if CONFIG['WRAP_STL_INCLUDES'] and not CONFIG['CLANG_CL']:
     GeckoSimplePrograms([
         'TestSTLWrappers',
     ])
 
 XPCSHELL_TESTS_MANIFESTS += ['unit/xpcshell.ini']
 
-if CONFIG['MOZ_MEMORY']:
-    GeckoCppUnitTests([
-        'TestJemalloc',
-    ])
-
 # FIXME: bug 577500 TestStaticAtoms fails when run in dist/bin
 #CPP_UNIT_TESTS += [
 #    'TestStaticAtoms',
 #]
 
 if CONFIG['MOZ_DEBUG'] and CONFIG['OS_ARCH'] not in ('WINNT'):
     # FIXME bug 523392: TestDeadlockDetector doesn't like Windows
     # FIXME bug 523378: also fails on OS X