1 /* 2 * Copyright (c) 2026 Faraz Vahedi <kfv@FreeBSD.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7 /* 8 * Test for bsearch_b() routine. 9 */ 10 11 #include <stdlib.h> 12 13 #include "test-search.h" 14 15 #define THUNK 42 16 17 static void * 18 do_bsearch_b(const int *key, const int *base, size_t n, void *ctx) 19 { 20 int thunk = *(int *)ctx; 21 22 return (bsearch_b(key, base, n, sizeof(int), 23 ^(const void *a, const void *b) { 24 ATF_REQUIRE_EQ(thunk, THUNK); 25 return (searchhelp(a, b)); 26 })); 27 } 28 29 ATF_TC_WITHOUT_HEAD(bsearch_b_test); 30 ATF_TC_BODY(bsearch_b_test, tc) 31 { 32 int testvector[SVEC_LEN]; 33 int thunk = THUNK; 34 int key, j; 35 36 for (j = 0; j <= SVEC_LEN; j++) { 37 if (j == 0) { 38 key = 0; 39 ATF_CHECK(bsearch_b(&key, testvector, 0, 40 sizeof(testvector[0]), 41 ^(const void *a __unused, const void *b __unused) { 42 atf_tc_fail( 43 "comparison block invoked unexpectedly"); 44 return (0); 45 }) == NULL); 46 continue; 47 } 48 check_sorted_search(do_bsearch_b, &thunk, testvector, 49 (size_t)j); 50 } 51 } 52 53 ATF_TP_ADD_TCS(tp) 54 { 55 ATF_TP_ADD_TC(tp, bsearch_b_test); 56 57 return (atf_no_error()); 58 } 59