1: // Filename: TESTFRAC.CPP 2: // Purpose: Tests some features of the Fraction class. 4: #include <iostream> 5: #include <iomanip> 6: using namespace std; 9: #include "FRACTION.H" 10: #include "MENU.H" 11: #include "TXITEMS.H" 12: #include "PAUSE.H" 15: void DisplayFractionTests(const TextItems&); 18: int main() 19: { 20: Menu m("Main Menu"); 21: m.AddOption("Quit"); 22: m.AddOption("Get information"); 23: m.AddOption("Display specific fraction tests"); 25: TextItems testfracText("testfrac.dat"); 26: int menuChoice; 28: do 29: { 30: m.Display(); 31: menuChoice = m.Choice(); 33: switch (menuChoice) 34: { 35: case -1: 36: cout << "\nProgram now terminating.\n\n"; 37: break; 39: case 1: 40: cout << endl; 41: break; 43: case 2: 44: testfracText.DisplayItem("Program Description"); 45: break; 47: case 3: 48: DisplayFractionTests(testfracText); 49: break; 50: } 52: } while (menuChoice != 1 && menuChoice != -1); 53: cout << endl; 55: return 0; 56: } 60: void DisplayFractionTests(/* in */ const TextItems& testfracText) 61: // Pre: "testfracText" has been initialized 62: // Post: A series of tests has been performed on the Fraction 63: // class, one of them with the aid of some input from the 64: // user, and the results of the tests have been displayed. 65: // Two of the tests are optional and may or may not be 66: // performed, at the discretion of the user. Either test, 67: // if successful, will lead to immediate termination of 68: // the program, so two separate runs of the program are 69: // necessary to complete both of these tests, which are 70: // the last two performed. 71: { 72: testfracText.DisplayItem("Test Info: Part 1"); 74: char response; 75: cout << "Would you like to check your constructor? (Y/N): "; 76: cin >> response; cin.ignore(80, '\n'); cout << endl; 77: if (response == 'Y' || response == 'y') 78: { 79: Fraction fTest1(1,0); 80: cout << "Fraction value is: " << fTest1 << endl; 81: Pause(0); 82: } 84: cout << "Would you like to check your Set function? (Y/N): "; 85: cin >> response; cin.ignore(80, '\n'); cout << endl; 86: if (response == 'Y' || response == 'y') 87: { 88: Fraction fTest2; 89: fTest2.Set(1,0); 90: cout << "Fraction value is: " << fTest2 << endl; 91: cout << fTest2 << endl; 92: Pause(0); 93: } 96: testfracText.DisplayItem("Test Info: Part 2"); 97: cout << endl; 99: cout << "And here are the corresponding values " 100: << "according to *your* Fraction class: " << endl; 102: Fraction f11(3,4), f12(-3,-4), f13(15,20), f14(-9,-12); 103: cout << f11 << " " << f12 << " " << f13 << " " << f14 << endl; 105: Fraction f21(3,1), f22(3); 106: cout << f21 << " " << f22 << endl; 108: Fraction f31(-3,1), f32(-3); 109: cout << f31 << " " << f32 << endl; 111: Fraction f4; 112: cout << f4 << endl; 114: Fraction f51, f52, f53, f54; 115: f51.Set(3,4); f52.Set(-3,-4); f53.Set(15,20); f54.Set(-9,-12); 116: cout << f51 << " " << f52 << " " << f53 << " " << f54 << endl; 118: Fraction f61, f62; 119: f61.Set(3,1); f62.Set(3); 120: cout << f61 << " " << f62 << endl; 122: Fraction f71(-3,1), f72(-3); 123: cout << f71 << " " << f72 << endl; 125: Fraction f8; 126: f8.Set(); // Note that Set called with no parameters *requires* 127: // the parentheses, *unlike* the constructor with no 128: // parameters. Compare the declaration of f4 above. 129: cout << f8 << endl; 130: Pause(0); 133: testfracText.DisplayItem("Test Info: Part 3"); 134: Fraction g11, g12, g13, g14, g21, g31; 135: cin >> g11 >> g12 >> g13 >> g14 >> g21 >> g31; 136: cin.ignore(80, '\n'); cout << endl; 139: testfracText.DisplayItem("Test Info: Part 4"); 140: cout << "And here are the actual values as read in " 141: << "and then displayed by your program: " << endl; 142: cout << g11 << " " << g12 << " " << g13 << " " << g14 << " " 143: << g21 << " " << g31 << " " << endl; 144: Pause(0); 145: }