diff options
Diffstat (limited to 'bench/tests/BenchAlgo.c')
| -rw-r--r-- | bench/tests/BenchAlgo.c | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/bench/tests/BenchAlgo.c b/bench/tests/BenchAlgo.c new file mode 100644 index 0000000..3bad224 --- /dev/null +++ b/bench/tests/BenchAlgo.c @@ -0,0 +1,169 @@ +#include <BH/Bench.h> +#include <BH/Algo.h> + + +#define NUM_ENTRIES 1000 + + +static int testArray[NUM_ENTRIES]; +static int tempArray[NUM_ENTRIES]; +static int pivotValue; + + +static int intEqual(const void *a, const void *b) +{ + int ia, ib; + ia = *(const int*)a; + ib = *(const int*)b; + return (ia > ib) - (ia < ib); +} + + +static void algoSetup(void) +{ + int i; + for (i = 0; i < NUM_ENTRIES; ++i) + { + testArray[i] = NUM_ENTRIES - i; + tempArray[i] = NUM_ENTRIES - i; + } + pivotValue = NUM_ENTRIES / 2; +} + + +BH_BENCH_TEST(Swap) +{ + int a = 123; + int b = 456; + algoSetup(); + + while (BH_BenchIter(state)) + { + BH_Swap(&a, &b, sizeof(int)); + BH_BenchDoNotOptimize(a); + BH_BenchDoNotOptimize(b); + BH_Swap(&a, &b, sizeof(int)); + } +} + + +BH_BENCH_TEST(Partition) +{ + algoSetup(); + + while (BH_BenchIter(state)) + { + void *pivot, *result; + for (int i = 0; i < NUM_ENTRIES; ++i) + testArray[i] = tempArray[i]; + + pivot = &pivotValue; + result = BH_Partition(pivot, testArray, NUM_ENTRIES, sizeof(int), intEqual); + BH_BenchDoNotOptimize(result); + BH_BenchDoNotOptimize(testArray); + } +} + + +BH_BENCH_TEST(Sort) +{ + algoSetup(); + + while (BH_BenchIter(state)) + { + int i; + for (i = 0; i < NUM_ENTRIES; ++i) + testArray[i] = tempArray[i]; + + BH_Sort(testArray, NUM_ENTRIES, sizeof(int), intEqual); + BH_BenchDoNotOptimize(testArray); + } +} + + +BH_BENCH_TEST(HeapMake) +{ + algoSetup(); + + while (BH_BenchIter(state)) + { + int i; + for (i = 0; i < NUM_ENTRIES; ++i) + testArray[i] = tempArray[i]; + + BH_HeapMake(testArray, NUM_ENTRIES, sizeof(int), intEqual); + BH_BenchDoNotOptimize(testArray); + } +} + + +BH_BENCH_TEST(HeapRemove) +{ + algoSetup(); + + while (BH_BenchIter(state)) + { + int i; + for (i = 0; i < NUM_ENTRIES; ++i) + testArray[i] = tempArray[i]; + BH_HeapMake(testArray, NUM_ENTRIES, sizeof(int), intEqual); + BH_HeapRemove(testArray, NUM_ENTRIES, sizeof(int), intEqual); + BH_BenchDoNotOptimize(testArray); + } +} + + +BH_BENCH_TEST(HeapInsert) +{ + algoSetup(); + + while (BH_BenchIter(state)) + { + int i, value; + + for (i = 0; i < NUM_ENTRIES - 1; ++i) + testArray[i] = tempArray[i]; + testArray[NUM_ENTRIES - 1] = 0; + BH_HeapMake(testArray, NUM_ENTRIES - 1, sizeof(int), intEqual); + + value = 250; + BH_HeapInsert(&value, testArray, NUM_ENTRIES - 1, sizeof(int), intEqual); + BH_BenchDoNotOptimize(testArray); + } +} + + +BH_BENCH_TEST(HeapReplace) +{ + algoSetup(); + + while (BH_BenchIter(state)) + { + int i, value; + + for (i = 0; i < NUM_ENTRIES; ++i) + testArray[i] = tempArray[i]; + BH_HeapMake(testArray, NUM_ENTRIES, sizeof(int), intEqual); + + value = 100; + BH_HeapReplace(&value, testArray, NUM_ENTRIES, sizeof(int), intEqual); + BH_BenchDoNotOptimize(testArray); + } +} + + +int main(int argc, char **argv) +{ + BH_UNUSED(argc); + BH_UNUSED(argv); + + BH_BENCH_ADD(Swap); + BH_BENCH_ADD(Partition); + BH_BENCH_ADD(Sort); + BH_BENCH_ADD(HeapMake); + BH_BENCH_ADD(HeapRemove); + BH_BENCH_ADD(HeapInsert); + BH_BENCH_ADD(HeapReplace); + + return BH_BenchRun(); +} |
