William A. Kennington III | 8c5f28c | 2022-12-07 01:21:36 -0800 | [diff] [blame] | 1 | #include <stdplus/numeric/endian.hpp> |
| 2 | |
| 3 | #include <array> |
William A. Kennington III | cccd82d | 2023-11-30 18:04:30 -0800 | [diff] [blame] | 4 | #include <cstring> |
William A. Kennington III | 8c5f28c | 2022-12-07 01:21:36 -0800 | [diff] [blame] | 5 | |
| 6 | #include <gtest/gtest.h> |
| 7 | |
| 8 | namespace stdplus |
| 9 | { |
| 10 | |
| 11 | TEST(Byteswap, Swap) |
| 12 | { |
| 13 | EXPECT_EQ(38, bswap(uint8_t{38})); |
| 14 | EXPECT_EQ(38 << 8, bswap(uint16_t{38})); |
| 15 | EXPECT_EQ(0x240082fe, bswap(uint32_t{0xfe820024})); |
| 16 | EXPECT_EQ(0x240082fe00000000, bswap(uint64_t{0xfe820024})); |
| 17 | struct |
| 18 | { |
| 19 | std::array<char, 4> a = {1, 2, 3, 4}; |
| 20 | } s; |
| 21 | EXPECT_EQ((std::array<char, 4>{4, 3, 2, 1}), bswap(s).a); |
| 22 | EXPECT_EQ(40, ntoh(hton(40))); |
| 23 | } |
| 24 | |
William A. Kennington III | cccd82d | 2023-11-30 18:04:30 -0800 | [diff] [blame] | 25 | TEST(EndianPacked, Uint8) |
| 26 | { |
| 27 | uint8_unt n = 0; |
| 28 | EXPECT_EQ(n.value(), 0); |
| 29 | EXPECT_EQ(n, 0); |
| 30 | |
| 31 | n = 15; |
| 32 | EXPECT_EQ(n.value(), 15); |
| 33 | EXPECT_EQ(n, 15); |
| 34 | } |
| 35 | |
| 36 | TEST(EndianPacked, Uint32) |
| 37 | { |
| 38 | uint32_unt n = 0; |
| 39 | EXPECT_EQ(n.value(), 0); |
| 40 | EXPECT_EQ(n, 0); |
| 41 | |
| 42 | n = 15; |
| 43 | EXPECT_EQ(n.value(), 15); |
| 44 | EXPECT_EQ(n, 15); |
| 45 | } |
| 46 | |
| 47 | TEST(EndianPacked, ValidateUnderlying) |
| 48 | { |
| 49 | uint32_ubt b(15); |
| 50 | uint32_ult l = {}; |
| 51 | EXPECT_EQ(b, 15); |
| 52 | EXPECT_EQ(l, 0); |
| 53 | std::memcpy(&l, &b, sizeof(l)); |
| 54 | EXPECT_EQ(0x0f000000, l); |
| 55 | } |
| 56 | |
William A. Kennington III | eac8771 | 2023-12-10 21:40:27 -0800 | [diff] [blame] | 57 | TEST(EndianPacked, Format) |
| 58 | { |
| 59 | EXPECT_EQ(std::format("a {}\n", int32_t{-8456}), |
| 60 | std::format("a {}\n", int32_unt{-8456})); |
| 61 | EXPECT_EQ(std::format("a {:x}\n", uint32_t{13}), |
| 62 | std::format("a {:x}\n", uint32_ult{13})); |
| 63 | } |
| 64 | |
William A. Kennington III | 8c5f28c | 2022-12-07 01:21:36 -0800 | [diff] [blame] | 65 | } // namespace stdplus |