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