1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "chre/util/synchronized_memory_pool.h"
18 
19 #include "gtest/gtest.h"
20 
21 using chre::SynchronizedMemoryPool;
22 
23 namespace {
24 
25 class ConstructorCount {
26  public:
ConstructorCount(int value_)27   ConstructorCount(int value_) : value(value_) {
28     sConstructedCounter++;
29   }
~ConstructorCount()30   ~ConstructorCount() {
31     sConstructedCounter--;
32   }
getValue()33   int getValue() {
34     return value;
35   }
36 
37   static ssize_t sConstructedCounter;
38 
39  private:
40   const int value;
41 };
42 
43 ssize_t ConstructorCount::sConstructedCounter = 0;
44 
45 }  // namespace
46 
TEST(SynchronizedMemoryPool,FreeBlockCheck)47 TEST(SynchronizedMemoryPool, FreeBlockCheck) {
48   constexpr uint8_t maxSize = 12;
49   constexpr uint8_t blankSpace = 2;
50 
51   SynchronizedMemoryPool<int, maxSize> testMemoryPool;
52   int *tempDataPtrs[maxSize];
53 
54   for (int i = 0; i < maxSize - blankSpace; ++i) {
55     tempDataPtrs[i] = testMemoryPool.allocate(i);
56   }
57 
58   EXPECT_EQ(testMemoryPool.getFreeBlockCount(), blankSpace);
59 
60   for (int i = 0; i < maxSize - blankSpace; ++i) {
61     testMemoryPool.deallocate(tempDataPtrs[i]);
62   }
63 }
64