]> git.datanom.net - hashtable.git/blob - test.c
5259e7e81932cad1b7f5778fd8adc471af4919c0
[hashtable.git] / test.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <inttypes.h>
5 #include "hashtable.h"
6
7 #define MAX_LINE 4096
8
9 uint64_t word_hash_func(const char* name, size_t length) {
10 uint64_t hash_value = 0;
11 for (size_t i = 0; i < length; i++) {
12 hash_value += name[i];
13 hash_value = hash_value * name[i];
14 }
15 return hash_value;
16 }
17
18 void generate_random_word(char* buffer, size_t length) {
19 for (size_t i = 0; i < length - 1; i++) {
20 buffer[i] = 'a' + (rand() % 26);
21 }
22 buffer[length - 1] = 0;
23 }
24
25 int main(int argc, char** argv) {
26 if (argc != 3) {
27 printf("usage: %s <wordlist filename> <num guesses>\n", argv[0]);
28 return EXIT_FAILURE;
29 }
30
31 char* filename = argv[1];
32 uint32_t num_guesses = atol(argv[2]);
33
34 Hashtable* table = hash_table_create(str_hash, str_equal);
35
36 FILE* fp = fopen(filename, "r");
37 char* buffer = calloc(sizeof(char), MAX_LINE);
38 uint32_t numwords = 0;
39 uint32_t failed = 0;
40 while (!feof(fp) && fgets(buffer, MAX_LINE, fp) != NULL) {
41 buffer[strcspn(buffer, "\r\n")] = 0;
42 char* newentry = malloc(strlen(buffer) + 1);
43 strcpy(newentry, buffer);
44 bool result = hash_table_insert(table, newentry, newentry);
45 if (result == false) {
46 printf("Failed [%u] storing %s\n", ++failed, newentry);
47 free(newentry);
48 } else
49 numwords++;
50 }
51
52 fclose(fp);
53 printf("Loaded %d words into the table.\n", numwords);
54
55 //hash_table_print(table);
56 uint32_t good_guesses = 0;
57 const int shortest_guess = 2;
58 const int longest_guess = 15;
59 void* data = NULL;
60 for (uint32_t i = 0; i < num_guesses; i++) {
61 generate_random_word(buffer, shortest_guess +
62 (rand() % (longest_guess - shortest_guess)));
63 if ((data = hash_table_lookup(table, buffer)) != NULL) {
64 printf("Lookup: %s - Found: %s\n", buffer, (char*) data);
65 good_guesses++;
66 }
67 }
68
69 printf("%u out of %u guesses were in the table\n", good_guesses, num_guesses);
70
71 free(buffer);
72 hash_table_destroy(table);
73 }
This page took 0.060079 seconds and 4 git commands to generate.