numeric/endian: Add packed integer endian types
This makes it trivial to write packed structs for wire level
serialization.
Change-Id: I117eb6a80494c3ddca2a6924fd76be7df7365228
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/test/numeric/endian.cpp b/test/numeric/endian.cpp
index d8f2ae8..8160753 100644
--- a/test/numeric/endian.cpp
+++ b/test/numeric/endian.cpp
@@ -1,6 +1,7 @@
#include <stdplus/numeric/endian.hpp>
#include <array>
+#include <cstring>
#include <gtest/gtest.h>
@@ -21,4 +22,36 @@
EXPECT_EQ(40, ntoh(hton(40)));
}
+TEST(EndianPacked, Uint8)
+{
+ uint8_unt n = 0;
+ EXPECT_EQ(n.value(), 0);
+ EXPECT_EQ(n, 0);
+
+ n = 15;
+ EXPECT_EQ(n.value(), 15);
+ EXPECT_EQ(n, 15);
+}
+
+TEST(EndianPacked, Uint32)
+{
+ uint32_unt n = 0;
+ EXPECT_EQ(n.value(), 0);
+ EXPECT_EQ(n, 0);
+
+ n = 15;
+ EXPECT_EQ(n.value(), 15);
+ EXPECT_EQ(n, 15);
+}
+
+TEST(EndianPacked, ValidateUnderlying)
+{
+ uint32_ubt b(15);
+ uint32_ult l = {};
+ EXPECT_EQ(b, 15);
+ EXPECT_EQ(l, 0);
+ std::memcpy(&l, &b, sizeof(l));
+ EXPECT_EQ(0x0f000000, l);
+}
+
} // namespace stdplus