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
|
/* Copyright (c) 2007-2018 Dovecot authors, see the included COPYING file */
#include "test-lib.h"
#include "bsearch-insert-pos.h"
static int cmp_uint(const unsigned int *i1, const unsigned int *i2)
{
return (int)*i1 - (int)*i2;
}
void test_bsearch_insert_pos(void)
{
static const unsigned int input[] = {
1, 5, 9, 15, 16, UINT_MAX,
1, 5, 9, 15, 16, 17, UINT_MAX,
UINT_MAX
};
static const unsigned int max_key = 18;
const unsigned int *cur;
unsigned int key, len, i, idx;
bool success;
cur = input;
for (i = 0; cur[0] != UINT_MAX; i++) {
for (len = 0; cur[len] != UINT_MAX; len++) ;
for (key = 0; key < max_key; key++) {
if (bsearch_insert_pos(&key, cur, len, sizeof(*cur),
cmp_uint, &idx))
success = cur[idx] == key;
else if (idx == 0)
success = cur[0] > key;
else if (idx == len)
success = cur[len-1] < key;
else {
success = cur[idx-1] < key &&
cur[idx+1] > key;
}
if (!success)
break;
}
cur += len + 1;
test_out(t_strdup_printf("bsearch_insert_pos(%d,%d)", i, key),
success);
}
}
|