Mercurial > dovecot > core-2.2
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 |
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 } |