diff --git a/cube-test.c b/cube-test.c index 8ede1e7dddf8baaa873bcd3e5eb98427c422a120..b394d0f0553a45042a4056ad85bd6f86c2ab69d6 100644 --- a/cube-test.c +++ b/cube-test.c @@ -8,6 +8,7 @@ #include <stdio.h> #include <stdlib.h> #include <time.h> +#include <sys/time.h> int random_two_digit_number() { @@ -29,16 +30,41 @@ read_number() { return atoi(buf); } +typedef struct timer_struct { + struct timeval then; +} timer_t; + +void +start_timer(timer_t *timer) { + gettimeofday(&timer->then, NULL); +} + +long int +end_timer(timer_t *timer) { + struct timeval now; + long int delta; + + gettimeofday(&now, NULL); + delta = (now.tv_sec - timer->then.tv_sec) * 1000000; + delta += now.tv_usec - timer->then.tv_usec; + + return delta; +} + int main(int argc, char *argv[]) { int guess, number; + timer_t timer; + long int delta; srand(time(NULL)); while (1) { number = random_two_digit_number(); printf("Number is %d. Cube root (0 to exit)? ", cube(number)); + start_timer(&timer); guess = read_number(); + delta = end_timer(&timer); if (guess == 0) { exit(0); } @@ -47,5 +73,12 @@ main(int argc, char *argv[]) { } else { printf("Not correct. Number was %d.\n", number); } + if (delta < 1000) { + printf("Took %ldus\n", delta); + } else if (delta < 1000000) { + printf("Took %.1fms\n", delta / 1000.0); + } else { + printf("Took %.2fs\n", delta / 1000000.0); + } } }