/*ident "@(#)cls4:demo/complex/exp.test.C 1.1" */ /******************************************************************************* C++ source for the C++ Language System, Release 3.0. This product is a new release of the original cfront developed in the computer science research center of AT&T Bell Laboratories. Copyright (c) 1991 AT&T and UNIX System Laboratories, Inc. Copyright (c) 1984, 1989, 1990 AT&T. All Rights Reserved. THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE of AT&T and UNIX System Laboratories, Inc. The copyright notice above does not evidence any actual or intended publication of such source code. *******************************************************************************/ #include #include #define NUM_TESTS 12 /* ************************************************************** * * exp(c), where c = a + bj, is e**(a+bj) = (e**a)*(e**(b*j)). * now, e**(j*theta) = cos(theta) + j*sin(theta). * so, * c a+bj a * e = e = e * ( cos(b) + j*sin(b) ) * * hence, for test cases, we'll pick nice values of a, * like 0, 1, and -1, and nice values of b, i.e., * where the sine and cosine values * have #define values * available, like multiples of PI/4. * * twelve test cases: * | * x x x * (-1, PI) |(0, PI) (1, PI) * | * | * | * | * | * | * | * | * | * | * x x x * (-1, PI/2) |(0, PI/2) (1, PI/2) * | * | * | * | * x x x * (-1, PI/4) |(0, PI/4) (1, PI/4) * | * | * | * | * -----x-------------------x-------------------x--------- * (-1, 0) |(0, 0) (1, 0) * | * (cartesian coordinates) * ************************************************************** */ main() { complex c[NUM_TESTS]; complex ans[NUM_TESTS]; complex d; c[0] = complex(0, 0); ans[0] = complex(1, 0); c[1] = complex(0, M_PI_4); ans[1] = complex(1/M_SQRT2, 1/M_SQRT2); c[2] = complex(0, M_PI_2); ans[2] = complex(0, 1); c[3] = complex(0, M_PI); ans[3] = complex(-1, 0); c[4] = complex(1, 0); ans[4] = complex(M_E, 0); c[5] = complex(1, M_PI_4); ans[5] = complex(M_E/M_SQRT2, M_E/M_SQRT2); c[6] = complex(1, M_PI_2); ans[6] = complex(0, M_E); c[7] = complex(1, M_PI); ans[7] = complex(-M_E, 0); c[8] = complex(-1, 0); ans[8] = complex(1/M_E, 0); c[9] = complex(-1, M_PI_4); ans[9] = complex(1/(M_E*M_SQRT2), 1/(M_E*M_SQRT2)); c[10] = complex(-1, M_PI_2); ans[10] = complex(0, 1/M_E); c[11] = complex(-1, M_PI); ans[11] = complex(-1/M_E, 0); for ( int i = 0; i < NUM_TESTS; i++ ) { errno = 0; d = exp(c[i]); if ( errno ) { cout << "*** test failed *** exp(" << c[i] << "), errno=" << errno << "\n"; continue; } if ( _ABS(real(d) - real(ans[i])) > X_EPS || _ABS(imag(d) - imag(ans[i])) > X_EPS ) { cout << "*** test failed *** exp(" << c[i] << ") = " << d << ", correct answer = " << ans[i] << "\n"; } else cout << "*** test passed *** exp(" << c[i] << ") = " << d << "\n"; } return 0; }