#include "bench.h" #include #include #include #include #ifndef OPT_INFO # define OPT_INFO "no OPT_INFO available" #endif struct test { char *name; void (*function)(); long reference; unsigned char result; long time, points; }; struct test tests[] = { { "Bubblesort", test_bubblesort, 85, 39 }, { "Towers of Hanoi", test_hanoi, 108, 132 }, { "Primnumber Check", test_checkprim, 98, 57 }, { "Big Recursion", test_recursion, 117, 11 }, { "MD5 Checksums", test_md5, 102, 221 }, { "Fibonacci Numbers", test_fibonacci, 120, 246 }, // { "CC Builtins", test_builtin, 75, 61 }, { "Almabench", test_almabench, 107, 123 }, { "Bzip2 Compress", test_bzlib, 100, 77 }, { "Total", NULL, 905, 140 } }; int main() { char line[] = "-------------------------------------------------"; unsigned char reference_result; int c1, found_error = 0; fprintf(stderr, "+-%.20s-+-%.10s-+-%.10s-+-%.10s-+-%.10s-+\n", line, line, line, line, line); fprintf(stderr, "| %-20s | %10s | %10s | %10s | %10s |\n", "Test", "Reference", "Time", "Result", "Points"); fprintf(stderr, "+-%.20s-+-%.10s-+-%.10s-+-%.10s-+-%.10s-+\n", line, line, line, line, line); timer_start(CONTEXT_GLOBAL); for (c1=0; c1 == 0 || tests[c1-1].function; c1++) { fprintf(stderr, "| %-20s | %10ld | ", tests[c1].name, tests[c1].reference); fflush(stderr); reference_result = tests[c1].result; if ( tests[c1].function ) { tests[c1].function(); tests[c1].time = timer_reset(CONTEXT_LOCAL) + 1; tests[c1].result = result_reset(CONTEXT_LOCAL); result_push(CONTEXT_GLOBAL, tests[c1].result); } else { timer_stop(CONTEXT_GLOBAL); tests[c1].time = timer_reset(CONTEXT_GLOBAL) + 1; tests[c1].result = result_reset(CONTEXT_GLOBAL); } tests[c1].points = (tests[c1].reference*5000) / tests[c1].time; if ( reference_result != tests[c1].result ) found_error = 1; fprintf(stderr, "%10ld | %5s %4d | %10ld |\n", tests[c1].time, reference_result == tests[c1].result ? "" : "ERROR", tests[c1].result, tests[c1].points); } timer_start(CONTEXT_GLOBAL); fprintf(stderr, "+-%.20s-+-%.10s-+-%.10s-+-%.10s-+-%.10s-+\n", line, line, line, line, line); printf("%ld\n", found_error ? 0 : tests[c1-1].points); return 0; }