test-bsearch-insert-pos.c revision 48acc31adebfdd4e4945ee76e1f5259e4b1b6fff
/* Copyright (c) 2007-2009 Dovecot authors, see the included COPYING file */
#include "test-lib.h"
#include "bsearch-insert-pos.h"
static int cmp_uint(const void *p1, const void *p2)
{
const unsigned int *i1 = p1, *i2 = p2;
return *i1 - *i2;
}
void test_bsearch_insert_pos(void)
{
static const unsigned int input[] = {
1, 5, 9, 15, 16, -1,
1, 5, 9, 15, 16, 17, -1,
-1
};
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] != -1U; i++) {
for (len = 0; cur[len] != -1U; 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);
}
}