xref: /aosp_15_r20/external/webrtc/third_party/crc32c/src/src/crc32c_round_up_unittest.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 // Copyright 2017 The CRC32C 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. See the AUTHORS file for names of contributors.
4 
5 #include "./crc32c_round_up.h"
6 
7 #include <cstddef>
8 #include <cstdint>
9 
10 #include "gtest/gtest.h"
11 
12 namespace crc32c {
13 
TEST(CRC32CRoundUpTest,RoundUpUintptr)14 TEST(CRC32CRoundUpTest, RoundUpUintptr) {
15   uintptr_t zero = 0;
16 
17   ASSERT_EQ(zero, RoundUp<1>(zero));
18   ASSERT_EQ(1U, RoundUp<1>(1U));
19   ASSERT_EQ(2U, RoundUp<1>(2U));
20   ASSERT_EQ(3U, RoundUp<1>(3U));
21   ASSERT_EQ(~static_cast<uintptr_t>(0), RoundUp<1>(~static_cast<uintptr_t>(0)));
22   ASSERT_EQ(~static_cast<uintptr_t>(1), RoundUp<1>(~static_cast<uintptr_t>(1)));
23   ASSERT_EQ(~static_cast<uintptr_t>(2), RoundUp<1>(~static_cast<uintptr_t>(2)));
24   ASSERT_EQ(~static_cast<uintptr_t>(3), RoundUp<1>(~static_cast<uintptr_t>(3)));
25 
26   ASSERT_EQ(zero, RoundUp<2>(zero));
27   ASSERT_EQ(2U, RoundUp<2>(1U));
28   ASSERT_EQ(2U, RoundUp<2>(2U));
29   ASSERT_EQ(4U, RoundUp<2>(3U));
30   ASSERT_EQ(4U, RoundUp<2>(4U));
31   ASSERT_EQ(6U, RoundUp<2>(5U));
32   ASSERT_EQ(6U, RoundUp<2>(6U));
33   ASSERT_EQ(8U, RoundUp<2>(7U));
34   ASSERT_EQ(8U, RoundUp<2>(8U));
35   ASSERT_EQ(~static_cast<uintptr_t>(1), RoundUp<2>(~static_cast<uintptr_t>(1)));
36   ASSERT_EQ(~static_cast<uintptr_t>(1), RoundUp<2>(~static_cast<uintptr_t>(2)));
37   ASSERT_EQ(~static_cast<uintptr_t>(3), RoundUp<2>(~static_cast<uintptr_t>(3)));
38   ASSERT_EQ(~static_cast<uintptr_t>(3), RoundUp<2>(~static_cast<uintptr_t>(4)));
39 
40   ASSERT_EQ(zero, RoundUp<4>(zero));
41   ASSERT_EQ(4U, RoundUp<4>(1U));
42   ASSERT_EQ(4U, RoundUp<4>(2U));
43   ASSERT_EQ(4U, RoundUp<4>(3U));
44   ASSERT_EQ(4U, RoundUp<4>(4U));
45   ASSERT_EQ(8U, RoundUp<4>(5U));
46   ASSERT_EQ(8U, RoundUp<4>(6U));
47   ASSERT_EQ(8U, RoundUp<4>(7U));
48   ASSERT_EQ(8U, RoundUp<4>(8U));
49   ASSERT_EQ(~static_cast<uintptr_t>(3), RoundUp<4>(~static_cast<uintptr_t>(3)));
50   ASSERT_EQ(~static_cast<uintptr_t>(3), RoundUp<4>(~static_cast<uintptr_t>(4)));
51   ASSERT_EQ(~static_cast<uintptr_t>(3), RoundUp<4>(~static_cast<uintptr_t>(5)));
52   ASSERT_EQ(~static_cast<uintptr_t>(3), RoundUp<4>(~static_cast<uintptr_t>(6)));
53   ASSERT_EQ(~static_cast<uintptr_t>(7), RoundUp<4>(~static_cast<uintptr_t>(7)));
54   ASSERT_EQ(~static_cast<uintptr_t>(7), RoundUp<4>(~static_cast<uintptr_t>(8)));
55   ASSERT_EQ(~static_cast<uintptr_t>(7), RoundUp<4>(~static_cast<uintptr_t>(9)));
56 }
57 
TEST(CRC32CRoundUpTest,RoundUpPointer)58 TEST(CRC32CRoundUpTest, RoundUpPointer) {
59   uintptr_t zero = 0, three = 3, four = 4, seven = 7, eight = 8;
60 
61   const uint8_t* zero_ptr = reinterpret_cast<const uint8_t*>(zero);
62   const uint8_t* three_ptr = reinterpret_cast<const uint8_t*>(three);
63   const uint8_t* four_ptr = reinterpret_cast<const uint8_t*>(four);
64   const uint8_t* seven_ptr = reinterpret_cast<const uint8_t*>(seven);
65   const uint8_t* eight_ptr = reinterpret_cast<uint8_t*>(eight);
66 
67   ASSERT_EQ(zero_ptr, RoundUp<1>(zero_ptr));
68   ASSERT_EQ(zero_ptr, RoundUp<4>(zero_ptr));
69   ASSERT_EQ(zero_ptr, RoundUp<8>(zero_ptr));
70 
71   ASSERT_EQ(three_ptr, RoundUp<1>(three_ptr));
72   ASSERT_EQ(four_ptr, RoundUp<4>(three_ptr));
73   ASSERT_EQ(eight_ptr, RoundUp<8>(three_ptr));
74 
75   ASSERT_EQ(four_ptr, RoundUp<1>(four_ptr));
76   ASSERT_EQ(four_ptr, RoundUp<4>(four_ptr));
77   ASSERT_EQ(eight_ptr, RoundUp<8>(four_ptr));
78 
79   ASSERT_EQ(seven_ptr, RoundUp<1>(seven_ptr));
80   ASSERT_EQ(eight_ptr, RoundUp<4>(seven_ptr));
81   ASSERT_EQ(eight_ptr, RoundUp<8>(four_ptr));
82 }
83 
84 }  // namespace crc32c
85