|  | // Copyright 2017 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "base/allocator/malloc_zone_functions_mac.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  | namespace base { | 
|  | namespace allocator { | 
|  |  | 
|  | class MallocZoneFunctionsTest : public testing::Test { | 
|  | protected: | 
|  | void TearDown() override { ClearAllMallocZonesForTesting(); } | 
|  | }; | 
|  |  | 
|  | TEST_F(MallocZoneFunctionsTest, TestDefaultZoneMallocFree) { | 
|  | ChromeMallocZone* malloc_zone = | 
|  | reinterpret_cast<ChromeMallocZone*>(malloc_default_zone()); | 
|  | StoreMallocZone(malloc_zone); | 
|  | int* test = reinterpret_cast<int*>( | 
|  | g_malloc_zones[0].malloc(malloc_default_zone(), 33)); | 
|  | test[0] = 1; | 
|  | test[1] = 2; | 
|  | g_malloc_zones[0].free(malloc_default_zone(), test); | 
|  | } | 
|  |  | 
|  | TEST_F(MallocZoneFunctionsTest, IsZoneAlreadyStored) { | 
|  | ChromeMallocZone* malloc_zone = | 
|  | reinterpret_cast<ChromeMallocZone*>(malloc_default_zone()); | 
|  | EXPECT_FALSE(IsMallocZoneAlreadyStored(malloc_zone)); | 
|  | StoreMallocZone(malloc_zone); | 
|  | EXPECT_TRUE(IsMallocZoneAlreadyStored(malloc_zone)); | 
|  | } | 
|  |  | 
|  | TEST_F(MallocZoneFunctionsTest, CannotDoubleStoreZone) { | 
|  | ChromeMallocZone* malloc_zone = | 
|  | reinterpret_cast<ChromeMallocZone*>(malloc_default_zone()); | 
|  | StoreMallocZone(malloc_zone); | 
|  | StoreMallocZone(malloc_zone); | 
|  | EXPECT_EQ(1, GetMallocZoneCountForTesting()); | 
|  | } | 
|  |  | 
|  | TEST_F(MallocZoneFunctionsTest, CannotStoreMoreThanMaxZones) { | 
|  | std::vector<ChromeMallocZone> zones; | 
|  | zones.resize(kMaxZoneCount * 2); | 
|  | for (int i = 0; i < kMaxZoneCount * 2; ++i) { | 
|  | ChromeMallocZone& zone = zones[i]; | 
|  | memcpy(&zone, malloc_default_zone(), sizeof(ChromeMallocZone)); | 
|  | StoreMallocZone(&zone); | 
|  | } | 
|  |  | 
|  | int max_zone_count = kMaxZoneCount; | 
|  | EXPECT_EQ(max_zone_count, GetMallocZoneCountForTesting()); | 
|  | } | 
|  |  | 
|  | }  // namespace allocator | 
|  | }  // namespace base |