#include <stdlib.h> #include <string.h> #include "ghash.h" #ifdef SELFTEST_MAIN #include "selftest.c" static struct ghash dict; GHASH_DECL(test,const char*,int); GHASH_DEFN(test,const char*,int,adt_hashsp,adt_cmpsp,adt_copysp,0,adt_freesp,0); static void print(struct test_entry* entry) { obuf_putf(&outbuf, "{[}s{] = }i{\n}", entry->key, entry->data); } const char* keys[] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", 0 }; static void testkeys(void) { int i; struct test_entry* p; for (i = 0; keys[i] != 0; ++i) { if ((p = test_get(&dict, &keys[i])) == 0) obuf_putf(&outbuf, "{Could not locate key [}s{]\n}", keys[i]); else if (p->data != i) obuf_putf(&outbuf, "{Result for key [}s{] is wrong (was }d{ should be }d{)\n}", keys[i], p->data, i); } } MAIN { int i; struct test_entry* p; struct ghashiter iter; test_init(&dict); obuf_putf(&outbuf, "{size=}d{ count=}d{\n}", dict.size, dict.count); for (i = 0; keys[i] != 0; ++i) { test_add(&dict, &keys[i], &i); obuf_putf(&outbuf, "{size=}d{ count=}d{\n}", dict.size, dict.count); } testkeys(); test_foreach(&dict, print); ghash_remove(&dict, &keys[1]); ghash_remove(&dict, &keys[11]); ghash_remove(&dict, &keys[24]); testkeys(); i = 1010; if ((p = ghash_set(&dict, &keys[10], &i)) != 0) obuf_putf(&outbuf, "{Set [}s{] to }d{\n}", p->key, p->data); i = 1020; if ((p = ghash_set(&dict, &keys[20], &i)) != 0) obuf_putf(&outbuf, "{Set [}s{] to }d{\n}", p->key, p->data); ghashiter_loop(&iter, &dict) { p = iter.entry; obuf_putf(&outbuf, "{[}s{] = }i{\n}", p->key, p->data); } test_free(&dict); } #endif #ifdef SELFTEST_EXP size=0 count=0 size=31 count=1 size=31 count=2 size=31 count=3 size=31 count=4 size=31 count=5 size=31 count=6 size=31 count=7 size=31 count=8 size=31 count=9 size=31 count=10 size=31 count=11 size=31 count=12 size=31 count=13 size=31 count=14 size=31 count=15 size=61 count=16 size=61 count=17 size=61 count=18 size=61 count=19 size=61 count=20 size=61 count=21 size=61 count=22 size=61 count=23 size=61 count=24 size=61 count=25 size=61 count=26 [e] = 4 [d] = 3 [g] = 6 [f] = 5 [a] = 0 [c] = 2 [b] = 1 [m] = 12 [l] = 11 [o] = 14 [n] = 13 [i] = 8 [h] = 7 [k] = 10 [j] = 9 [u] = 20 [t] = 19 [w] = 22 [v] = 21 [q] = 16 [p] = 15 [s] = 18 [r] = 17 [y] = 24 [x] = 23 [z] = 25 Could not locate key [b] Could not locate key [l] Could not locate key [y] Set [k] to 1010 Set [u] to 1020 [e] = 4 [d] = 3 [g] = 6 [f] = 5 [a] = 0 [c] = 2 [m] = 12 [o] = 14 [n] = 13 [i] = 8 [h] = 7 [k] = 1010 [j] = 9 [u] = 1020 [t] = 19 [w] = 22 [v] = 21 [q] = 16 [p] = 15 [s] = 18 [r] = 17 [x] = 23 [z] = 25 #endif