blob: 81607534e5de098c882f697577b30e878de3d05e [file] [log] [blame]
William A. Kennington III8c5f28c2022-12-07 01:21:36 -08001#include <stdplus/numeric/endian.hpp>
2
3#include <array>
William A. Kennington IIIcccd82d2023-11-30 18:04:30 -08004#include <cstring>
William A. Kennington III8c5f28c2022-12-07 01:21:36 -08005
6#include <gtest/gtest.h>
7
8namespace stdplus
9{
10
11TEST(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 IIIcccd82d2023-11-30 18:04:30 -080025TEST(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
36TEST(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
47TEST(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 III8c5f28c2022-12-07 01:21:36 -080057} // namespace stdplus