]> sourceware.org Git - lvm2.git/commitdiff
o test program for the hash table.
authorJoe Thornber <thornber@redhat.com>
Tue, 2 Oct 2001 12:46:04 +0000 (12:46 +0000)
committerJoe Thornber <thornber@redhat.com>
Tue, 2 Oct 2001 12:46:04 +0000 (12:46 +0000)
old-tests/datastruct/hash_t.c [new file with mode: 0644]

diff --git a/old-tests/datastruct/hash_t.c b/old-tests/datastruct/hash_t.c
new file mode 100644 (file)
index 0000000..9db95f4
--- /dev/null
@@ -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;
+}
This page took 0.034347 seconds and 5 git commands to generate.