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