| 1 | #include "test.h" |
| 2 | |
| 3 | #include <base/system.h> |
| 4 | |
| 5 | #include <gtest/gtest.h> |
| 6 | |
| 7 | #include <array> |
| 8 | |
| 9 | TEST(SwapEndian, Generic) |
| 10 | { |
| 11 | const std::array<char, 12> aOriginalData = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; |
| 12 | const std::array<char, 12> aExpectedDataInt16 = {2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11}; |
| 13 | const std::array<char, 12> aExpectedDataInt32 = {4, 3, 2, 1, 8, 7, 6, 5, 12, 11, 10, 9}; |
| 14 | |
| 15 | std::array<char, 12> aData = aOriginalData; |
| 16 | swap_endian(data: aData.data(), elem_size: sizeof(char), num: aData.size() / sizeof(char)); |
| 17 | EXPECT_EQ(aData, aOriginalData); |
| 18 | |
| 19 | aData = aOriginalData; |
| 20 | swap_endian(data: aData.data(), elem_size: sizeof(int16_t), num: aData.size() / sizeof(int16_t)); |
| 21 | EXPECT_EQ(aData, aExpectedDataInt16); |
| 22 | |
| 23 | aData = aOriginalData; |
| 24 | swap_endian(data: aData.data(), elem_size: sizeof(int32_t), num: aData.size() / sizeof(int32_t)); |
| 25 | EXPECT_EQ(aData, aExpectedDataInt32); |
| 26 | } |
| 27 | |
| 28 | static int SwapEndianInt(int Number) |
| 29 | { |
| 30 | swap_endian(data: &Number, elem_size: sizeof(Number), num: 1); |
| 31 | return Number; |
| 32 | } |
| 33 | |
| 34 | TEST(SwapEndian, Int) |
| 35 | { |
| 36 | EXPECT_EQ(SwapEndianInt(0x00000000), 0x00000000); |
| 37 | EXPECT_EQ(SwapEndianInt(0xFFFFFFFF), 0xFFFFFFFF); |
| 38 | EXPECT_EQ(SwapEndianInt(0x7FFFFFFF), 0xFFFFFF7F); |
| 39 | EXPECT_EQ(SwapEndianInt(0xFFFFFF7F), 0x7FFFFFFF); |
| 40 | EXPECT_EQ(SwapEndianInt(0x80000000), 0x00000080); |
| 41 | EXPECT_EQ(SwapEndianInt(0x00000080), 0x80000000); |
| 42 | EXPECT_EQ(SwapEndianInt(0x12345678), 0x78563412); |
| 43 | EXPECT_EQ(SwapEndianInt(0x78563412), 0x12345678); |
| 44 | EXPECT_EQ(SwapEndianInt(0x87654321), 0x21436587); |
| 45 | EXPECT_EQ(SwapEndianInt(0x21436587), 0x87654321); |
| 46 | } |
| 47 | |