OLD | NEW |
| (Empty) |
1 // Copyright 2014 the V8 project authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "src/base/bits.h" | |
6 #include "src/base/macros.h" | |
7 #include "testing/gtest-support.h" | |
8 | |
9 namespace v8 { | |
10 namespace base { | |
11 namespace bits { | |
12 | |
13 TEST(BitsTest, CountPopulation32) { | |
14 EXPECT_EQ(0u, CountPopulation32(0)); | |
15 EXPECT_EQ(1u, CountPopulation32(1)); | |
16 EXPECT_EQ(8u, CountPopulation32(0x11111111)); | |
17 EXPECT_EQ(16u, CountPopulation32(0xf0f0f0f0)); | |
18 EXPECT_EQ(24u, CountPopulation32(0xfff0f0ff)); | |
19 EXPECT_EQ(32u, CountPopulation32(0xffffffff)); | |
20 } | |
21 | |
22 | |
23 TEST(BitsTest, CountLeadingZeros32) { | |
24 EXPECT_EQ(32u, CountLeadingZeros32(0)); | |
25 EXPECT_EQ(31u, CountLeadingZeros32(1)); | |
26 TRACED_FORRANGE(uint32_t, shift, 0, 31) { | |
27 EXPECT_EQ(31u - shift, CountLeadingZeros32(1u << shift)); | |
28 } | |
29 EXPECT_EQ(4u, CountLeadingZeros32(0x0f0f0f0f)); | |
30 } | |
31 | |
32 | |
33 TEST(BitsTest, CountTrailingZeros32) { | |
34 EXPECT_EQ(32u, CountTrailingZeros32(0)); | |
35 EXPECT_EQ(31u, CountTrailingZeros32(0x80000000)); | |
36 TRACED_FORRANGE(uint32_t, shift, 0, 31) { | |
37 EXPECT_EQ(shift, CountTrailingZeros32(1u << shift)); | |
38 } | |
39 EXPECT_EQ(4u, CountTrailingZeros32(0xf0f0f0f0)); | |
40 } | |
41 | |
42 | |
43 TEST(BitsTest, RotateRight32) { | |
44 TRACED_FORRANGE(uint32_t, shift, 0, 31) { | |
45 EXPECT_EQ(0u, RotateRight32(0u, shift)); | |
46 } | |
47 EXPECT_EQ(1u, RotateRight32(1, 0)); | |
48 EXPECT_EQ(1u, RotateRight32(2, 1)); | |
49 EXPECT_EQ(0x80000000u, RotateRight32(1, 1)); | |
50 } | |
51 | |
52 | |
53 TEST(BitsTest, RotateRight64) { | |
54 TRACED_FORRANGE(uint64_t, shift, 0, 63) { | |
55 EXPECT_EQ(0u, RotateRight64(0u, shift)); | |
56 } | |
57 EXPECT_EQ(1u, RotateRight64(1, 0)); | |
58 EXPECT_EQ(1u, RotateRight64(2, 1)); | |
59 EXPECT_EQ(V8_UINT64_C(0x8000000000000000), RotateRight64(1, 1)); | |
60 } | |
61 | |
62 } // namespace bits | |
63 } // namespace base | |
64 } // namespace v8 | |
OLD | NEW |