Bug 1313485 - Convert XPCOM test TestJemalloc to a gtest. r=njn
MozReview-Commit-ID: 5yzn8o33Ne5
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
@@ -8,16 +8,18 @@ DIRS += [
'mozalloc',
'fallible',
]
if not CONFIG['JS_STANDALONE']:
DIRS += ['volatile']
if CONFIG['MOZ_MEMORY']:
+ # NB: gtest dir is included in toolkit/toolkit.build due to its dependency
+ # on libxul.
DIRS += [
'build',
'mozjemalloc',
]
if CONFIG['MOZ_JEMALLOC4'] or CONFIG['MOZ_REPLACE_MALLOC']:
if not CONFIG['MOZ_SYSTEM_JEMALLOC']:
DIRS += ['jemalloc']
--- a/testing/cppunittest.ini
+++ b/testing/cppunittest.ini
@@ -26,17 +26,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/toolkit/toolkit.mozbuild
+++ b/toolkit/toolkit.mozbuild
@@ -190,8 +190,11 @@ if CONFIG['ENABLE_TESTS']:
if CONFIG['MOZ_WEBRTC'] and CONFIG['MOZ_WIDGET_TOOLKIT'] != 'gonk' and not CONFIG['MOZ_TASK_TRACER']:
DIRS += [
'/media/webrtc/signaling/test',
'/media/mtransport/test',
]
if CONFIG['FUZZING']:
DIRS += ['/tools/fuzzing']
+
+if CONFIG['MOZ_MEMORY']:
+ DIRS += ['/memory/gtest']
--- a/xpcom/tests/moz.build
+++ b/xpcom/tests/moz.build
@@ -43,21 +43,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