Home | History | Annotate | Download | only in memory
      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