diff options
author | thakis <thakis@chromium.org> | 2015-02-12 15:34:18 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-12 23:34:50 +0000 |
commit | a249805f376e40174998be288ed64c6463d69000 (patch) | |
tree | 5182b1f9d18ed7078666ec397c2769c71a840ee4 | |
parent | 334a86c68f23d2d0edb7242f9cc0908d3f2114e8 (diff) | |
download | chromium_src-a249805f376e40174998be288ed64c6463d69000.zip chromium_src-a249805f376e40174998be288ed64c6463d69000.tar.gz chromium_src-a249805f376e40174998be288ed64c6463d69000.tar.bz2 |
Delete some tests from allocator_unittests.
The atomics and "die on OOM" bits are tested elsewhere.
The motivation is that this is the only file in all of Chromium that uses
`try` / `catch`. Originally I wanted to remove just that bit, but when I tried
to compile the file I noticed that the target doesn't exist in most configs,
and the bots don't run the test, so I think the whole thing can go.
Note that no bots run this test. It's only compiled on Windows, and only
in static library builds, and only when building `all` (which means no devs
build it either). http://crbug.com/458309 tracks moving the tests that remain
in this file (which are useful) into base_unittests.
BUG=82385
Review URL: https://codereview.chromium.org/922863002
Cr-Commit-Position: refs/heads/master@{#316084}
-rw-r--r-- | base/allocator/allocator_unittest.cc | 294 |
1 files changed, 2 insertions, 292 deletions
diff --git a/base/allocator/allocator_unittest.cc b/base/allocator/allocator_unittest.cc index 9471e95..a1d1ef0 100644 --- a/base/allocator/allocator_unittest.cc +++ b/base/allocator/allocator_unittest.cc @@ -6,7 +6,7 @@ #include <stdlib.h> #include <algorithm> // for min() -#include "base/atomicops.h" +#include "base/macros.h" #include "testing/gtest/include/gtest/gtest.h" // Number of bits in a size_t. @@ -15,10 +15,6 @@ static const int kSizeBits = 8 * sizeof(size_t); static const size_t kMaxSize = ~static_cast<size_t>(0); // Maximum positive size of a size_t if it were signed. static const size_t kMaxSignedSize = ((size_t(1) << (kSizeBits-1)) - 1); -// An allocation size which is not too big to be reasonable. -static const size_t kNotTooBig = 100000; -// An allocation size which is just too big. -static const size_t kTooBig = ~static_cast<size_t>(0); namespace { @@ -82,197 +78,6 @@ static int NextSize(int size) { } } -template <class AtomicType> -static void TestAtomicIncrement() { - // For now, we just test single threaded execution - - // use a guard value to make sure the NoBarrier_AtomicIncrement doesn't go - // outside the expected address bounds. This is in particular to - // test that some future change to the asm code doesn't cause the - // 32-bit NoBarrier_AtomicIncrement to do the wrong thing on 64-bit machines. - struct { - AtomicType prev_word; - AtomicType count; - AtomicType next_word; - } s; - - AtomicType prev_word_value, next_word_value; - memset(&prev_word_value, 0xFF, sizeof(AtomicType)); - memset(&next_word_value, 0xEE, sizeof(AtomicType)); - - s.prev_word = prev_word_value; - s.count = 0; - s.next_word = next_word_value; - - EXPECT_EQ(base::subtle::NoBarrier_AtomicIncrement(&s.count, 1), 1); - EXPECT_EQ(s.count, 1); - EXPECT_EQ(s.prev_word, prev_word_value); - EXPECT_EQ(s.next_word, next_word_value); - - EXPECT_EQ(base::subtle::NoBarrier_AtomicIncrement(&s.count, 2), 3); - EXPECT_EQ(s.count, 3); - EXPECT_EQ(s.prev_word, prev_word_value); - EXPECT_EQ(s.next_word, next_word_value); - - EXPECT_EQ(base::subtle::NoBarrier_AtomicIncrement(&s.count, 3), 6); - EXPECT_EQ(s.count, 6); - EXPECT_EQ(s.prev_word, prev_word_value); - EXPECT_EQ(s.next_word, next_word_value); - - EXPECT_EQ(base::subtle::NoBarrier_AtomicIncrement(&s.count, -3), 3); - EXPECT_EQ(s.count, 3); - EXPECT_EQ(s.prev_word, prev_word_value); - EXPECT_EQ(s.next_word, next_word_value); - - EXPECT_EQ(base::subtle::NoBarrier_AtomicIncrement(&s.count, -2), 1); - EXPECT_EQ(s.count, 1); - EXPECT_EQ(s.prev_word, prev_word_value); - EXPECT_EQ(s.next_word, next_word_value); - - EXPECT_EQ(base::subtle::NoBarrier_AtomicIncrement(&s.count, -1), 0); - EXPECT_EQ(s.count, 0); - EXPECT_EQ(s.prev_word, prev_word_value); - EXPECT_EQ(s.next_word, next_word_value); - - EXPECT_EQ(base::subtle::NoBarrier_AtomicIncrement(&s.count, -1), -1); - EXPECT_EQ(s.count, -1); - EXPECT_EQ(s.prev_word, prev_word_value); - EXPECT_EQ(s.next_word, next_word_value); - - EXPECT_EQ(base::subtle::NoBarrier_AtomicIncrement(&s.count, -4), -5); - EXPECT_EQ(s.count, -5); - EXPECT_EQ(s.prev_word, prev_word_value); - EXPECT_EQ(s.next_word, next_word_value); - - EXPECT_EQ(base::subtle::NoBarrier_AtomicIncrement(&s.count, 5), 0); - EXPECT_EQ(s.count, 0); - EXPECT_EQ(s.prev_word, prev_word_value); - EXPECT_EQ(s.next_word, next_word_value); -} - - -#define NUM_BITS(T) (sizeof(T) * 8) - - -template <class AtomicType> -static void TestCompareAndSwap() { - AtomicType value = 0; - AtomicType prev = base::subtle::NoBarrier_CompareAndSwap(&value, 0, 1); - EXPECT_EQ(1, value); - EXPECT_EQ(0, prev); - - // Use test value that has non-zero bits in both halves, more for testing - // 64-bit implementation on 32-bit platforms. - const AtomicType k_test_val = (static_cast<uint64_t>(1) << - (NUM_BITS(AtomicType) - 2)) + 11; - value = k_test_val; - prev = base::subtle::NoBarrier_CompareAndSwap(&value, 0, 5); - EXPECT_EQ(k_test_val, value); - EXPECT_EQ(k_test_val, prev); - - value = k_test_val; - prev = base::subtle::NoBarrier_CompareAndSwap(&value, k_test_val, 5); - EXPECT_EQ(5, value); - EXPECT_EQ(k_test_val, prev); -} - - -template <class AtomicType> -static void TestAtomicExchange() { - AtomicType value = 0; - AtomicType new_value = base::subtle::NoBarrier_AtomicExchange(&value, 1); - EXPECT_EQ(1, value); - EXPECT_EQ(0, new_value); - - // Use test value that has non-zero bits in both halves, more for testing - // 64-bit implementation on 32-bit platforms. - const AtomicType k_test_val = (static_cast<uint64_t>(1) << - (NUM_BITS(AtomicType) - 2)) + 11; - value = k_test_val; - new_value = base::subtle::NoBarrier_AtomicExchange(&value, k_test_val); - EXPECT_EQ(k_test_val, value); - EXPECT_EQ(k_test_val, new_value); - - value = k_test_val; - new_value = base::subtle::NoBarrier_AtomicExchange(&value, 5); - EXPECT_EQ(5, value); - EXPECT_EQ(k_test_val, new_value); -} - - -template <class AtomicType> -static void TestAtomicIncrementBounds() { - // Test increment at the half-width boundary of the atomic type. - // It is primarily for testing at the 32-bit boundary for 64-bit atomic type. - AtomicType test_val = static_cast<uint64_t>(1) << (NUM_BITS(AtomicType) / 2); - AtomicType value = test_val - 1; - AtomicType new_value = base::subtle::NoBarrier_AtomicIncrement(&value, 1); - EXPECT_EQ(test_val, value); - EXPECT_EQ(value, new_value); - - base::subtle::NoBarrier_AtomicIncrement(&value, -1); - EXPECT_EQ(test_val - 1, value); -} - -// This is a simple sanity check that values are correct. Not testing -// atomicity -template <class AtomicType> -static void TestStore() { - const AtomicType kVal1 = static_cast<AtomicType>(0xa5a5a5a5a5a5a5a5LL); - const AtomicType kVal2 = static_cast<AtomicType>(-1); - - AtomicType value; - - base::subtle::NoBarrier_Store(&value, kVal1); - EXPECT_EQ(kVal1, value); - base::subtle::NoBarrier_Store(&value, kVal2); - EXPECT_EQ(kVal2, value); - - base::subtle::Acquire_Store(&value, kVal1); - EXPECT_EQ(kVal1, value); - base::subtle::Acquire_Store(&value, kVal2); - EXPECT_EQ(kVal2, value); - - base::subtle::Release_Store(&value, kVal1); - EXPECT_EQ(kVal1, value); - base::subtle::Release_Store(&value, kVal2); - EXPECT_EQ(kVal2, value); -} - -// This is a simple sanity check that values are correct. Not testing -// atomicity -template <class AtomicType> -static void TestLoad() { - const AtomicType kVal1 = static_cast<AtomicType>(0xa5a5a5a5a5a5a5a5LL); - const AtomicType kVal2 = static_cast<AtomicType>(-1); - - AtomicType value; - - value = kVal1; - EXPECT_EQ(kVal1, base::subtle::NoBarrier_Load(&value)); - value = kVal2; - EXPECT_EQ(kVal2, base::subtle::NoBarrier_Load(&value)); - - value = kVal1; - EXPECT_EQ(kVal1, base::subtle::Acquire_Load(&value)); - value = kVal2; - EXPECT_EQ(kVal2, base::subtle::Acquire_Load(&value)); - - value = kVal1; - EXPECT_EQ(kVal1, base::subtle::Release_Load(&value)); - value = kVal2; - EXPECT_EQ(kVal2, base::subtle::Release_Load(&value)); -} - -template <class AtomicType> -static void TestAtomicOps() { - TestCompareAndSwap<AtomicType>(); - TestAtomicExchange<AtomicType>(); - TestAtomicIncrementBounds<AtomicType>(); - TestStore<AtomicType>(); - TestLoad<AtomicType>(); -} - static void TestCalloc(size_t n, size_t s, bool ok) { char* p = reinterpret_cast<char*>(calloc(n, s)); if (!ok) { @@ -287,80 +92,10 @@ static void TestCalloc(size_t n, size_t s, bool ok) { } } -// MSVC C4530 complains about exception handler usage when exceptions are -// disabled. Temporarily disable that warning so we can test that they are, in -// fact, disabled. -#if defined(OS_WIN) -#pragma warning(push) -#pragma warning(disable: 4530) -#endif - -// A global test counter for number of times the NewHandler is called. -static int news_handled = 0; -static void TestNewHandler() { - ++news_handled; - throw std::bad_alloc(); -} - -// Because we compile without exceptions, we expect these will not throw. -static void TestOneNewWithoutExceptions(void* (*func)(size_t), - bool should_throw) { - // success test - try { - void* ptr = (*func)(kNotTooBig); - EXPECT_NE(reinterpret_cast<void*>(NULL), ptr) << - "allocation should not have failed."; - } catch(...) { - EXPECT_EQ(0, 1) << "allocation threw unexpected exception."; - } - - // failure test - try { - void* rv = (*func)(kTooBig); - EXPECT_EQ(NULL, rv); - EXPECT_FALSE(should_throw) << "allocation should have thrown."; - } catch(...) { - EXPECT_TRUE(should_throw) << "allocation threw unexpected exception."; - } -} - -static void TestNothrowNew(void* (*func)(size_t)) { - news_handled = 0; - - // test without new_handler: - std::new_handler saved_handler = std::set_new_handler(0); - TestOneNewWithoutExceptions(func, false); - - // test with new_handler: - std::set_new_handler(TestNewHandler); - TestOneNewWithoutExceptions(func, true); - EXPECT_EQ(news_handled, 1) << "nothrow new_handler was not called."; - std::set_new_handler(saved_handler); -} - -#if defined(OS_WIN) -#pragma warning(pop) -#endif - } // namespace //----------------------------------------------------------------------------- -TEST(Atomics, AtomicIncrementWord) { - TestAtomicIncrement<base::subtle::AtomicWord>(); -} - -TEST(Atomics, AtomicIncrement32) { - TestAtomicIncrement<base::subtle::Atomic32>(); -} - -TEST(Atomics, AtomicOpsWord) { - TestAtomicIncrement<base::subtle::AtomicWord>(); -} - -TEST(Atomics, AtomicOps32) { - TestAtomicIncrement<base::subtle::Atomic32>(); -} TEST(Allocators, Malloc) { // Try allocating data with a bunch of alignments and sizes @@ -394,11 +129,6 @@ TEST(Allocators, Calloc) { TestCalloc(kMaxSignedSize, kMaxSignedSize, false); } -TEST(Allocators, New) { - TestNothrowNew(&::operator new); - TestNothrowNew(&::operator new[]); -} - // This makes sure that reallocing a small number of bytes in either // direction doesn't cause us to allocate new memory. TEST(Allocators, Realloc1) { @@ -458,23 +188,6 @@ TEST(Allocators, Realloc2) { free(p); } -// tcmalloc uses these semantics but system allocators can return NULL for -// realloc(ptr, 0). -#if defined(USE_TCMALLOC) -TEST(Allocators, ReallocZero) { - // Test that realloc to zero does not return NULL. - for (int size = 0; size >= 0; size = NextSize(size)) { - char* ptr = reinterpret_cast<char*>(malloc(size)); - EXPECT_NE(static_cast<char*>(NULL), ptr); - ptr = reinterpret_cast<char*>(realloc(ptr, 0)); - EXPECT_NE(static_cast<char*>(NULL), ptr); - if (ptr) - free(ptr); - } -} -#endif - -#ifdef WIN32 // Test recalloc TEST(Allocators, Recalloc) { for (int src_size = 0; src_size >= 0; src_size = NextSize(src_size)) { @@ -499,7 +212,7 @@ TEST(Allocators, AlignedMalloc) { // Try allocating data with a bunch of alignments and sizes static const int kTestAlignments[] = {8, 16, 256, 4096, 8192, 16384}; for (int size = 1; size > 0; size = NextSize(size)) { - for (int i = 0; i < ARRAYSIZE(kTestAlignments); ++i) { + for (int i = 0; i < arraysize(kTestAlignments); ++i) { unsigned char* ptr = static_cast<unsigned char*>( _aligned_malloc(size, kTestAlignments[i])); CheckAlignment(ptr, kTestAlignments[i]); @@ -526,9 +239,6 @@ TEST(Allocators, AlignedMalloc) { } } -#endif - - int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); |