commit a4cf67f3ab4c1ce276938a241f26d2f914653527
parent 8b6bc0fc0643d51c3092c8aaf10718574136cfc5
Author: Yersa Nordman <yersa@finwo.nl>
Date: Sun, 1 Oct 2023 21:17:26 +0200
Added an actual benchmark
Diffstat:
| M | benchmark.c | | | 56 | +++++++++++++++++++++++++++++++++++++++----------------- |
1 file changed, 39 insertions(+), 17 deletions(-)
diff --git a/benchmark.c b/benchmark.c
@@ -8,29 +8,49 @@
#include <unistd.h>
#include "finwo/benchmark.h"
+#include "mindex.h"
-/* usleep(): Sleep for the requested number of microseconds. */
-int musleep(long usec) {
- struct timespec ts;
- int res;
+static void fn_purge(const void *item, void *udata) {
+ free(item);
+ // Intentionally empty
+}
- if (usec < 0) {
- return -1;
- }
+static int fn_compare_string(const void *a, const void *b, void *udata) {
+ const char *sa = (char*)a;
+ const char *sb = (char*)b;
+ return strcmp(sa, sb);
+}
- ts.tv_sec = usec / 1000000;
- ts.tv_nsec = (usec % 1000000) * 1000;
+char random_char() {
+ char *alphabet = "0123456789abcdef";
+ int length = strlen(alphabet);
+ return alphabet[rand() % length];
+}
- do {
- res = nanosleep(&ts, &ts);
- } while (res && errno == EINTR);
+char *random_str(int length) {
+ char *str = malloc(length + 1);
+ for(int i=0; i<length; i++) {
+ str[i] = random_char();
+ }
+ str[length] = '\0';
+ return str;
+}
- return res;
+void mindex_bmark_rstr_1024() {
+ for(int i=0; i<1024; i++) {
+ free(random_str(16));
+ }
}
-void mindex_some_bmark_method() {
- // Intentionally empty
- musleep(100);
+void mindex_bmark_assign_1024() {
+/* struct mindex_t * mindex_init(int (*compare)(const void *a, const void *b, void *udata), void (*purge)(const void *item, void *udata), void *udata); */
+ struct mindex_t *mindex = mindex_init(fn_compare_string, fn_purge, NULL);
+ /* fr */
+ for(int i=0; i<1024; i++) {
+ mindex_set(mindex, random_str(16));
+ }
+
+ mindex_free(mindex);
}
int main() {
@@ -39,6 +59,8 @@ int main() {
1, 5, 50, 95, 99, 0
};
- BMARK(mindex_some_bmark_method);
+ BMARK(mindex_bmark_rstr_1024);
+ BMARK(mindex_bmark_assign_1024);
return bmark_run(100, percentiles);
+ return 0;
}