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 *
do_bsearch_b(const int * key,const int * base,size_t n,void * ctx)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);
ATF_TC_BODY(bsearch_b_test,tc)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
ATF_TP_ADD_TCS(tp)53 ATF_TP_ADD_TCS(tp)
54 {
55 ATF_TP_ADD_TC(tp, bsearch_b_test);
56
57 return (atf_no_error());
58 }
59