/* TestRational.cpp CIS 250 David Klick Test driver program for Rational class. */ #include "Rational.h" #include #include #include using std::cin; using std::cout; using std::cerr; using std::endl; using std::boolalpha; using std::invalid_argument; int main(void) { // create rational number objects Rational r[7] = { Rational(), Rational(2,3), Rational(12,15), Rational(-15,-12), Rational(4,3), Rational(3,2), Rational(0,3) }; int i; // display rational numbers created for (i=0; i<7; i++) cout << "r[" << i << "] = " << r[i] << '\n'; cout << "Testing math operators:" << endl; cout << "r[1] + r[4] = " << r[1] + r[4] << endl; cout << "r[1] - r[4] = " << r[1] - r[4] << endl; cout << "r[1] / r[4] = " << r[1] / r[4] << endl; cout << "r[1] * r[4] = " << r[1] * r[4] << endl; cout << "r[1] * r[5] = " << r[1] * r[5] << endl; cout << "r[5] - r[5] = " << r[5] - r[5] << endl; cout << "Trying an invalid division:\n"; try { cout << "r[3] / r[6] = " << r[3] / r[6] << endl; } catch (invalid_argument e) { cerr << e.what() << '\n'; } cout << "Testing increment and decrement operators:" << endl; cout << "++r[1] = " << ++r[1] << endl; cout << "--r[1] = " << --r[1] << endl; cout << "r[1]++ = " << r[1]++ << endl; cout << "r[1]-- = " << r[1]-- << endl; cout << "r[1] = " << r[1] << endl; cout << "Testing relational and assignment operators:" << endl; r[2] = r[0]; cout << boolalpha << "r[2] set to r[0]\n"; cout << "r[0] > r[1] = " << (r[0] > r[1]) << endl; // true cout << "r[0] < r[1] = " << (r[0] < r[1]) << endl; // false cout << "r[0] == r[1] = " << (r[0] == r[1]) << endl; // false cout << "r[0] != r[1] = " << (r[0] != r[1]) << endl; // true cout << "r[0] == r[2] = " << (r[0] == r[2]) << endl; // true cout << "r[0] <= r[1] = " << (r[0] <= r[1]) << endl; // false cout << "r[0] >= r[1] = " << (r[0] >= r[1]) << endl; // true cout << "r[0] >= r[2] = " << (r[0] >= r[2]) << endl; // true cout << "r[0] <= r[2] = " << (r[0] <= r[2]) << endl; // true cout << "Testing display style setting:" << endl; for (i=0; i<6; i++) { Rational::setDisplayStyle(Rational::FRACTIONAL); cout << "r[" << i << "] = " << r[i] << " = "; Rational::setDisplayStyle(Rational::FLOATING_POINT); cout << r[i] << '\n'; } Rational::setDisplayStyle(Rational::FRACTIONAL); try { cout << "Try to create invalid Rational object:" << endl; Rational badrat(2,0); } catch (invalid_argument e) { cerr << e.what() << '\n'; } try { cout << "Try to set invalid denominator:" << endl; r[2].setNums(-7, 0); } catch (invalid_argument e) { cerr << e.what() << '\n'; } cout << "Test of extraction operator overload\n"; cin >> r[0]; cout << "You entered: " << r[0] << '\n'; cout << "*** End of test" << endl; return 0; }