void abort(void); int movegt(int x, int y, long long a) { int i; int ret = 0; for (i = 0; i < y; i++) { if (a >= (long long) 0xf000000000000000LL) ret = x; else ret = y; } return ret; } struct test { long long val; int ret; } tests[] = { { 0xf000000000000000LL, -1 }, { 0xefffffffffffffffLL, 1 }, { 0xf000000000000001LL, -1 }, { 0x0000000000000000LL, -1 }, { 0x8000000000000000LL, 1 }, }; int main() { int i; for (i = 0; i < sizeof (tests) / sizeof (tests[0]); i++) { if (movegt (-1, 1, tests[i].val) != tests[i].ret) abort (); } return 0; }