-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patharray_bsearch_t.c
executable file
·66 lines (53 loc) · 1.22 KB
/
array_bsearch_t.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "bklib/rand.h"
#include "bklib/array.h"
#include "bklib/debug.h"
int
array_cmp_int(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
#define NELTS 100
void
test(array_t *a, int r) {
int n;
do {
n = array_bsearch(a, array_cmp_int, &r);
debug(DEBUG_INFO,
("array_search r=%d array[%d]=%d\n",
r, n, *(int*)array_get(a, n)));
if( n>=0 ) {
assertb(*(int*)array_get(a, n) <= r);
if( n<NELTS-1 ) {
assertb(*(int*)array_get(a, n+1) >= r);
}
if( n > 0 ) {
assertb(*(int*)array_get(a, n-1) < r);
}
}
} while(0);
}
int
main() {
array_t a;
int i, e, r;
debug_init(DEBUG_INFO, 0, 0);
array_init(&a, sizeof(int), NELTS);
/* make a sorted random array with elts 0..10 apart */
e = 1;
for(i=0; i<NELTS; i++) {
e += rand_u32(10);
*(int*)array_add(&a, 1) = e;
debug(DEBUG_INFO, ("array[%d] = %d\n", i, e));
}
test(&a, 0);
test(&a, 72);
test(&a, 74);
test(&a, e+10);
test(&a, e);
/* search for elts in array. Make sure found is always <=
search. */
for(i=0; i<NELTS; i++) {
r = rand_u32(e);
test(&a, r);
}
return 0;
}