summaryrefslogtreecommitdiffstats
path: root/benchmark/tree_bench.c
diff options
context:
space:
mode:
Diffstat (limited to 'benchmark/tree_bench.c')
-rw-r--r--benchmark/tree_bench.c77
1 files changed, 38 insertions, 39 deletions
diff --git a/benchmark/tree_bench.c b/benchmark/tree_bench.c
index b9e230e..849216b 100644
--- a/benchmark/tree_bench.c
+++ b/benchmark/tree_bench.c
@@ -1,26 +1,24 @@
// Copyright 2011-2020 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
+#include "../test/test_data.h"
#include "bench.h"
#include "warnings.h"
-#include "../test/test_data.h"
-
-#include "zix/attributes.h"
-#include "zix/btree.h"
-#include "zix/status.h"
-#include "zix/tree.h"
+#include <zix/attributes.h>
+#include <zix/btree.h>
+#include <zix/status.h>
+#include <zix/tree.h>
ZIX_DISABLE_GLIB_WARNINGS
#include <glib.h>
ZIX_RESTORE_WARNINGS
+#include <assert.h>
#include <inttypes.h>
-#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
-#include <time.h>
#ifndef MIN
# define MIN(a, b) (((a) < (b)) ? (a) : (b))
@@ -55,15 +53,11 @@ g_int_cmp(const void* a, const void* b, void* user_data)
return int_cmp(a, b, user_data);
}
-ZIX_LOG_FUNC(1, 2)
static int
-test_fail(const char* fmt, ...)
+test_fail(const char* const prefix, const uintptr_t value)
{
- va_list args;
- va_start(args, fmt);
fprintf(stderr, "error: ");
- vfprintf(stderr, fmt, args);
- va_end(args);
+ fprintf(stderr, "%s %" PRIuPTR "\n", prefix, value);
return EXIT_FAILURE;
}
@@ -87,32 +81,32 @@ bench_zix_tree(size_t n_elems,
ZixTree* t = zix_tree_new(NULL, false, int_cmp, NULL, NULL, NULL);
// Insert n_elems elements
- struct timespec insert_start = bench_start();
+ BenchmarkTime insert_start = bench_start();
for (size_t i = 0; i < n_elems; i++) {
r = unique_rand(i);
ZixStatus status = zix_tree_insert(t, (void*)r, &ti);
if (status) {
- return test_fail("Failed to insert %" PRIuPTR "\n", r);
+ return test_fail("Failed to insert", r);
}
}
fprintf(insert_dat, "\t%lf", bench_end(&insert_start));
// Search for all elements
- struct timespec search_start = bench_start();
+ BenchmarkTime search_start = bench_start();
for (size_t i = 0; i < n_elems; i++) {
r = unique_rand(i);
if (zix_tree_find(t, (void*)r, &ti)) {
- return test_fail("Failed to find %" PRIuPTR "\n", r);
+ return test_fail("Failed to find", r);
}
if ((uintptr_t)zix_tree_get(ti) != r) {
- return test_fail("Failed to get %" PRIuPTR "\n", r);
+ return test_fail("Failed to get", r);
}
}
fprintf(search_dat, "\t%lf", bench_end(&search_start));
// Iterate over all elements
- struct timespec iter_start = bench_start();
+ BenchmarkTime iter_start = bench_start();
for (ZixTreeIter* iter = zix_tree_begin(t); !zix_tree_iter_is_end(iter);
iter = zix_tree_iter_next(iter)) {
volatile void* const value = zix_tree_get(iter);
@@ -121,16 +115,16 @@ bench_zix_tree(size_t n_elems,
fprintf(iter_dat, "\t%lf", bench_end(&iter_start));
// Delete all elements
- struct timespec del_start = bench_start();
+ BenchmarkTime del_start = bench_start();
for (size_t i = 0; i < n_elems; i++) {
r = unique_rand(i);
ZixTreeIter* item = NULL;
if (zix_tree_find(t, (void*)r, &item)) {
- return test_fail("Failed to find %" PRIuPTR " to delete\n", r);
+ return test_fail("Failed on delete to find", r);
}
if (zix_tree_remove(t, item)) {
- return test_fail("Failed to remove %" PRIuPTR "\n", r);
+ return test_fail("Failed to remove", r);
}
}
fprintf(del_dat, "\t%lf", bench_end(&del_start));
@@ -154,33 +148,33 @@ bench_zix_btree(size_t n_elems,
ZixBTree* t = zix_btree_new(NULL, int_cmp, NULL);
// Insert n_elems elements
- struct timespec insert_start = bench_start();
+ BenchmarkTime insert_start = bench_start();
for (size_t i = 0; i < n_elems; i++) {
r = unique_rand(i);
ZixStatus status = zix_btree_insert(t, (void*)r);
if (status) {
- return test_fail("Failed to insert %" PRIuPTR "\n", r);
+ return test_fail("Failed to insert", r);
}
}
fprintf(insert_dat, "\t%lf", bench_end(&insert_start));
// Search for all elements
- struct timespec search_start = bench_start();
+ BenchmarkTime search_start = bench_start();
for (size_t i = 0; i < n_elems; i++) {
r = unique_rand(i);
if (zix_btree_find(t, (void*)r, &ti)) {
- return test_fail("Failed to find %" PRIuPTR "\n", r);
+ return test_fail("Failed to find", r);
}
if ((uintptr_t)zix_btree_get(ti) != r) {
- return test_fail("Failed to get %" PRIuPTR "\n", r);
+ return test_fail("Failed to get", r);
}
}
fprintf(search_dat, "\t%lf", bench_end(&search_start));
// Iterate over all elements
- struct timespec iter_start = bench_start();
- ZixBTreeIter iter = zix_btree_begin(t);
+ BenchmarkTime iter_start = bench_start();
+ ZixBTreeIter iter = zix_btree_begin(t);
for (; !zix_btree_iter_is_end(iter); zix_btree_iter_increment(&iter)) {
volatile void* const value = zix_btree_get(iter);
(void)value;
@@ -188,14 +182,14 @@ bench_zix_btree(size_t n_elems,
fprintf(iter_dat, "\t%lf", bench_end(&iter_start));
// Delete all elements
- struct timespec del_start = bench_start();
+ BenchmarkTime del_start = bench_start();
for (size_t i = 0; i < n_elems; i++) {
r = unique_rand(i);
void* removed = NULL;
ZixBTreeIter next = zix_btree_end(t);
if (zix_btree_remove(t, (void*)r, &removed, &next)) {
- return test_fail("Failed to remove %" PRIuPTR "\n", r);
+ return test_fail("Failed to remove", r);
}
}
fprintf(del_dat, "\t%lf", bench_end(&del_start));
@@ -218,31 +212,31 @@ bench_glib(size_t n_elems,
GSequence* t = g_sequence_new(NULL);
// Insert n_elems elements
- struct timespec insert_start = bench_start();
+ BenchmarkTime insert_start = bench_start();
for (size_t i = 0; i < n_elems; ++i) {
r = unique_rand(i);
GSequenceIter* iter =
g_sequence_insert_sorted(t, (void*)r, g_int_cmp, NULL);
if (!iter || g_sequence_iter_is_end(iter)) {
- return test_fail("Failed to insert %" PRIuPTR "\n", r);
+ return test_fail("Failed to insert", r);
}
}
fprintf(insert_dat, "\t%lf", bench_end(&insert_start));
// Search for all elements
- struct timespec search_start = bench_start();
+ BenchmarkTime search_start = bench_start();
for (size_t i = 0; i < n_elems; ++i) {
r = unique_rand(i);
GSequenceIter* iter = g_sequence_lookup(t, (void*)r, g_int_cmp, NULL);
if (!iter || g_sequence_iter_is_end(iter)) {
- return test_fail("Failed to find %" PRIuPTR "\n", r);
+ return test_fail("Failed to find", r);
}
}
fprintf(search_dat, "\t%lf", bench_end(&search_start));
// Iterate over all elements
- struct timespec iter_start = bench_start();
+ BenchmarkTime iter_start = bench_start();
for (GSequenceIter* iter = g_sequence_get_begin_iter(t);
!g_sequence_iter_is_end(iter);
iter = g_sequence_iter_next(iter)) {
@@ -251,12 +245,12 @@ bench_glib(size_t n_elems,
fprintf(iter_dat, "\t%lf", bench_end(&iter_start));
// Delete all elements
- struct timespec del_start = bench_start();
+ BenchmarkTime del_start = bench_start();
for (size_t i = 0; i < n_elems; ++i) {
r = unique_rand(i);
GSequenceIter* iter = g_sequence_lookup(t, (void*)r, g_int_cmp, NULL);
if (!iter || g_sequence_iter_is_end(iter)) {
- return test_fail("Failed to remove %" PRIuPTR "\n", r);
+ return test_fail("Failed to remove", r);
}
g_sequence_remove(iter);
}
@@ -286,6 +280,11 @@ main(int argc, char** argv)
FILE* search_dat = fopen("tree_search.txt", "w");
FILE* iter_dat = fopen("tree_iterate.txt", "w");
FILE* del_dat = fopen("tree_delete.txt", "w");
+ assert(insert_dat);
+ assert(search_dat);
+ assert(iter_dat);
+ assert(del_dat);
+
fprintf(insert_dat, HEADER);
fprintf(search_dat, HEADER);
fprintf(iter_dat, HEADER);