#include #include #include double _Complex x = 1 + 2.0i; int main(void) { assert(x == 1 + 2.i); assert(x == 1 + 2*I); assert(x == 1 + 2*_Complex_I); assert(x == CMPLX(1.0, 2.0)); assert(creal(x) == 1.0); assert(cimag(x) == 2.0); assert(x); assert(x!=0); assert(2*x == 2 + 4.0i); // Check implicit conversions to _Bool... double _Complex y1 = 3.14; double _Complex y2 = 3.14i; double _Complex y3 = 0; if (y1) assert(true); else assert(false); if (y2) assert(true); else assert(false); if (y3) assert(false); else assert(true); while (y3) { assert(false); } // Check other conversions... float _Complex x_f = x; assert(x_f == 1.0f + 2.if); assert(crealf(x_f) == 1.0f); assert(cimagf(x_f) == 2.0f); assert(x_f == CMPLXF(1, 2)); double a = x; assert(a==1); long double _Complex x_l = x; assert(x_l == (long double)1.0 + ((long double)2.0)*I); // Qualifiers... const double _Complex z = CMPLX(3.333, -2.222); assert(creal(z) == 3.333); assert(cimag(z) == -2.222); }