| OLD | NEW |
| 1 // Copyright (c) 2009, Google Inc. | 1 // Copyright (c) 2009, Google Inc. |
| 2 // All rights reserved. | 2 // All rights reserved. |
| 3 // | 3 // |
| 4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
| 5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
| 6 // met: | 6 // met: |
| 7 // | 7 // |
| 8 // * Redistributions of source code must retain the above copyright | 8 // * Redistributions of source code must retain the above copyright |
| 9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. |
| 10 // * Redistributions in binary form must reproduce the above | 10 // * Redistributions in binary form must reproduce the above |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 #include "common/memory.h" | 31 #include "common/memory.h" |
| 32 | 32 |
| 33 using namespace google_breakpad; | 33 using namespace google_breakpad; |
| 34 | 34 |
| 35 namespace { | 35 namespace { |
| 36 typedef testing::Test PageAllocatorTest; | 36 typedef testing::Test PageAllocatorTest; |
| 37 } | 37 } |
| 38 | 38 |
| 39 TEST(PageAllocatorTest, Setup) { | 39 TEST(PageAllocatorTest, Setup) { |
| 40 PageAllocator allocator; | 40 PageAllocator allocator; |
| 41 EXPECT_EQ(0, allocator.pages_allocated()); |
| 41 } | 42 } |
| 42 | 43 |
| 43 TEST(PageAllocatorTest, SmallObjects) { | 44 TEST(PageAllocatorTest, SmallObjects) { |
| 44 PageAllocator allocator; | 45 PageAllocator allocator; |
| 45 | 46 |
| 47 EXPECT_EQ(0, allocator.pages_allocated()); |
| 46 for (unsigned i = 1; i < 1024; ++i) { | 48 for (unsigned i = 1; i < 1024; ++i) { |
| 47 uint8_t *p = reinterpret_cast<uint8_t*>(allocator.Alloc(i)); | 49 uint8_t *p = reinterpret_cast<uint8_t*>(allocator.Alloc(i)); |
| 48 ASSERT_FALSE(p == NULL); | 50 ASSERT_FALSE(p == NULL); |
| 49 memset(p, 0, i); | 51 memset(p, 0, i); |
| 50 } | 52 } |
| 51 } | 53 } |
| 52 | 54 |
| 53 TEST(PageAllocatorTest, LargeObject) { | 55 TEST(PageAllocatorTest, LargeObject) { |
| 54 PageAllocator allocator; | 56 PageAllocator allocator; |
| 55 | 57 |
| 58 EXPECT_EQ(0, allocator.pages_allocated()); |
| 56 uint8_t *p = reinterpret_cast<uint8_t*>(allocator.Alloc(10000)); | 59 uint8_t *p = reinterpret_cast<uint8_t*>(allocator.Alloc(10000)); |
| 57 ASSERT_FALSE(p == NULL); | 60 ASSERT_FALSE(p == NULL); |
| 61 EXPECT_EQ(3, allocator.pages_allocated()); |
| 58 for (unsigned i = 1; i < 10; ++i) { | 62 for (unsigned i = 1; i < 10; ++i) { |
| 59 uint8_t *p = reinterpret_cast<uint8_t*>(allocator.Alloc(i)); | 63 uint8_t *p = reinterpret_cast<uint8_t*>(allocator.Alloc(i)); |
| 60 ASSERT_FALSE(p == NULL); | 64 ASSERT_FALSE(p == NULL); |
| 61 memset(p, 0, i); | 65 memset(p, 0, i); |
| 62 } | 66 } |
| 63 } | 67 } |
| 64 | 68 |
| 65 namespace { | 69 namespace { |
| 66 typedef testing::Test WastefulVectorTest; | 70 typedef testing::Test WastefulVectorTest; |
| 67 } | 71 } |
| 68 | 72 |
| 69 TEST(WastefulVectorTest, Setup) { | 73 TEST(WastefulVectorTest, Setup) { |
| 70 PageAllocator allocator_; | 74 PageAllocator allocator_; |
| 71 wasteful_vector<int> v(&allocator_); | 75 wasteful_vector<int> v(&allocator_); |
| 72 ASSERT_TRUE(v.empty()); | 76 ASSERT_TRUE(v.empty()); |
| 73 ASSERT_EQ(v.size(), 0u); | 77 ASSERT_EQ(v.size(), 0u); |
| 74 } | 78 } |
| 75 | 79 |
| 76 TEST(WastefulVectorTest, Simple) { | 80 TEST(WastefulVectorTest, Simple) { |
| 77 PageAllocator allocator_; | 81 PageAllocator allocator_; |
| 82 EXPECT_EQ(0, allocator_.pages_allocated()); |
| 78 wasteful_vector<unsigned> v(&allocator_); | 83 wasteful_vector<unsigned> v(&allocator_); |
| 79 | 84 |
| 80 for (unsigned i = 0; i < 256; ++i) { | 85 for (unsigned i = 0; i < 256; ++i) { |
| 81 v.push_back(i); | 86 v.push_back(i); |
| 82 ASSERT_EQ(i, v.back()); | 87 ASSERT_EQ(i, v.back()); |
| 83 ASSERT_EQ(&v.back(), &v[i]); | 88 ASSERT_EQ(&v.back(), &v[i]); |
| 84 } | 89 } |
| 85 ASSERT_FALSE(v.empty()); | 90 ASSERT_FALSE(v.empty()); |
| 86 ASSERT_EQ(v.size(), 256u); | 91 ASSERT_EQ(v.size(), 256u); |
| 92 EXPECT_EQ(1, allocator_.pages_allocated()); |
| 87 for (unsigned i = 0; i < 256; ++i) | 93 for (unsigned i = 0; i < 256; ++i) |
| 88 ASSERT_EQ(v[i], i); | 94 ASSERT_EQ(v[i], i); |
| 89 } | 95 } |
| 90 | 96 |
| 91 TEST(WastefulVectorTest, UsesPageAllocator) { | 97 TEST(WastefulVectorTest, UsesPageAllocator) { |
| 92 PageAllocator allocator_; | 98 PageAllocator allocator_; |
| 93 wasteful_vector<unsigned> v(&allocator_); | 99 wasteful_vector<unsigned> v(&allocator_); |
| 100 EXPECT_EQ(1, allocator_.pages_allocated()); |
| 94 | 101 |
| 95 v.push_back(1); | 102 v.push_back(1); |
| 96 ASSERT_TRUE(allocator_.OwnsPointer(&v[0])); | 103 ASSERT_TRUE(allocator_.OwnsPointer(&v[0])); |
| 97 } | 104 } |
| 105 |
| 106 TEST(WastefulVectorTest, AutoWastefulVector) { |
| 107 PageAllocator allocator_; |
| 108 EXPECT_EQ(0, allocator_.pages_allocated()); |
| 109 |
| 110 auto_wasteful_vector<unsigned, 4> v(&allocator_); |
| 111 EXPECT_EQ(0, allocator_.pages_allocated()); |
| 112 |
| 113 v.push_back(1); |
| 114 EXPECT_EQ(0, allocator_.pages_allocated()); |
| 115 EXPECT_FALSE(allocator_.OwnsPointer(&v[0])); |
| 116 |
| 117 v.resize(4); |
| 118 EXPECT_EQ(0, allocator_.pages_allocated()); |
| 119 EXPECT_FALSE(allocator_.OwnsPointer(&v[0])); |
| 120 |
| 121 v.resize(10); |
| 122 EXPECT_EQ(1, allocator_.pages_allocated()); |
| 123 EXPECT_TRUE(allocator_.OwnsPointer(&v[0])); |
| 124 } |
| OLD | NEW |