blob: e5235651b078b125cdc2c791d73d23cb5b55eedd [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 IIIeac87712023-12-10 21:40:27 -080057TEST(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 III8c5f28c2022-12-07 01:21:36 -080065} // namespace stdplus