// examples/fib_iter translated by mycpp // BEGIN mycpp output #include "mycpp/runtime.h" GLOBAL_STR(str0, "fib_iter(%d) = %d"); GLOBAL_STR(str1, "fib_iter(%d) = %d"); GLOBAL_STR(str2, "Ran %d iterations of fib_iter"); namespace fib_iter { // forward declare } // forward declare namespace fib_iter namespace fib_iter { // declare int fib_iter(int n); void run_tests(); void run_benchmarks(); } // declare namespace fib_iter namespace fib_iter { // define int fib_iter(int n) { int a; int b; int i; int tmp; a = 0; b = 1; i = 0; while (i < n) { tmp = (a + b); a = b; b = tmp; i += 1; } return b; } void run_tests() { int x; int result; x = 33; result = fib_iter(x); mylib::print_stderr(StrFormat("fib_iter(%d) = %d", x, result)); } void run_benchmarks() { int n; int x; int result; int i; n = 500000; x = 33; result = -1; i = 0; while (i < n) { result = fib_iter(x); i += 1; } mylib::print_stderr(StrFormat("fib_iter(%d) = %d", x, result)); mylib::print_stderr(StrFormat("Ran %d iterations of fib_iter", n)); } } // define namespace fib_iter int main(int argc, char **argv) { gHeap.Init(); char* b = getenv("BENCHMARK"); if (b && strlen(b)) { // match Python's logic fprintf(stderr, "Benchmarking...\n"); fib_iter::run_benchmarks(); } else { fib_iter::run_tests(); } gHeap.CleanProcessExit(); }