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