From e7ae85737be071a27b798450b18267a9b3354798 Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Tue, 2 Oct 2001 12:46:04 +0000 Subject: [PATCH] o test program for the hash table. --- old-tests/datastruct/hash_t.c | 100 ++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 old-tests/datastruct/hash_t.c diff --git a/old-tests/datastruct/hash_t.c b/old-tests/datastruct/hash_t.c new file mode 100644 index 000000000..9db95f49a --- /dev/null +++ b/old-tests/datastruct/hash_t.c @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2001 Sistina Software (UK) Limited + * + * This file is released under the GPL. + */ + +#include "hash.h" +#include "dbg_malloc.h" + +#include + +static void _help(FILE *fp, const char *prog) +{ + fprintf(fp, "Usage : %s \n", prog); +} + +struct key_list { + struct key_list *next; + char key[1]; +}; + +static struct key_list *_create_word(int n) +{ + struct key_list *kl = dbg_malloc(sizeof(*kl) + 32); + snprintf(kl->key, 32, "abc%ddef%d", n, n); + kl->next = 0; + return kl; +} + +static struct key_list *_create_word_from_file(int n) +{ + char word[128], *ptr; + struct key_list *kl; + + if (!fgets(word, sizeof(word), stdin)) + return 0; + + for (ptr = word; *ptr; ptr++) { + if (*ptr == '\n') { + *ptr = 0; + break; + } + } + + kl = dbg_malloc(sizeof(*kl) + 32); + snprintf(kl->key, 32, "%s", word); + kl->next = 0; + return kl; +} + +static void _do_test(int table_size, int num_entries) +{ + int i; + hash_table_t ht = hash_create(table_size); + struct key_list *tmp, *key, *all = 0; + + for (i = 0; i < num_entries; i++) { + /* make up a word */ + if (!(key = _create_word_from_file(i))) { + log_error("Ran out of words !\n"); + exit(1); + } + + /* insert it */ + hash_insert(ht, key->key, key); + key->next = all; + all = key; + } + + for (key = all; key; key = key->next) { + tmp = (struct key_list *) hash_lookup(ht, key->key); + if (!tmp || (tmp != key)) { + log_error("lookup failed\n"); + exit(1); + } + } + + for (key = all; key; key = tmp) { + tmp = key->next; + dbg_free(key); + } + + hash_destroy(ht); +} + +int main(int argc, char **argv) +{ + init_log(); + + if (argc != 3) { + _help(stderr, argv[0]); + exit(1); + } + + _do_test(atoi(argv[1]), atoi(argv[2])); + + dump_memory(); + fin_log(); + return 0; +} -- 2.43.5