double SDL_scalbn(double x, int n) { #if defined(HAVE_SCALBN) return scalbn(x, n); #elif defined(HAVE__SCALB) return _scalb(x, n); #else return SDL_uclibc_scalbn(x, n); #endif /* HAVE_SCALBN */ }
void test_scalb(void) { ieee_double tested; ieee_double expected; ieee_double result; expected.l = 0; errno = 0xDEADBEEF; tested.l = 0xFFFFFFFFFFFFFFFFLL; expected.l = 0xFFFFFFFFFFFFFFFFLL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == EDOM, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0xFFF8000000000001LL; expected.l = 0xFFF8000000000001LL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == EDOM, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0xFFF8000000000000LL; expected.l = 0xFFF8000000000000LL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == EDOM, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0xFFF7FFFFFFFFFFFFLL; expected.l = 0xFFFFFFFFFFFFFFFFLL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == EDOM, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0xFFF0000000000001LL; expected.l = 0xFFF8000000000001LL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == EDOM, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0xFFF0000000000000LL; expected.l = 0xFFF0000000000000LL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == 0xDEADBEEF, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0xFFEFFFFFFFFFFFFFLL; expected.l = 0xFFF0000000000000LL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == ERANGE, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0x8010000000000000LL; expected.l = 0x8040000000000000LL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == 0xDEADBEEF, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0x800FFFFFFFFFFFFFLL; expected.l = 0x803FFFFFFFFFFFFELL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == 0xDEADBEEF, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0x8000000000000001LL; expected.l = 0x8000000000000008LL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == 0xDEADBEEF, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0x8000000000000000LL; expected.l = 0x8000000000000000LL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == 0xDEADBEEF, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0x0000000000000000LL; expected.l = 0x0000000000000000LL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == 0xDEADBEEF, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0x0000000000000001LL; expected.l = 0x0000000000000008LL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == 0xDEADBEEF, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0x000FFFFFFFFFFFFFLL; expected.l = 0x003FFFFFFFFFFFFELL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == 0xDEADBEEF, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0x0010000000000000LL; expected.l = 0x0040000000000000LL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == 0xDEADBEEF, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0x7FEFFFFFFFFFFFFFLL; expected.l = 0x7FF0000000000000LL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == ERANGE, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0x7FF0000000000000LL; expected.l = 0x7FF0000000000000LL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == 0xDEADBEEF, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0x7FF0000000000001LL; expected.l = 0x7FF8000000000001LL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == EDOM, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0x7FF7FFFFFFFFFFFFLL; expected.l = 0x7FFFFFFFFFFFFFFFLL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == EDOM, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0x7FF8000000000000LL; expected.l = 0x7FF8000000000000LL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == EDOM, "errno: %d\n", errno); errno = 0xDEADBEEF; tested.l = 0x7FFFFFFFFFFFFFFFLL; expected.l = 0x7FFFFFFFFFFFFFFFLL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == EDOM, "errno: %d\n", errno); /* MSDN example */ errno = 0xDEADBEEF; tested.d = 2.387000; expected.l = 0x4033189374BC6A7FLL; result.d = _scalb(tested.d, 3); ok(result.l == expected.l, "_scalb returned: %I64x\n", result.l); ok(errno == 0xDEADBEEF, "errno: %d\n", errno); }