1*d59c7ea2SFaraz Vahedi /*
2*d59c7ea2SFaraz Vahedi * Copyright (c) 2026 Faraz Vahedi <kfv@FreeBSD.org>
3*d59c7ea2SFaraz Vahedi *
4*d59c7ea2SFaraz Vahedi * SPDX-License-Identifier: BSD-2-Clause
5*d59c7ea2SFaraz Vahedi */
6*d59c7ea2SFaraz Vahedi
7*d59c7ea2SFaraz Vahedi #ifndef _TEST_SEARCH_H
8*d59c7ea2SFaraz Vahedi #define _TEST_SEARCH_H
9*d59c7ea2SFaraz Vahedi
10*d59c7ea2SFaraz Vahedi #include <sys/param.h>
11*d59c7ea2SFaraz Vahedi
12*d59c7ea2SFaraz Vahedi #include <stddef.h>
13*d59c7ea2SFaraz Vahedi
14*d59c7ea2SFaraz Vahedi #include <atf-c.h>
15*d59c7ea2SFaraz Vahedi
16*d59c7ea2SFaraz Vahedi #define SVEC_LEN 1024
17*d59c7ea2SFaraz Vahedi
18*d59c7ea2SFaraz Vahedi typedef void *search_int_t(const int *, const int *, size_t, void *);
19*d59c7ea2SFaraz Vahedi
20*d59c7ea2SFaraz Vahedi static int
searchhelp(const void * a,const void * b)21*d59c7ea2SFaraz Vahedi searchhelp(const void *a, const void *b)
22*d59c7ea2SFaraz Vahedi {
23*d59c7ea2SFaraz Vahedi const int *oa = a, *ob = b;
24*d59c7ea2SFaraz Vahedi
25*d59c7ea2SFaraz Vahedi return ((*oa > *ob) - (*oa < *ob));
26*d59c7ea2SFaraz Vahedi }
27*d59c7ea2SFaraz Vahedi
28*d59c7ea2SFaraz Vahedi /*
29*d59c7ea2SFaraz Vahedi * Fill v[i] = i, then confirm every element is found and -1 and n are not.
30*d59c7ea2SFaraz Vahedi */
31*d59c7ea2SFaraz Vahedi static void
check_sorted_search(search_int_t * search,void * ctx,int * v,size_t n)32*d59c7ea2SFaraz Vahedi check_sorted_search(search_int_t *search, void *ctx, int *v, size_t n)
33*d59c7ea2SFaraz Vahedi {
34*d59c7ea2SFaraz Vahedi size_t i;
35*d59c7ea2SFaraz Vahedi int key;
36*d59c7ea2SFaraz Vahedi
37*d59c7ea2SFaraz Vahedi for (i = 0; i < n; i++)
38*d59c7ea2SFaraz Vahedi v[i] = (int)i;
39*d59c7ea2SFaraz Vahedi for (i = 0; i < n; i++) {
40*d59c7ea2SFaraz Vahedi key = v[i];
41*d59c7ea2SFaraz Vahedi ATF_CHECK(search(&key, v, n, ctx) == &v[i]);
42*d59c7ea2SFaraz Vahedi }
43*d59c7ea2SFaraz Vahedi if (n != 0) {
44*d59c7ea2SFaraz Vahedi key = -1;
45*d59c7ea2SFaraz Vahedi ATF_CHECK(search(&key, v, n, ctx) == NULL);
46*d59c7ea2SFaraz Vahedi key = (int)n;
47*d59c7ea2SFaraz Vahedi ATF_CHECK(search(&key, v, n, ctx) == NULL);
48*d59c7ea2SFaraz Vahedi }
49*d59c7ea2SFaraz Vahedi }
50*d59c7ea2SFaraz Vahedi
51*d59c7ea2SFaraz Vahedi #endif /* !_TEST_SEARCH_H */
52