diff options
author | Toni Uhlig <matzeton@googlemail.com> | 2020-12-01 13:33:34 +0100 |
---|---|---|
committer | Toni Uhlig <matzeton@googlemail.com> | 2020-12-01 13:33:34 +0100 |
commit | c8bf38e5fb717d40635a2a89b22ed71b0de4266b (patch) | |
tree | 63751b2f5497c6f99e1c6a78f23a8e6e5c49833f /tests/test88.c |
Squashed 'dependencies/uthash/' content from commit 8e67ced
git-subtree-dir: dependencies/uthash
git-subtree-split: 8e67ced1d1c5bd8141c542a22630e6de78aa6b90
Diffstat (limited to 'tests/test88.c')
-rw-r--r-- | tests/test88.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/test88.c b/tests/test88.c new file mode 100644 index 000000000..46f3ee76f --- /dev/null +++ b/tests/test88.c @@ -0,0 +1,68 @@ +#ifdef HASH_FUNCTION +#undef HASH_FUNCTION /* this test's output depends on the pattern of hash collisions */ +#endif + +#include "uthash.h" +#include <stdlib.h> /* malloc */ +#include <stdio.h> /* printf */ + +/* This is mostly a copy of test6.c. */ + +#undef uthash_memcmp +#undef uthash_strlen +#define uthash_memcmp(a,b,n) alt_memcmp(a,b,n) +#define uthash_strlen(s) alt_strlen(s) + +typedef struct example_user_t { + char id[3]; + int cookie; + UT_hash_handle hh; +} example_user_t; + +static int alt_memcmp(const void *a, const void *b, size_t n) +{ + puts("alt_memcmp"); + return memcmp(a,b,n); +} + +static size_t alt_strlen(const char *s) +{ + puts("alt_strlen"); + return strlen(s); +} + +int main() +{ + int i; + example_user_t *user, *tmp, *users=NULL; + + /* create elements */ + for (i=0; i<10; i++) { + user = (example_user_t*)malloc(sizeof(example_user_t)); + if (user == NULL) { + exit(-1); + } + sprintf(user->id, "%d", i); + user->cookie = i*i; + HASH_ADD_STR(users,id,user); + } + + /* delete each ID */ + for (i=0; i<10; i++) { + char buffer[3]; + sprintf(buffer, "%d", i); + HASH_FIND_STR(users,buffer,tmp); + if (tmp != NULL) { + HASH_DEL(users,tmp); + free(tmp); + } else { + printf("user id %d not found\n", i); + } + } + + /* show the hash */ + for (user=users; user != NULL; user=(example_user_t*)(user->hh.next)) { + printf("user %s, cookie %d\n", user->id, user->cookie); + } + return 0; +} |