1
/* $Id: hash_test.c 2394 2008-12-23 17:27:53Z bennylp $ */
3
* Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
4
* Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
* Additional permission under GNU GPL version 3 section 7:
22
* If you modify this program, or any covered work, by linking or
23
* combining it with the OpenSSL project's OpenSSL library (or a
24
* modified version of that library), containing parts covered by the
25
* terms of the OpenSSL or SSLeay licenses, Teluu Inc. (http://www.teluu.com)
26
* grants you additional permission to convey the resulting work.
27
* Corresponding Source for a non-source form of such a combination
28
* shall include the source code for the parts of OpenSSL used as well
29
* as that of the covered work.
41
static int hash_test_with_key(pj_pool_t *pool, unsigned char key)
44
unsigned value = 0x12345;
45
pj_hash_iterator_t it_buf, *it;
48
ht = pj_hash_create(pool, HASH_COUNT);
52
pj_hash_set(pool, ht, &key, sizeof(key), 0, &value);
54
entry = (unsigned*) pj_hash_get(ht, &key, sizeof(key), NULL);
61
if (pj_hash_count(ht) != 1)
64
it = pj_hash_first(ht, &it_buf);
68
entry = (unsigned*) pj_hash_this(ht, it);
75
it = pj_hash_next(ht, it);
81
pj_hash_set(NULL, ht, &key, sizeof(key), 0, NULL);
83
if (pj_hash_get(ht, &key, sizeof(key), NULL) != NULL)
86
if (pj_hash_count(ht) != 0)
89
it = pj_hash_first(ht, &it_buf);
97
static int hash_collision_test(pj_pool_t *pool)
100
COUNT = HASH_COUNT * 4
103
pj_hash_iterator_t it_buf, *it;
104
unsigned char *values;
107
ht = pj_hash_create(pool, HASH_COUNT);
111
values = (unsigned char*) pj_pool_alloc(pool, COUNT);
113
for (i=0; i<COUNT; ++i) {
114
values[i] = (unsigned char)i;
115
pj_hash_set(pool, ht, &i, sizeof(i), 0, &values[i]);
118
if (pj_hash_count(ht) != COUNT)
121
for (i=0; i<COUNT; ++i) {
122
unsigned char *entry;
123
entry = (unsigned char*) pj_hash_get(ht, &i, sizeof(i), NULL);
126
if (*entry != values[i])
131
it = pj_hash_first(ht, &it_buf);
134
it = pj_hash_next(ht, it);
149
pj_pool_t *pool = pj_pool_create(mem, "hash", 512, 512, NULL);
153
/* Test to fill in each row in the table */
154
for (i=0; i<=HASH_COUNT; ++i) {
155
rc = hash_test_with_key(pool, (unsigned char)i);
157
pj_pool_release(pool);
163
rc = hash_collision_test(pool);
165
pj_pool_release(pool);
169
pj_pool_release(pool);
173
#endif /* INCLUDE_HASH_TEST */