1 #include "utils/hex_utils.hpp" 2 3 #include <cctype> 4 #include <cstdint> 5 #include <limits> 6 #include <vector> 7 8 #include <gmock/gmock.h> // IWYU pragma: keep 9 #include <gtest/gtest.h> // IWYU pragma: keep 10 11 // IWYU pragma: no_include "gtest/gtest_pred_impl.h" 12 // IWYU pragma: no_include <gtest/gtest-message.h> 13 // IWYU pragma: no_include <gtest/gtest-test-part.h> 14 // IWYU pragma: no_include "gtest/gtest_pred_impl.h" 15 16 namespace 17 { 18 19 using ::testing::IsEmpty; 20 21 TEST(IntToHexString, ReturnsCorrectHexForUint64) 22 { 23 EXPECT_EQ(intToHexString(0xFFFFFFFFFFFFFFFFULL, 16), "FFFFFFFFFFFFFFFF"); 24 25 EXPECT_EQ(intToHexString(0, 4), "0000"); 26 EXPECT_EQ(intToHexString(0, 8), "00000000"); 27 EXPECT_EQ(intToHexString(0, 12), "000000000000"); 28 EXPECT_EQ(intToHexString(0, 16), "0000000000000000"); 29 30 // uint64_t sized ints 31 EXPECT_EQ(intToHexString(0xDEADBEEFBAD4F00DULL, 4), "F00D"); 32 EXPECT_EQ(intToHexString(0xDEADBEEFBAD4F00DULL, 8), "BAD4F00D"); 33 EXPECT_EQ(intToHexString(0xDEADBEEFBAD4F00DULL, 12), "BEEFBAD4F00D"); 34 EXPECT_EQ(intToHexString(0xDEADBEEFBAD4F00DULL, 16), "DEADBEEFBAD4F00D"); 35 36 // uint16_t sized ints 37 EXPECT_EQ(intToHexString(0xBEEF, 1), "F"); 38 EXPECT_EQ(intToHexString(0xBEEF, 2), "EF"); 39 EXPECT_EQ(intToHexString(0xBEEF, 3), "EEF"); 40 EXPECT_EQ(intToHexString(0xBEEF, 4), "BEEF"); 41 } 42 43 TEST(BytesToHexString, OnSuccess) 44 { 45 EXPECT_EQ(bytesToHexString({0x1a, 0x2b}), "1A2B"); 46 } 47 48 TEST(HexCharToNibble, ReturnsCorrectNibbleForEveryHexChar) 49 { 50 for (char c = 0; c < std::numeric_limits<char>::max(); ++c) 51 { 52 uint8_t expected = 16; 53 if (isdigit(c) != 0) 54 { 55 expected = static_cast<uint8_t>(c) - '0'; 56 } 57 else if (c >= 'A' && c <= 'F') 58 { 59 expected = static_cast<uint8_t>(c - 'A') + 10U; 60 } 61 else if (c >= 'a' && c <= 'f') 62 { 63 expected = static_cast<uint8_t>(c - 'a') + 10U; 64 } 65 66 EXPECT_EQ(hexCharToNibble(c), expected); 67 } 68 } 69 70 TEST(HexStringToBytes, Success) 71 { 72 std::vector<uint8_t> hexBytes = {0x01, 0x23, 0x45, 0x67, 73 0x89, 0xAB, 0xCD, 0xEF}; 74 EXPECT_EQ(hexStringToBytes("0123456789ABCDEF"), hexBytes); 75 EXPECT_THAT(hexStringToBytes(""), IsEmpty()); 76 } 77 78 TEST(HexStringToBytes, Failure) 79 { 80 EXPECT_THAT(hexStringToBytes("Hello"), IsEmpty()); 81 EXPECT_THAT(hexStringToBytes("`"), IsEmpty()); 82 EXPECT_THAT(hexStringToBytes("012"), IsEmpty()); 83 } 84 85 } // namespace 86