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