summaryrefslogtreecommitdiffstats
path: root/libdimension/bench/array.c
diff options
context:
space:
mode:
Diffstat (limited to 'libdimension/bench/array.c')
-rw-r--r--libdimension/bench/array.c118
1 files changed, 118 insertions, 0 deletions
diff --git a/libdimension/bench/array.c b/libdimension/bench/array.c
new file mode 100644
index 0000000..3fe0c83
--- /dev/null
+++ b/libdimension/bench/array.c
@@ -0,0 +1,118 @@
+/*************************************************************************
+ * Copyright (C) 2009-2010 Tavian Barnes <tavianator@tavianator.com> *
+ * *
+ * This file is part of The Dimension Benchmark Suite. *
+ * *
+ * The Dimension Benchmark Suite is free software; you can redistribute *
+ * it and/or modify it under the terms of the GNU General Public License *
+ * as published by the Free Software Foundation; either version 3 of the *
+ * License, or (at your option) any later version. *
+ * *
+ * The Dimension Benchmark Suite is distributed in the hope that it will *
+ * be useful, but WITHOUT ANY WARRANTY; without even the implied *
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See *
+ * the GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ *************************************************************************/
+
+#include "dimension.h"
+#include <sandglass.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+int
+main(void)
+{
+ const unsigned int count = 32;
+ uint32_t object = 1;
+
+ sandglass_t sandglass;
+ if (sandglass_init_monotonic(&sandglass, SANDGLASS_CPUTIME) != 0) {
+ perror("sandglass_create()");
+ return EXIT_FAILURE;
+ }
+
+ /* Benchmark allocation and deallocation */
+ dmnsn_array *array;
+ sandglass_bench_fine(&sandglass, {
+ array = dmnsn_new_array(sizeof(object));
+ dmnsn_delete_array(array);
+ });
+ printf("dmnsn_new_array() + dmnsn_delete_array(): %ld\n", sandglass.grains);
+
+ /* Create our test array */
+ array = dmnsn_new_array(sizeof(object));
+
+ /* dmnsn_array_push() */
+
+ printf("dmnsn_array_push():");
+
+ for (unsigned int i = 0; i < count; ++i) {
+ sandglass_bench_noprecache(&sandglass, dmnsn_array_push(array, &object));
+ printf(" %ld", sandglass.grains);
+ }
+ printf("\n");
+
+ /* dmnsn_array_get() */
+ sandglass_bench_fine(&sandglass, dmnsn_array_get(array, count/2, &object));
+ printf("dmnsn_array_get(): %ld\n", sandglass.grains);
+
+ /* dmnsn_array_set() */
+ sandglass_bench_fine(&sandglass, dmnsn_array_set(array, count/2, &object));
+ printf("dmnsn_array_set(): %ld\n", sandglass.grains);
+
+ /* dmnsn_array_at() */
+ void *ptr;
+ sandglass_bench_fine(&sandglass, ptr = dmnsn_array_at(array, count/2));
+ printf("dmnsn_array_at() = %p: %ld\n", ptr, sandglass.grains);
+
+ /* dmnsn_array_size() */
+ size_t size;
+ sandglass_bench_fine(&sandglass, size = dmnsn_array_size(array));
+ printf("dmnsn_array_size() = %zu: %ld\n", size, sandglass.grains);
+
+ /* dmnsn_array_resize() */
+ dmnsn_array_resize(array, count);
+ sandglass_bench_noprecache(&sandglass, dmnsn_array_resize(array, count * 2));
+ printf("dmnsn_array_resize(): %ld", sandglass.grains);
+
+ sandglass_bench_noprecache(&sandglass, dmnsn_array_resize(array, count));
+ printf(" %ld\n", sandglass.grains);
+
+ /* dmnsn_array_insert() */
+
+ printf("dmnsn_array_insert():");
+
+ for (size_t i = 0; i < count; ++i) {
+ sandglass_bench_noprecache(&sandglass,
+ dmnsn_array_insert(array, count/2, &object));
+ printf(" %ld", sandglass.grains);
+ }
+ printf("\n");
+
+ /* dmnsn_array_remove() */
+
+ printf("dmnsn_array_remove():");
+
+ for (size_t i = 0; i < count; ++i) {
+ sandglass_bench_noprecache(&sandglass,
+ dmnsn_array_remove(array, count/2));
+ printf(" %ld", sandglass.grains);
+ }
+ printf("\n");
+
+ /* dmnsn_array_pop() */
+
+ printf("dmnsn_array_pop():");
+
+ for (size_t i = 0; i < count; ++i) {
+ sandglass_bench_noprecache(&sandglass, dmnsn_array_pop(array, &object));
+ printf(" %ld", sandglass.grains);
+ }
+ printf("\n");
+
+ dmnsn_delete_array(array);
+ return EXIT_SUCCESS;
+}