aboutsummaryrefslogtreecommitdiff
path: root/bench/tests/BenchQueue.c
diff options
context:
space:
mode:
Diffstat (limited to 'bench/tests/BenchQueue.c')
-rw-r--r--bench/tests/BenchQueue.c117
1 files changed, 117 insertions, 0 deletions
diff --git a/bench/tests/BenchQueue.c b/bench/tests/BenchQueue.c
new file mode 100644
index 0000000..0e683d9
--- /dev/null
+++ b/bench/tests/BenchQueue.c
@@ -0,0 +1,117 @@
+#include <BH/Bench.h>
+#include <BH/Queue.h>
+
+
+#define NUM_ENTRIES 1000
+
+
+static int values[NUM_ENTRIES];
+static BH_Queue *queue;
+static void *frontValue;
+static void *iter;
+static void *iterValue;
+
+
+static void setupData()
+{
+ int i;
+ queue = BH_QueueNew();
+ for (i = 0; i < NUM_ENTRIES; ++i)
+ {
+ values[i] = i + 1;
+ BH_QueueInsert(queue, &values[i]);
+ }
+}
+
+
+BH_BENCH_TEST(NewFree)
+{
+ while (BH_BenchIter(state))
+ {
+ queue = BH_QueueNew();
+ BH_BenchDoNotOptimize(queue);
+ if (queue) BH_QueueFree(queue);
+ }
+}
+
+
+BH_BENCH_TEST(ReserveInsert)
+{
+ BH_BenchSubcount(state, NUM_ENTRIES);
+ while (BH_BenchIter(state))
+ {
+ int i;
+ queue = BH_QueueNew();
+ BH_QueueReserve(queue, NUM_ENTRIES);
+
+ for (i = 0; i < NUM_ENTRIES; ++i)
+ {
+ values[i] = i + 1;
+ BH_QueueInsert(queue, &values[i]);
+ }
+
+ BH_BenchDoNotOptimize(queue);
+ BH_QueueFree(queue);
+ }
+}
+
+
+BH_BENCH_TEST(FrontRemove)
+{
+ BH_BenchSubcount(state, NUM_ENTRIES);
+ while (BH_BenchIter(state))
+ {
+ int i;
+ queue = BH_QueueNew();
+ for (i = 0; i < NUM_ENTRIES; ++i)
+ {
+ values[i] = i + 1;
+ BH_QueueInsert(queue, &values[i]);
+ }
+
+ for (i = 0; i < NUM_ENTRIES; ++i)
+ {
+ if (BH_QueueFront(queue, &frontValue) == 0)
+ {
+ BH_QueueRemove(queue);
+ }
+ }
+
+ BH_BenchDoNotOptimize(frontValue);
+ BH_BenchDoNotOptimize(queue);
+ BH_QueueFree(queue);
+ }
+}
+
+
+BH_BENCH_TEST(Iterate)
+{
+ setupData();
+ BH_BenchSubcount(state, NUM_ENTRIES);
+ while (BH_BenchIter(state))
+ {
+ iter = NULL;
+ iterValue = NULL;
+ while ((iter = BH_QueueIterNext(queue, iter)) != NULL)
+ {
+ iterValue = BH_QueueIterValue(iter);
+ }
+ BH_BenchDoNotOptimize(iterValue);
+ }
+
+ BH_QueueFree(queue);
+}
+
+
+int main(int argc, char **argv)
+{
+ BH_UNUSED(argc);
+ BH_UNUSED(argv);
+
+ BH_BENCH_ADD(NewFree);
+ BH_BENCH_ADD(ReserveInsert);
+ BH_BENCH_ADD(FrontRemove);
+ BH_BENCH_ADD(Iterate);
+
+ return BH_BenchRun();
+}