#include #include #include #include /* Intcmp: Return an int ** negative if a < b, ** zero if a == b, and ** positive if a > b. */ int intcmp(int a, int b) { return a - b; } int intcmp2(int a, int b) { return (a > b) - (a < b); } /* Intcmp: Return an int ** like strcmp() does. */ int intcmp3(int a, int b) { if (a > b) return 1; if (a < b) return -1; else return 0; } void printcmp(int a, int b) { int r = intcmp(a, b); printf("%d ", a); if (r < 0) printf("<"); else if (r > 0) printf(">"); else printf("=="); printf(" %d", b); if (r < 0 && a >= b) printf(" !"); else if (r > 0 && a <= b) printf(" !"); else if (r == 0 && a != b) printf(" !"); r = intcmp2(a, b); if (r < 0 && a >= b) printf(" X"); else if (r > 0 && a <= b) printf(" X"); else if (r == 0 && a != b) printf(" X"); r = intcmp3(a, b); if (r < 0 && a >= b) printf(" Y"); else if (r > 0 && a <= b) printf(" Y"); else if (r == 0 && a != b) printf(" Y"); printf("\n"); } int main(int argc, char **argv) { clock_t in, out; int i; printcmp(42,16); printcmp(-15,-22); printcmp(-15,15); printcmp(15,-15); printcmp(15, INT32_MIN); printcmp(INT32_MIN, 15); printcmp(1, -INT32_MAX); /* Note timing won't work if the compiler performs dead code removal. */ in = clock(); for (i = 0; i < 10000000; i++) { intcmp(i,i+1); intcmp(i+1,i); intcmp(i,i+2); intcmp(i+2,i); intcmp(i,i+3); intcmp(i+3,i); intcmp(i,i+4); intcmp(i+4,i); } out = clock(); printf("80M intcmp() took %0.3fms\n", (out - in) / (CLOCKS_PER_SEC/1000.0)); in = clock(); for (i = 0; i < 10000000; i++) { intcmp2(i,i+1); intcmp2(i+1,i); intcmp2(i,i+2); intcmp2(i+2,i); intcmp2(i,i+3); intcmp2(i+3,i); intcmp2(i,i+4); intcmp2(i+4,i); } out = clock(); printf("80M intcmp2() took %0.3fms\n", (out - in) / (CLOCKS_PER_SEC/1000.0)); in = clock(); for (i = 0; i < 10000000; i++) { intcmp3(i,i+1); intcmp3(i+1,i); intcmp3(i,i+2); intcmp3(i+2,i); intcmp3(i,i+3); intcmp3(i+3,i); intcmp3(i,i+4); intcmp3(i+4,i); } out = clock(); printf("80M intcmp3() took %0.3fms\n", (out - in) / (CLOCKS_PER_SEC/1000.0)); return 0; }