diff options
Diffstat (limited to 'benchmark/tree_bench.c')
-rw-r--r-- | benchmark/tree_bench.c | 77 |
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); |