1*ac77b262SWarner Losh /*-
2*ac77b262SWarner Losh * Copyright (c) 2021 M. Warner Losh <imp@FreeBSD.org>
3*ac77b262SWarner Losh *
4*ac77b262SWarner Losh * SPDX-License-Identifier: BSD-2-Clause
5*ac77b262SWarner Losh */
6*ac77b262SWarner Losh
7*ac77b262SWarner Losh #include <byteswap.h>
8*ac77b262SWarner Losh
9*ac77b262SWarner Losh #include <atf-c.h>
10*ac77b262SWarner Losh
11*ac77b262SWarner Losh ATF_TC(byteswap);
ATF_TC_HEAD(byteswap,tc)12*ac77b262SWarner Losh ATF_TC_HEAD(byteswap, tc)
13*ac77b262SWarner Losh {
14*ac77b262SWarner Losh atf_tc_set_md_var(tc, "descr", "Test swapping macros in <byteswap.h>");
15*ac77b262SWarner Losh }
16*ac77b262SWarner Losh
ATF_TC_BODY(byteswap,tc)17*ac77b262SWarner Losh ATF_TC_BODY(byteswap, tc)
18*ac77b262SWarner Losh {
19*ac77b262SWarner Losh uint16_t ui16;
20*ac77b262SWarner Losh uint32_t ui32;
21*ac77b262SWarner Losh uint64_t ui64;
22*ac77b262SWarner Losh
23*ac77b262SWarner Losh /* glibc defines the {__,}bswap_{16,32,64} */
24*ac77b262SWarner Losh #ifndef __bswap_16
25*ac77b262SWarner Losh atf_tc_fail_nonfatal("__bswap_16 not defined");
26*ac77b262SWarner Losh #endif
27*ac77b262SWarner Losh #ifndef bswap_16
28*ac77b262SWarner Losh atf_tc_fail_nonfatal("bswap_16 not defined");
29*ac77b262SWarner Losh #endif
30*ac77b262SWarner Losh #ifndef __bswap_32
31*ac77b262SWarner Losh atf_tc_fail_nonfatal("__bswap_32 not defined");
32*ac77b262SWarner Losh #endif
33*ac77b262SWarner Losh #ifndef bswap_32
34*ac77b262SWarner Losh atf_tc_fail_nonfatal("bswap_32 not defined");
35*ac77b262SWarner Losh #endif
36*ac77b262SWarner Losh #ifndef __bswap_64
37*ac77b262SWarner Losh atf_tc_fail_nonfatal("__bswap_64 not defined");
38*ac77b262SWarner Losh #endif
39*ac77b262SWarner Losh #ifndef bswap_64
40*ac77b262SWarner Losh atf_tc_fail_nonfatal("bswap_64 not defined");
41*ac77b262SWarner Losh #endif
42*ac77b262SWarner Losh
43*ac77b262SWarner Losh /* glibc does not define bswap{16,32,64} */
44*ac77b262SWarner Losh #ifdef bswap16
45*ac77b262SWarner Losh atf_tc_fail_nonfatal("bswap16 improperly defined");
46*ac77b262SWarner Losh #endif
47*ac77b262SWarner Losh #ifdef bswap32
48*ac77b262SWarner Losh atf_tc_fail_nonfatal("bswap32 improperly defined");
49*ac77b262SWarner Losh #endif
50*ac77b262SWarner Losh #ifdef bswap64
51*ac77b262SWarner Losh atf_tc_fail_nonfatal("bswap64 improperly defined");
52*ac77b262SWarner Losh #endif
53*ac77b262SWarner Losh
54*ac77b262SWarner Losh ui16 = 0x1234;
55*ac77b262SWarner Losh ATF_REQUIRE_MSG(0x3412 == bswap_16(ui16),
56*ac77b262SWarner Losh "bswap16(%#x) != 0x3412 instead %#x\n", ui16, bswap_16(ui16));
57*ac77b262SWarner Losh
58*ac77b262SWarner Losh ui32 = 0x12345678ul;
59*ac77b262SWarner Losh ATF_REQUIRE_MSG(0x78563412ul == bswap_32(ui32),
60*ac77b262SWarner Losh "bswap32(%#lx) != 0x78563412 instead %#lx\n",
61*ac77b262SWarner Losh (unsigned long)ui32, (unsigned long)bswap_32(ui32));
62*ac77b262SWarner Losh
63*ac77b262SWarner Losh ui64 = 0x123456789abcdef0ull;
64*ac77b262SWarner Losh ATF_REQUIRE_MSG(0xf0debc9a78563412ull == bswap_64(ui64),
65*ac77b262SWarner Losh "bswap64(%#llx) != 0x3412 instead %#llx\n",
66*ac77b262SWarner Losh (unsigned long long)ui64, (unsigned long long)bswap_64(ui64));
67*ac77b262SWarner Losh
68*ac77b262SWarner Losh }
69*ac77b262SWarner Losh
ATF_TP_ADD_TCS(tp)70*ac77b262SWarner Losh ATF_TP_ADD_TCS(tp)
71*ac77b262SWarner Losh {
72*ac77b262SWarner Losh
73*ac77b262SWarner Losh ATF_TP_ADD_TC(tp, byteswap);
74*ac77b262SWarner Losh
75*ac77b262SWarner Losh return atf_no_error();
76*ac77b262SWarner Losh }
77