crc32c_round_up_unittest.cc
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 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 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