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); 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 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 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