aboutsummaryrefslogtreecommitdiff
path: root/tests/include/byteswap_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/include/byteswap_test.c')
-rw-r--r--tests/include/byteswap_test.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/include/byteswap_test.c b/tests/include/byteswap_test.c
new file mode 100644
index 000000000000..ed23351e689b
--- /dev/null
+++ b/tests/include/byteswap_test.c
@@ -0,0 +1,76 @@
+/*-
+ * Copyright (c) 2021 M. Warner Losh <imp@FreeBSD.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <byteswap.h>
+
+#include <atf-c.h>
+
+ATF_TC(byteswap);
+ATF_TC_HEAD(byteswap, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test swapping macros in <byteswap.h>");
+}
+
+ATF_TC_BODY(byteswap, tc)
+{
+ uint16_t ui16;
+ uint32_t ui32;
+ uint64_t ui64;
+
+ /* glibc defines the {__,}bswap_{16,32,64} */
+#ifndef __bswap_16
+ atf_tc_fail_nonfatal("__bswap_16 not defined");
+#endif
+#ifndef bswap_16
+ atf_tc_fail_nonfatal("bswap_16 not defined");
+#endif
+#ifndef __bswap_32
+ atf_tc_fail_nonfatal("__bswap_32 not defined");
+#endif
+#ifndef bswap_32
+ atf_tc_fail_nonfatal("bswap_32 not defined");
+#endif
+#ifndef __bswap_64
+ atf_tc_fail_nonfatal("__bswap_64 not defined");
+#endif
+#ifndef bswap_64
+ atf_tc_fail_nonfatal("bswap_64 not defined");
+#endif
+
+ /* glibc does not define bswap{16,32,64} */
+#ifdef bswap16
+ atf_tc_fail_nonfatal("bswap16 improperly defined");
+#endif
+#ifdef bswap32
+ atf_tc_fail_nonfatal("bswap32 improperly defined");
+#endif
+#ifdef bswap64
+ atf_tc_fail_nonfatal("bswap64 improperly defined");
+#endif
+
+ ui16 = 0x1234;
+ ATF_REQUIRE_MSG(0x3412 == bswap_16(ui16),
+ "bswap16(%#x) != 0x3412 instead %#x\n", ui16, bswap_16(ui16));
+
+ ui32 = 0x12345678ul;
+ ATF_REQUIRE_MSG(0x78563412ul == bswap_32(ui32),
+ "bswap32(%#lx) != 0x78563412 instead %#lx\n",
+ (unsigned long)ui32, (unsigned long)bswap_32(ui32));
+
+ ui64 = 0x123456789abcdef0ull;
+ ATF_REQUIRE_MSG(0xf0debc9a78563412ull == bswap_64(ui64),
+ "bswap64(%#llx) != 0x3412 instead %#llx\n",
+ (unsigned long long)ui64, (unsigned long long)bswap_64(ui64));
+
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, byteswap);
+
+ return atf_no_error();
+}