/* * Compare d1 and d2 using special rules: NaN == NaN and +0 != -0. * Fail an assertion if they differ. */ static void assert_equal(long double complex d1, long double complex d2) { assert(cfpequal(d1, d2)); }
int main(int argc, char *argv[]) { static const int ntests = sizeof(tests) / sizeof(tests[0]) / 2; complex float in; complex long double expected; int i; printf("1..%d\n", ntests * 3); for (i = 0; i < ntests; i++) { __real__ expected = __real__ in = tests[2 * i]; __imag__ in = tests[2 * i + 1]; __imag__ expected = -cimag(in); assert(fpequal(libcrealf(in), __real__ in)); assert(fpequal(libcreal(in), __real__ in)); assert(fpequal(libcreall(in), __real__ in)); assert(fpequal(libcimagf(in), __imag__ in)); assert(fpequal(libcimag(in), __imag__ in)); assert(fpequal(libcimagl(in), __imag__ in)); feclearexcept(FE_ALL_EXCEPT); if (!cfpequal(libconjf(in), expected)) { printf("not ok %d\t# conjf(%#.2g + %#.2gI): " "wrong value\n", 3 * i + 1, creal(in), cimag(in)); } else if (fetestexcept(FE_ALL_EXCEPT)) { printf("not ok %d\t# conjf(%#.2g + %#.2gI): " "threw an exception\n", 3 * i + 1, creal(in), cimag(in)); } else { printf("ok %d\t\t# conjf(%#.2g + %#.2gI)\n", 3 * i + 1, creal(in), cimag(in)); } feclearexcept(FE_ALL_EXCEPT); if (!cfpequal(libconj(in), expected)) { printf("not ok %d\t# conj(%#.2g + %#.2gI): " "wrong value\n", 3 * i + 2, creal(in), cimag(in)); } else if (fetestexcept(FE_ALL_EXCEPT)) { printf("not ok %d\t# conj(%#.2g + %#.2gI): " "threw an exception\n", 3 * i + 2, creal(in), cimag(in)); } else { printf("ok %d\t\t# conj(%#.2g + %#.2gI)\n", 3 * i + 2, creal(in), cimag(in)); } feclearexcept(FE_ALL_EXCEPT); if (!cfpequal(libconjl(in), expected)) { printf("not ok %d\t# conjl(%#.2g + %#.2gI): " "wrong value\n", 3 * i + 3, creal(in), cimag(in)); } else if (fetestexcept(FE_ALL_EXCEPT)) { printf("not ok %d\t# conjl(%#.2g + %#.2gI): " "threw an exception\n", 3 * i + 3, creal(in), cimag(in)); } else { printf("ok %d\t\t# conjl(%#.2g + %#.2gI)\n", 3 * i + 3, creal(in), cimag(in)); } } return (0); }