//tadd_ok测试函数 void test_tadd_ok() { printf("call test_tadd_ok() \n"); int x = 10; int y = 20; int ret = tadd_ok(x, y); printf("tadd_ok(%u, %u) ret %d \n", x, y, ret); x = 0x7FFFFFFF; y = 0x7FFFFFFF; ret = tadd_ok(x, y); printf("tadd_ok(%d, %d) ret %d \n", x, y, ret); x = 0x80000000; y = 0x80000000; ret = tadd_ok(x, y); printf("tadd_ok(%d, %d) ret %d \n", x, y, ret); x = 0xFFFFFFFF; y = 0x80000001; ret = tadd_ok(x, y); printf("tadd_ok(%d, %d) ret %d \n", x, y, ret); printf("============================================================================\n"); }
int main(int argc, char *argv[]) { int x,y; x = 1; y = 1; printf("overflow: %s [%d + %d = %d]\n", tadd_ok(x,y) ? "false" : "true", x , y, x + y); x = -1; y = -1; printf("overflow: %s [%d + %d = %d]\n", tadd_ok(x,y) ? "false" : "true", x , y, x + y); x = INT_MAX; y = 1; printf("overflow: %s [%d + %d = %d]\n", tadd_ok(x,y) ? "false" : "true", x , y, x + y); x = -1; y = INT_MIN; printf("overflow: %s [%d + %d = %d]\n", tadd_ok(x,y) ? "false" : "true", x , y, x + y); }
int main(int argc, char **argv) { printf("%d\n", tadd_ok_char(-127, -4)); printf("%d\n", tadd_ok_char(-1, -2)); printf("%d\n", tadd_ok_char(-1, 7)); printf("%d\n", tadd_ok_char(126, 20)); printf("\n"); printf("%d\n", tadd_ok(INT_MIN, INT_MIN)); printf("%d\n", tadd_ok(INT_MIN, -4)); printf("%d\n", tadd_ok(-1, -2)); printf("%d\n", tadd_ok(-1, 7)); printf("%d\n", tadd_ok(INT_MAX, 20)); printf("%d\n", tadd_ok(INT_MAX, INT_MAX)); printf("\n"); printf("%d\n", tsub_ok(INT_MIN, INT_MIN)); printf("%d\n", tsub_ok(INT_MIN, -4)); printf("%d\n", tsub_ok(-1, -2)); printf("%d\n", tsub_ok(-1, 7)); printf("%d\n", tsub_ok(INT_MAX, 20)); printf("%d\n", tsub_ok(INT_MAX, INT_MAX)); printf("INT_MIN = %d\t -INT_MIN = %d\n", INT_MIN, (-INT_MIN)); return EXIT_SUCCESS; }
int main(void) { printf("%d : 1, 2\n", tadd_ok(1, 2)); printf("%d : 0x7fffffff, 0x7fffffff\n", tadd_ok(0x7fffffff, 0x7fffffff)); printf("%d : 0x40000000, 0x40000000\n", tadd_ok(0x40000000, 0x40000000)); printf("%d : 0x40000000, 0x3fffffff\n", tadd_ok(0x40000000, 0x3fffffff)); printf("%d : 0x40000000, 0x3ffffffe\n", tadd_ok(0x40000000, 0x3ffffffe)); printf("%d : -1, -2\n", tadd_ok(-1, -2)); printf("%d : 0x80000000, 0x80000000\n", tadd_ok(0x80000000, 0x80000000)); printf("%d : 0xc0000000, 0xc0000000\n", tadd_ok(0xc0000000, 0xc0000000)); printf("%d : 0xc0000000, 0xc0000001\n", tadd_ok(0xc0000000, 0xc0000001)); printf("%d : 0xc0000000, 0xbfffffff\n", tadd_ok(0xc0000000, 0xbfffffff)); printf("%d : 0xc0000000, 0\n", tadd_ok(0xc0000000, 0)); printf("%d : 0x7fffffff, 0xc0000000\n", tadd_ok(0x7fffffff, 0xc0000000)); printf("----------- buggy function test\n"); printf("%d : 1, 2\n", buggy_tadd_ok(1, 2)); printf("%d : 0x7fffffff, 0x7fffffff\n", buggy_tadd_ok(0x7fffffff, 0x7fffffff)); printf("%d : 0x40000000, 0x40000000\n", buggy_tadd_ok(0x40000000, 0x40000000)); printf("%d : 0x40000000, 0x3fffffff\n", buggy_tadd_ok(0x40000000, 0x3fffffff)); printf("%d : 0x40000000, 0x3ffffffe\n", buggy_tadd_ok(0x40000000, 0x3ffffffe)); printf("%d : -1, -2\n", buggy_tadd_ok(-1, -2)); printf("%d : 0x80000000, 0x80000000\n", buggy_tadd_ok(0x80000000, 0x80000000)); printf("%d : 0xc0000000, 0xc0000000\n", buggy_tadd_ok(0xc0000000, 0xc0000000)); printf("%d : 0xc0000000, 0xc0000001\n", buggy_tadd_ok(0xc0000000, 0xc0000001)); printf("%d : 0xc0000000, 0xbfffffff\n", buggy_tadd_ok(0xc0000000, 0xbfffffff)); printf("%d : 0xc0000000, 0\n", buggy_tadd_ok(0xc0000000, 0)); printf("%d : 0x7fffffff, 0xc0000000\n", buggy_tadd_ok(0x7fffffff, 0xc0000000)); return 0; }
int tsub_ok(unsigned x, unsigned y) { int UMax = 21; int sign = y == UMax ? -1 : 1; return sign * tadd_ok(x, -y); }
int tsub_ok(int x, int y) { return tadd_ok(x, -y); }