xref: /aosp_15_r20/system/chre/util/tests/blocking_queue_test.cc (revision 84e339476a462649f82315436d70fd732297a399)
1*84e33947SAndroid Build Coastguard Worker /*
2*84e33947SAndroid Build Coastguard Worker  * Copyright (C) 2016 The Android Open Source Project
3*84e33947SAndroid Build Coastguard Worker  *
4*84e33947SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*84e33947SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*84e33947SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*84e33947SAndroid Build Coastguard Worker  *
8*84e33947SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*84e33947SAndroid Build Coastguard Worker  *
10*84e33947SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*84e33947SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*84e33947SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*84e33947SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*84e33947SAndroid Build Coastguard Worker  * limitations under the License.
15*84e33947SAndroid Build Coastguard Worker  */
16*84e33947SAndroid Build Coastguard Worker 
17*84e33947SAndroid Build Coastguard Worker #include "gtest/gtest.h"
18*84e33947SAndroid Build Coastguard Worker 
19*84e33947SAndroid Build Coastguard Worker #include "chre/util/blocking_segmented_queue.h"
20*84e33947SAndroid Build Coastguard Worker #include "chre/util/system/fixed_size_blocking_queue.h"
21*84e33947SAndroid Build Coastguard Worker #include "chre/util/unique_ptr.h"
22*84e33947SAndroid Build Coastguard Worker 
23*84e33947SAndroid Build Coastguard Worker using chre::BlockingSegmentedQueue;
24*84e33947SAndroid Build Coastguard Worker using chre::FixedSizeBlockingQueue;
25*84e33947SAndroid Build Coastguard Worker using chre::MakeUnique;
26*84e33947SAndroid Build Coastguard Worker using chre::UniquePtr;
27*84e33947SAndroid Build Coastguard Worker 
28*84e33947SAndroid Build Coastguard Worker namespace {
29*84e33947SAndroid Build Coastguard Worker class ConstructorCount {
30*84e33947SAndroid Build Coastguard Worker  public:
ConstructorCount(int value_,ssize_t * constructedCount)31*84e33947SAndroid Build Coastguard Worker   ConstructorCount(int value_, ssize_t *constructedCount)
32*84e33947SAndroid Build Coastguard Worker       : sConstructedCounter(constructedCount), value(value_) {
33*84e33947SAndroid Build Coastguard Worker     (*sConstructedCounter)++;
34*84e33947SAndroid Build Coastguard Worker   }
~ConstructorCount()35*84e33947SAndroid Build Coastguard Worker   ~ConstructorCount() {
36*84e33947SAndroid Build Coastguard Worker     (*sConstructedCounter)--;
37*84e33947SAndroid Build Coastguard Worker   }
getValue()38*84e33947SAndroid Build Coastguard Worker   int getValue() {
39*84e33947SAndroid Build Coastguard Worker     return value;
40*84e33947SAndroid Build Coastguard Worker   }
41*84e33947SAndroid Build Coastguard Worker 
42*84e33947SAndroid Build Coastguard Worker   ssize_t *sConstructedCounter;
43*84e33947SAndroid Build Coastguard Worker 
44*84e33947SAndroid Build Coastguard Worker  private:
45*84e33947SAndroid Build Coastguard Worker   int value;
46*84e33947SAndroid Build Coastguard Worker };
47*84e33947SAndroid Build Coastguard Worker 
48*84e33947SAndroid Build Coastguard Worker }  // namespace
49*84e33947SAndroid Build Coastguard Worker 
TEST(BlockingQueue,IsEmptyByDefault)50*84e33947SAndroid Build Coastguard Worker TEST(BlockingQueue, IsEmptyByDefault) {
51*84e33947SAndroid Build Coastguard Worker   FixedSizeBlockingQueue<int, 16> blockingQueue;
52*84e33947SAndroid Build Coastguard Worker   ASSERT_TRUE(blockingQueue.empty());
53*84e33947SAndroid Build Coastguard Worker }
54*84e33947SAndroid Build Coastguard Worker 
TEST(BlockingQueue,PushPopVerifyOrder)55*84e33947SAndroid Build Coastguard Worker TEST(BlockingQueue, PushPopVerifyOrder) {
56*84e33947SAndroid Build Coastguard Worker   FixedSizeBlockingQueue<int, 16> blockingQueue;
57*84e33947SAndroid Build Coastguard Worker 
58*84e33947SAndroid Build Coastguard Worker   ASSERT_TRUE(blockingQueue.push(0x1337));
59*84e33947SAndroid Build Coastguard Worker   ASSERT_TRUE(blockingQueue.push(0xcafe));
60*84e33947SAndroid Build Coastguard Worker 
61*84e33947SAndroid Build Coastguard Worker   ASSERT_EQ(blockingQueue.pop(), 0x1337);
62*84e33947SAndroid Build Coastguard Worker   ASSERT_EQ(blockingQueue.pop(), 0xcafe);
63*84e33947SAndroid Build Coastguard Worker }
64*84e33947SAndroid Build Coastguard Worker 
TEST(BlockingQueue,PushPopMove)65*84e33947SAndroid Build Coastguard Worker TEST(BlockingQueue, PushPopMove) {
66*84e33947SAndroid Build Coastguard Worker   static constexpr int kVal = 0xbeef;
67*84e33947SAndroid Build Coastguard Worker   UniquePtr<int> ptr = MakeUnique<int>();
68*84e33947SAndroid Build Coastguard Worker   *ptr = kVal;
69*84e33947SAndroid Build Coastguard Worker 
70*84e33947SAndroid Build Coastguard Worker   FixedSizeBlockingQueue<UniquePtr<int>, 16> blockingQueue;
71*84e33947SAndroid Build Coastguard Worker 
72*84e33947SAndroid Build Coastguard Worker   ASSERT_TRUE(blockingQueue.push(std::move(ptr)));
73*84e33947SAndroid Build Coastguard Worker   ASSERT_TRUE(ptr.isNull());
74*84e33947SAndroid Build Coastguard Worker   ASSERT_EQ(*(blockingQueue.pop()), kVal);
75*84e33947SAndroid Build Coastguard Worker }
76*84e33947SAndroid Build Coastguard Worker 
TEST(BlockingSegmentedQueue,InitState)77*84e33947SAndroid Build Coastguard Worker TEST(BlockingSegmentedQueue, InitState) {
78*84e33947SAndroid Build Coastguard Worker   constexpr uint8_t blockSize = 16;
79*84e33947SAndroid Build Coastguard Worker   constexpr uint8_t maxBlockCount = 3;
80*84e33947SAndroid Build Coastguard Worker   constexpr uint8_t staticBlockCount = 2;
81*84e33947SAndroid Build Coastguard Worker   BlockingSegmentedQueue<int, blockSize> blockingQueue(maxBlockCount,
82*84e33947SAndroid Build Coastguard Worker                                                        staticBlockCount);
83*84e33947SAndroid Build Coastguard Worker   ASSERT_TRUE(blockingQueue.empty());
84*84e33947SAndroid Build Coastguard Worker   ASSERT_EQ(blockingQueue.block_count(), staticBlockCount);
85*84e33947SAndroid Build Coastguard Worker }
86