xref: /aosp_15_r20/external/grpc-grpc/test/core/gpr/useful_test.cc (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1 //
2 //
3 // Copyright 2015 gRPC authors.
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 //
18 
19 #include "src/core/lib/gpr/useful.h"
20 
21 #include <stdint.h>
22 
23 #include <limits>
24 #include <memory>
25 
26 #include "gtest/gtest.h"
27 
28 #include <grpc/support/port_platform.h>
29 
30 namespace grpc_core {
31 
TEST(UsefulTest,ClampWorks)32 TEST(UsefulTest, ClampWorks) {
33   EXPECT_EQ(Clamp(1, 0, 2), 1);
34   EXPECT_EQ(Clamp(0, 0, 2), 0);
35   EXPECT_EQ(Clamp(2, 0, 2), 2);
36   EXPECT_EQ(Clamp(-1, 0, 2), 0);
37   EXPECT_EQ(Clamp(3, 0, 2), 2);
38 }
39 
TEST(UsefulTest,Rotate)40 TEST(UsefulTest, Rotate) {
41   EXPECT_EQ(RotateLeft(0x80000001u, 1u), 3);
42   EXPECT_EQ(RotateRight(0x80000001u, 1u), 0xc0000000);
43 }
44 
TEST(UsefulTest,ArraySize)45 TEST(UsefulTest, ArraySize) {
46   int four[4];
47   int five[5];
48 
49   EXPECT_EQ(GPR_ARRAY_SIZE(four), 4);
50   EXPECT_EQ(GPR_ARRAY_SIZE(five), 5);
51 }
52 
TEST(UsefulTest,BitOps)53 TEST(UsefulTest, BitOps) {
54   uint32_t bitset = 0;
55 
56   EXPECT_EQ(BitCount((1u << 31) - 1), 31);
57   EXPECT_EQ(BitCount(1u << 3), 1);
58   EXPECT_EQ(BitCount(0), 0);
59   EXPECT_EQ(SetBit(&bitset, 3), 8);
60   EXPECT_EQ(BitCount(bitset), 1);
61   EXPECT_EQ(GetBit(bitset, 3), 1);
62   EXPECT_EQ(SetBit(&bitset, 1), 10);
63   EXPECT_EQ(BitCount(bitset), 2);
64   EXPECT_EQ(ClearBit(&bitset, 3), 2);
65   EXPECT_EQ(BitCount(bitset), 1);
66   EXPECT_EQ(GetBit(bitset, 3), 0);
67   EXPECT_EQ(BitCount(std::numeric_limits<uint64_t>::max()), 64);
68 }
69 
TEST(UsefulTest,SaturatingAdd)70 TEST(UsefulTest, SaturatingAdd) {
71   EXPECT_EQ(SaturatingAdd(0, 0), 0);
72   EXPECT_EQ(SaturatingAdd(0, 1), 1);
73   EXPECT_EQ(SaturatingAdd(1, 0), 1);
74   EXPECT_EQ(SaturatingAdd(1, 1), 2);
75   EXPECT_EQ(SaturatingAdd(std::numeric_limits<int64_t>::max(), 1),
76             std::numeric_limits<int64_t>::max());
77   EXPECT_EQ(SaturatingAdd(std::numeric_limits<int64_t>::max(),
78                           std::numeric_limits<int64_t>::max()),
79             std::numeric_limits<int64_t>::max());
80   EXPECT_EQ(SaturatingAdd(std::numeric_limits<int64_t>::min(), -1),
81             std::numeric_limits<int64_t>::min());
82 }
83 
TEST(UsefulTest,RoundUpToPowerOf2)84 TEST(UsefulTest, RoundUpToPowerOf2) {
85   EXPECT_EQ(RoundUpToPowerOf2(0), 0);
86   EXPECT_EQ(RoundUpToPowerOf2(1), 1);
87   EXPECT_EQ(RoundUpToPowerOf2(2), 2);
88   EXPECT_EQ(RoundUpToPowerOf2(3), 4);
89   EXPECT_EQ(RoundUpToPowerOf2(4), 4);
90   EXPECT_EQ(RoundUpToPowerOf2(5), 8);
91   EXPECT_EQ(RoundUpToPowerOf2(6), 8);
92   EXPECT_EQ(RoundUpToPowerOf2(7), 8);
93   EXPECT_EQ(RoundUpToPowerOf2(8), 8);
94 }
95 
96 }  // namespace grpc_core
97 
main(int argc,char ** argv)98 int main(int argc, char** argv) {
99   ::testing::InitGoogleTest(&argc, argv);
100   return RUN_ALL_TESTS();
101 }
102