Mercurial > dovecot > core-2.2
changeset 18110:a45ee7e221b0
lib: test-array - test array_cmp()
Signed-off-by: Phil Carmody <phil@dovecot.fi>
author | Phil Carmody <phil@dovecot.fi> |
---|---|
date | Tue, 25 Nov 2014 03:43:02 +0200 |
parents | 88e985e7f2b6 |
children | b8ac4e5a1002 |
files | src/lib/test-array.c |
diffstat | 1 files changed, 37 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/test-array.c Tue Nov 25 03:31:34 2014 +0200 +++ b/src/lib/test-array.c Tue Nov 25 03:43:02 2014 +0200 @@ -3,6 +3,8 @@ #include "test-lib.h" #include "array.h" +#include <stdlib.h> /* rand() */ + struct foo { unsigned int a, b, c; }; @@ -51,8 +53,43 @@ test_end(); } +static void test_array_cmp(void) +{ + static const unsigned short deltas[] = { + -32768, -16384, -512, -256, -128, -64, -2, -1, + 0, 1, 2, 64, 128, 256, 512, 16384, 32768 + }; + +#define NELEMS 5u + ARRAY(unsigned short) arr1, arr2; + unsigned short elems[NELEMS]; + unsigned int i; + + test_begin("array compare (ushort)"); + t_array_init(&arr1, NELEMS); + t_array_init(&arr2, NELEMS); + for (i = 0; i < NELEMS; i++) { + elems[i] = rand(); + array_append(&arr2, &elems[i], 1); + } + array_append(&arr1, elems, NELEMS); + test_assert(array_cmp(&arr1, &arr2) == 1); + for (i = 0; i < 256; i++) { + unsigned int j = rand() % NELEMS; + unsigned short tmp = *array_idx(&arr2, j); + unsigned short repl = tmp + deltas[rand() % N_ELEMENTS(deltas)]; + + array_idx_set(&arr2, j, &repl); + test_assert_idx(array_cmp(&arr1, &arr2) == (tmp == repl), i); + array_idx_set(&arr2, j, &tmp); + test_assert_idx(array_cmp(&arr1, &arr2) == TRUE, i); + } + test_end(); +} + void test_array(void) { test_array_foreach(); test_array_reverse(); + test_array_cmp(); }