/*ident "@(#)cls4:demo/complex/pow.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 9 /* ************************************************************** * * here we test the power function on the nine standard test * cases from each quadrant by * performing the operation * with a single test point, y = ( 2, 0). however, y is * represented in three different ways: as an int, as a * double, and as a complex. * * nine test cases: * | * | * | * x (SQRT(2), 3*PI/4) x (1, PI/2) x (SQRT(2), PI/4) * (-1, 1) | (0, 1) (1, 1) * | * | * | * | * | * | * | * | * (1, PI) |(0, 0) (1, 0) * -----x-------------------x-------------------x--------- * (-1, 0) |(0, 0) (1, 0) * | * | * | * | * | * | * | * | * | * x (SQRT(2), 5*PI/4) x (1, 3*PI/2) x (SQRT(2), 7*PI/4) * (-1, -1) | (0, -1) (1, -1) * | * | * (polar coordinates) * over * (cartesian coordinates) * ************************************************************** */ main() { complex x[NUM_TESTS]; complex ans[NUM_TESTS]; complex c; x[0] = complex(0, 0); ans[0] = complex(0, 0); x[1] = complex(1, 0); ans[1] = complex(1, 0); x[2] = complex(1, 1); ans[2] = complex(0, 2); x[3] = complex(0, 1); ans[3] = complex(-1, 0); x[4] = complex(-1, 1); ans[4] = complex(0, -2); x[5] = complex(-1, 0); ans[5] = complex(1, 0); x[6] = complex(-1, -1); ans[6] = complex(0, 2); x[7] = complex(0, -1); ans[7] = complex(-1, 0); x[8] = complex(1, -1); ans[8] = complex(0, -2); for ( int i = 0; i < NUM_TESTS; i++ ) { int y = 2; errno = 0; c = pow(x[i], y); if ( errno ) { cout << "*** test failed *** pow(" << x[i] << ", (int)" << y << "), errno = " << errno << "\n"; continue; } if ( _ABS(real(c) - real(ans[i])) > X_EPS || _ABS(imag(c) - imag(ans[i])) > X_EPS ) { cout << "*** test failed *** pow(" << x[i] << ", (int)" << y << ") = " << c << ", correct answer = " << ans[i] << "\n"; } else cout << "*** test passed *** pow(" << x[i] << ", (int)" << y << ") = " << c << "\n"; } for ( i = 0; i < NUM_TESTS; i++ ) { double y = 2; errno = 0; c = pow(x[i], y); if ( errno ) { cout << "*** test failed *** pow(" << x[i] << ", (double)" << y << "), errno = " << errno << "\n"; continue; } if ( _ABS(real(c) - real(ans[i])) > X_EPS || _ABS(imag(c) - imag(ans[i])) > X_EPS ) { cout << "*** test failed *** pow(" << x[i] << ", (double)" << y << ") = " << c << ", correct answer = " << ans[i] << "\n"; } else cout << "*** test passed *** pow(" << x[i] << ", (double)" << y << ") = " << c << "\n"; } for ( i = 0; i < NUM_TESTS; i++ ) { complex y = complex(2, 0); errno = 0; c = pow(x[i], y); if ( errno ) { cout << "*** test failed *** pow(" << x[i] << ", " << y << "), errno = " << errno << "\n"; continue; } if ( _ABS(real(c) - real(ans[i])) > X_EPS || _ABS(imag(c) - imag(ans[i])) > X_EPS ) { cout << "*** test failed *** pow(" << x[i] << ", " << y << ") = " << c << ", correct answer = " << ans[i] << "\n"; } else cout << "*** test passed *** pow(" << x[i] << ", " << y << ") = " << c << "\n"; } return 0; }