summaryrefslogtreecommitdiffstats
path: root/tests/test_id.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_id.c')
-rw-r--r--tests/test_id.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/test_id.c b/tests/test_id.c
new file mode 100644
index 0000000..326ad3f
--- /dev/null
+++ b/tests/test_id.c
@@ -0,0 +1,39 @@
+#include <stdlib.h>
+#include <sys/time.h>
+#include <stdio.h>
+#include <time.h>
+
+/* one provided by Aaaron Wiebe based on perl's hashing algorithm
+ * (so probably pretty generic). Not for excessively large strings!
+ */
+#if defined(__clang__)
+#pragma GCC diagnostic ignored "-Wunknown-attributes"
+#endif
+static unsigned __attribute__((nonnull(1))) int
+#if defined(__clang__)
+__attribute__((no_sanitize("unsigned-integer-overflow")))
+#endif
+hash_from_string(void *k)
+{
+ char *rkey = (char*) k;
+ unsigned hashval = 1;
+
+ while (*rkey)
+ hashval = hashval * 33 + *rkey++;
+
+ return hashval;
+}
+
+int main(int argc, char *argv[])
+{
+ struct timeval tv;
+ struct timezone tz;
+ gettimeofday(&tv, &tz);
+ if(argc != 2) {
+ fprintf(stderr, "usage: test_id test-file-name\n");
+ exit(1);
+ }
+ printf("%06ld_%04.4x", tv.tv_usec, hash_from_string(argv[1]));
+
+ return 0;
+}