annotate src/lib/test-hash.c @ 22664:fea53c2725c0

director: Fix director_max_parallel_moves/kicks type Should be uint, not time.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 09 Nov 2017 12:24:16 +0200
parents 2e2563132d5f
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21390
2e2563132d5f Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19552
diff changeset
1 /* Copyright (c) 2014-2017 Dovecot authors, see the included COPYING file */
17444
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "test-lib.h"
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "hash.h"
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 static void test_hash_random_pool(pool_t pool)
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 {
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 #define KEYMAX 100000
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 HASH_TABLE(void *, void *) hash;
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 unsigned int *keys;
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 unsigned int i, key, keyidx, delidx;
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 keys = i_new(unsigned int, KEYMAX); keyidx = 0;
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 hash_table_create_direct(&hash, pool, 0);
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 for (i = 0; i < KEYMAX; i++) {
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 key = (rand() % KEYMAX) + 1;
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 if (rand() % 5 > 0) {
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 if (hash_table_lookup(hash, POINTER_CAST(key)) == NULL) {
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 hash_table_insert(hash, POINTER_CAST(key),
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 POINTER_CAST(1));
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 keys[keyidx++] = key;
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 }
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 } else if (keyidx > 0) {
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 delidx = rand() % keyidx;
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 hash_table_remove(hash, POINTER_CAST(keys[delidx]));
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 memmove(&keys[delidx], &keys[delidx+1],
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 (keyidx-delidx-1) * sizeof(*keys));
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 keyidx--;
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 }
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 }
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 for (i = 0; i < keyidx; i++)
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 hash_table_remove(hash, POINTER_CAST(keys[i]));
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 hash_table_destroy(&hash);
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 i_free(keys);
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 }
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 void test_hash(void)
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 {
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 pool_t pool;
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42 test_hash_random_pool(default_pool);
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 pool = pool_alloconly_create("test hash", 1024);
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 test_hash_random_pool(pool);
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 pool_unref(&pool);
ff8402fe378e lib: Added some kind of a unit test for hash table.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 }