xref: /freebsd/lib/libc/tests/stdlib/test-search.h (revision d59c7ea2701fe7b73b32eef49a7c712ef38de5a0)
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