summaryrefslogtreecommitdiffstats
path: root/old-tests
diff options
context:
space:
mode:
authorJoe Thornber <thornber@redhat.com>2001-10-02 12:46:04 +0000
committerJoe Thornber <thornber@redhat.com>2001-10-02 12:46:04 +0000
commite7ae85737be071a27b798450b18267a9b3354798 (patch)
treefef2b0d5f1e9295bb9fd0ab499e9f9076817fccf /old-tests
parent5806470df7be241a1fb6ef3aa1abbfc81502071c (diff)
downloadlvm2-e7ae85737be071a27b798450b18267a9b3354798.tar.gz
lvm2-e7ae85737be071a27b798450b18267a9b3354798.tar.xz
lvm2-e7ae85737be071a27b798450b18267a9b3354798.zip
o test program for the hash table.
Diffstat (limited to 'old-tests')
-rw-r--r--old-tests/datastruct/hash_t.c100
1 files changed, 100 insertions, 0 deletions
diff --git a/old-tests/datastruct/hash_t.c b/old-tests/datastruct/hash_t.c
new file mode 100644
index 00000000..9db95f49
--- /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 <stdio.h>
+
+static void _help(FILE *fp, const char *prog)
+{
+ fprintf(fp, "Usage : %s <table size> <num_entries>\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;
+}