1 // Copyright 2014 The Android Open Source Project 2 // 3 // This software is licensed under the terms of the GNU General Public 4 // License version 2, as published by the Free Software Foundation, and 5 // may be copied, distributed, and modified under those terms. 6 // 7 // This program is distributed in the hope that it will be useful, 8 // but WITHOUT ANY WARRANTY; without even the implied warranty of 9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 // GNU General Public License for more details. 11 12 #include "android/base/memory/MallocUsableSize.h" 13 14 #include <stdlib.h> 15 16 #include <gtest/gtest.h> 17 18 namespace android { 19 namespace base { 20 21 #if USE_MALLOC_USABLE_SIZE 22 23 static size_t computeSize(size_t index) { 24 return 3 + index * 17; 25 } 26 27 TEST(MallocUsableSize, UseMallocUsableSize) { 28 const size_t kCount = 1000; 29 void* blocks[kCount]; 30 for (size_t n = 0; n < kCount; ++n) { 31 blocks[n] = ::malloc(computeSize(n)); 32 EXPECT_TRUE(blocks[n]); 33 } 34 35 for (size_t n = 0; n < kCount; ++n) { 36 size_t size = computeSize(n); 37 EXPECT_LE(size, ::malloc_usable_size(blocks[n])) 38 << "For block " << n << " of " << size << " bytes"; 39 } 40 41 for (size_t n = kCount; n > 0; --n) { 42 ::free(blocks[n - 1U]); 43 } 44 } 45 46 #else // !USE_MALLOC_USABLE_SIZE 47 48 TEST(MallocUsableSize, DoNotUseMallocUsableSize) { 49 #ifdef __linux__ 50 EXPECT_TRUE(false) << "Linux should have malloc_usable_size"; 51 #elif defined(__APPLE__) 52 EXPECT_TRUE(false) << "Darwin should have malloc_size"; 53 #elif defined(__FreeBSD__) 54 EXPECT_TRUE(false) << "FreeBSD should have malloc_size"; 55 #endif 56 } 57 58 #endif // !USE_MALLOC_USABLE_SIZE 59 60 } // namespace base 61 } // namespace android 62