|
27 | 27 |
|
28 | 28 | namespace iceberg { |
29 | 29 |
|
30 | | -// test round trip preserves value |
| 30 | +#define EXPECT_ROUNDTRIP(value) \ |
| 31 | + do { \ |
| 32 | + EXPECT_EQ(FromLittleEndian(ToLittleEndian(value)), value); \ |
| 33 | + EXPECT_EQ(FromBigEndian(ToBigEndian(value)), value); \ |
| 34 | + } while (false) |
| 35 | + |
31 | 36 | TEST(EndianTest, RoundTripPreservesValue) { |
32 | | - EXPECT_EQ(FromLittleEndian(ToLittleEndian<uint16_t>(0x1234)), 0x1234); |
33 | | - EXPECT_EQ(FromBigEndian(ToBigEndian<uint32_t>(0xDEADBEEF)), 0xDEADBEEF); |
34 | | - EXPECT_EQ(FromLittleEndian(ToLittleEndian(std::numeric_limits<uint64_t>::max())), |
35 | | - std::numeric_limits<uint64_t>::max()); |
36 | | - EXPECT_EQ(FromBigEndian(ToBigEndian<uint32_t>(0)), 0); |
37 | | - |
38 | | - EXPECT_EQ(FromBigEndian(ToBigEndian<int16_t>(-1)), -1); |
39 | | - EXPECT_EQ(FromLittleEndian(ToLittleEndian<int32_t>(-0x12345678)), -0x12345678); |
40 | | - EXPECT_EQ(FromBigEndian(ToBigEndian(std::numeric_limits<int64_t>::min())), |
41 | | - std::numeric_limits<int64_t>::min()); |
42 | | - EXPECT_EQ(FromLittleEndian(ToLittleEndian(std::numeric_limits<int16_t>::max())), |
43 | | - std::numeric_limits<int16_t>::max()); |
44 | | - |
45 | | - EXPECT_EQ(FromLittleEndian(ToLittleEndian(3.14f)), 3.14f); |
46 | | - EXPECT_EQ(FromBigEndian(ToBigEndian(2.718281828459045)), 2.718281828459045); |
47 | | - |
48 | | - EXPECT_EQ(FromLittleEndian(ToLittleEndian(std::numeric_limits<float>::infinity())), |
49 | | - std::numeric_limits<float>::infinity()); |
50 | | - EXPECT_EQ(FromBigEndian(ToBigEndian(-std::numeric_limits<float>::infinity())), |
51 | | - -std::numeric_limits<float>::infinity()); |
| 37 | + EXPECT_ROUNDTRIP(static_cast<uint16_t>(0x1234)); |
| 38 | + EXPECT_ROUNDTRIP(static_cast<uint32_t>(0xDEADBEEF)); |
| 39 | + EXPECT_ROUNDTRIP(std::numeric_limits<uint64_t>::max()); |
| 40 | + EXPECT_ROUNDTRIP(static_cast<uint32_t>(0)); |
| 41 | + |
| 42 | + EXPECT_ROUNDTRIP(static_cast<int16_t>(-1)); |
| 43 | + EXPECT_ROUNDTRIP(static_cast<int32_t>(-0x12345678)); |
| 44 | + EXPECT_ROUNDTRIP(std::numeric_limits<int64_t>::min()); |
| 45 | + EXPECT_ROUNDTRIP(std::numeric_limits<int16_t>::max()); |
| 46 | + |
| 47 | + EXPECT_ROUNDTRIP(3.14f); |
| 48 | + EXPECT_ROUNDTRIP(2.718281828459045); |
| 49 | + EXPECT_ROUNDTRIP(0.0f); |
| 50 | + EXPECT_ROUNDTRIP(-0.0f); |
| 51 | + EXPECT_ROUNDTRIP(0.0); |
| 52 | + EXPECT_ROUNDTRIP(-0.0); |
| 53 | + |
| 54 | + EXPECT_ROUNDTRIP(std::numeric_limits<float>::infinity()); |
| 55 | + EXPECT_ROUNDTRIP(-std::numeric_limits<float>::infinity()); |
| 56 | + EXPECT_ROUNDTRIP(std::numeric_limits<double>::infinity()); |
| 57 | + EXPECT_ROUNDTRIP(-std::numeric_limits<double>::infinity()); |
| 58 | + |
52 | 59 | EXPECT_TRUE(std::isnan( |
53 | 60 | FromLittleEndian(ToLittleEndian(std::numeric_limits<float>::quiet_NaN())))); |
54 | | - EXPECT_EQ(FromBigEndian(ToBigEndian(0.0f)), 0.0f); |
55 | | - EXPECT_EQ(FromLittleEndian(ToLittleEndian(-0.0f)), -0.0f); |
56 | | - |
57 | | - EXPECT_EQ(FromBigEndian(ToBigEndian(std::numeric_limits<double>::infinity())), |
58 | | - std::numeric_limits<double>::infinity()); |
59 | | - EXPECT_EQ(FromLittleEndian(ToLittleEndian(-std::numeric_limits<double>::infinity())), |
60 | | - -std::numeric_limits<double>::infinity()); |
61 | 61 | EXPECT_TRUE( |
62 | 62 | std::isnan(FromBigEndian(ToBigEndian(std::numeric_limits<double>::quiet_NaN())))); |
63 | | - EXPECT_EQ(FromLittleEndian(ToLittleEndian(0.0)), 0.0); |
64 | | - EXPECT_EQ(FromBigEndian(ToBigEndian(-0.0)), -0.0); |
65 | | -} |
66 | | - |
67 | | -// test constexpr evaluation |
68 | | -TEST(EndianTest, ConstexprEvaluation) { |
69 | | - static_assert(FromBigEndian(ToBigEndian<uint16_t>(0x1234)) == 0x1234); |
70 | | - static_assert(FromLittleEndian(ToLittleEndian<uint32_t>(0x12345678)) == 0x12345678); |
71 | | - static_assert(FromBigEndian(ToBigEndian<int64_t>(-1)) == -1); |
72 | | - |
73 | | - static_assert(ToBigEndian<uint8_t>(0xFF) == 0xFF); |
74 | | - static_assert(FromLittleEndian<int8_t>(-1) == -1); |
75 | | - |
76 | | - static_assert(FromLittleEndian(ToLittleEndian(3.14f)) == 3.14f); |
77 | | - static_assert(FromBigEndian(ToBigEndian(2.71)) == 2.71); |
78 | | -} |
79 | | - |
80 | | -// test platform dependent behavior |
81 | | -TEST(EndianTest, PlatformDependentBehavior) { |
82 | | - uint32_t test_value = 0x12345678; |
83 | | - |
84 | | - if constexpr (std::endian::native == std::endian::little) { |
85 | | - EXPECT_EQ(ToLittleEndian(test_value), test_value); |
86 | | - EXPECT_EQ(FromLittleEndian(test_value), test_value); |
87 | | - EXPECT_NE(ToBigEndian(test_value), test_value); |
88 | | - } else if constexpr (std::endian::native == std::endian::big) { |
89 | | - EXPECT_EQ(ToBigEndian(test_value), test_value); |
90 | | - EXPECT_EQ(FromBigEndian(test_value), test_value); |
91 | | - EXPECT_NE(ToLittleEndian(test_value), test_value); |
92 | | - } |
93 | | - |
94 | | - EXPECT_EQ(ToLittleEndian<uint8_t>(0xAB), 0xAB); |
95 | | - EXPECT_EQ(ToBigEndian<uint8_t>(0xAB), 0xAB); |
96 | 63 | } |
97 | 64 |
|
98 | | -// test specific byte pattern validation |
99 | | -TEST(EndianTest, SpecificBytePatternValidation) { |
| 65 | +TEST(EndianTest, ByteWiseValidation) { |
100 | 66 | uint32_t original_int = 0x12345678; |
101 | 67 | uint32_t little_endian_int = ToLittleEndian(original_int); |
102 | 68 | uint32_t big_endian_int = ToBigEndian(original_int); |
|
0 commit comments