#include #include #include #include #include #include "test.h" uint64_t next(); void jump(); void long_jump(); int test_65() { for (unsigned x = 0; ; x++) { if (odd_ones(x) != __builtin_parity(x)) { fprintf(stderr, "x = 0x%X\n", x); return FAILED; } if (x == UINT_MAX) { return PASSED; } } } int test_66() { for (unsigned x = 0; ; x++) { if ((x == 0 && leftmost_one(x) != 0) || (x != 0 && leftmost_one(x) != (1 << (31 - __builtin_clz(x))))) { fprintf(stderr, "x = 0x%X\n", x); return FAILED; } if (x == UINT_MAX) { return PASSED; } } } int test_75(int test_cases) { for (int i = 0; i < test_cases; i++) { unsigned x = next(), y = next(); if ((uint64_t) x * y != ((uint64_t) unsigned_high_prod(x, y) << 32) + x * y) { fprintf(stderr, "x = 0x%X, y = 0x%X\n", x, y); return FAILED; } } return PASSED; } int signed_high_prod(int x, int y) { int64_t p = (int64_t) x * y; return p >> (sizeof(int) << 3); } int test_80(int test_cases) { for (int i = 0; i < test_cases; i++) { int x = next(); if (threefourths(x) != (int64_t) x * 3 / 4) { fprintf(stderr, "x = 0x%X\n", x); return FAILED; } } return PASSED; } float_bits f2b(float x) { return *(float_bits*) &x; } float b2f(float_bits x) { return *(float*) &x; } int test_95() { for (float_bits x = 0; ; x++) { float y = b2f(x) / 2, z = b2f(float_half(x)); if (y != z && !(isnan(y) && isnan(z))) { fprintf(stderr, "%X %X\n", f2b(b2f(x) / 2), float_half(x)); fprintf(stderr, "f = 0x%X\n", x); return FAILED; } if (x == UINT_MAX) { return PASSED; } } } int test_97() { for (int x = INT_MIN; ; x++) { if (f2b((float) x) != float_i2f(x)) { fprintf(stderr, "i = 0x%X\n", x); return FAILED; } if (x == INT_MAX) { return PASSED; } } }