/* This is a small test case for returning a complex number. Written by Andreas Jaeger. */ #include "defines.h" #define BUILD_F_COMPLEX(real, imag) \ ({ __complex__ float __retval; \ __real__ __retval = (real); \ __imag__ __retval = (imag); \ __retval; }) #define BUILD_D_COMPLEX(real, imag) \ ({ __complex__ double __retval; \ __real__ __retval = (real); \ __imag__ __retval = (imag); \ __retval; }) #define BUILD_LD_COMPLEX(real, imag) \ ({ __complex__ long double __retval; \ __real__ __retval = (real); \ __imag__ __retval = (imag); \ __retval; }) __complex__ float aj_f_times2 (__complex__ float x) { __complex__ float res; __real__ res = (2.0 * __real__ x); __imag__ res = (2.0 * __imag__ x); return res; } __complex__ double aj_d_times2 (__complex__ double x) { __complex__ double res; __real__ res = (2.0 * __real__ x); __imag__ res = (2.0 * __imag__ x); return res; } __complex__ long double aj_ld_times2 (__complex__ long double x) { __complex__ long double res; __real__ res = (2.0 * __real__ x); __imag__ res = (2.0 * __imag__ x); return res; } int main (void) { #ifdef CHECK_COMPLEX _Complex float fc, fd; _Complex double dc, dd; _Complex long double ldc, ldd; fc = BUILD_LD_COMPLEX (2.0f, 3.0f); fd = aj_f_times2 (fc); assert (__real__ fd == 4.0f && __imag__ fd == 6.0f); dc = BUILD_LD_COMPLEX (2.0, 3.0); dd = aj_ld_times2 (dc); assert (__real__ dd == 4.0 && __imag__ dd == 6.0); ldc = BUILD_LD_COMPLEX (2.0L, 3.0L); ldd = aj_ld_times2 (ldc); assert (__real__ ldd == 4.0L && __imag__ ldd == 6.0L); #endif return 0; }