Question: #include #include #include #include #include #include exact_number.h using namespace std; string error_msg(string rand, ExactNumber& n, double ans) { ostringstream msg; msg < <

#include

#include

#include

#include

#include

#include "exact_number.h"

using namespace std;

string error_msg(string rand, ExactNumber& n, double ans)

{

ostringstream msg;

msg << " " << rand << " failed with " << static_cast<double>(n) << "... expecting " << ans;

return msg.str();

}

string error_msg(string rand, ExactNumber& n1, ExactNumber& n2, bool ans)

{

ostringstream msg;

msg << " " << rand << " failed with " << ans << "... expecting " << !ans

<< " => " << n1 << " : " << n2 << endl;

return msg.str();

}

int main()

{

cout << "Testing ExactNumber..." << endl << endl;

cout << "Manual check:";

cout << " operator<< should print an ExactNumber as \"(a/b)\"" << endl;

ExactNumber e1; // default constructor

cout << " manual check for (0/1) : " << e1 << endl;

ExactNumber e2(3); // memberwise-copy constructor

cout << " manual check for (3/1) : " << e2 << endl;

ExactNumber e3(5, 2); // memberwise-copy constructor

cout << " manual check for (5/2) : " << e3 << endl;

ExactNumber e4(e3); // copy constructor

cout << " manual check for (5/2) : " << e4 << endl;

ExactNumber e5(10, 5); // simplification

cout << " manual check for (2/1) : " << e5 << endl;

cout << endl;

cout << "Automatic check" << endl;

cout.precision(numeric_limits<double>::digits10);

unsigned int num_tests = 0;

unsigned int num_failed = 0;

ExactNumber n1(2, 4), n2(5, 3), n3(5, 6), n4;

// =

num_tests++;

n4 = n1;

try { if (static_cast<double>(n4) != 1.0/2.0) throw error_msg("operator=", n4, 1.0/2.0); }

catch(string m) { cout << m << endl; num_failed++; }

// +=, -=, *=, /=

num_tests++;

n4 += n2;

try { if (static_cast<double>(n4) != 13.0/6.0) throw error_msg("opeator=", n4, 13.0/6.0); }

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

n4 -= n2;

try { if (static_cast<double>(n4) != 1.0/2.0) throw error_msg("operator-=", n4, 1.0/2.0); }

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

n4 *= n2;

try { if (static_cast<double>(n4) != 5.0/6.0) throw error_msg("operator*=", n4, 5.0/6.0); }

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

n4 /= n2;

try { if (static_cast<double>(n4) != 1.0/2.0) throw error_msg("operator/=", n4, 1.0/2.0); }

catch(string m) { cout << m << endl; num_failed++; }

// +, -, *, /

num_tests++;

n4 = n1 + n2;

try { if (static_cast<double>(n4) != 13.0/6.0) throw error_msg("operator+", n4, 13.0/6.0); }

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

n4 = n1 - n2;

try { if (static_cast<double>(n4) != -7.0/6.0) throw error_msg("operator-", n4, -7.0/6.0); }

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

n4 = n1 * n2;

try { if (static_cast<double>(n4) != 5.0/6.0) throw error_msg("operator*", n4, 5.0/6.0); }

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

n4 = n1 / n2;

try { if (static_cast<double>(n4) != 3.0/10.0) throw error_msg("operator/", n4, 3.0/10.0); }

catch(string m) { cout << m << endl; num_failed++; }

// ==, !=

num_tests++;

n4 = n1 * n2;

bool result = n4 == n3;

try { if (result != true) throw error_msg("operator==", n4, n3, result); }

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

result = n1 == n2;

try { if(result != false) throw error_msg("operator==", n4, n1, result); }

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

result = n1 != n2;

try { if (result != true) throw error_msg("operator!=", n1, n2, result); }

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

result = n4 != n3;

try { if(result != false) throw error_msg("operator!=", n1, n2, result); }

catch(string m) { cout << m << endl; num_failed++; }

// <, >, <=, >=

num_tests++;

result = n1 < n2;

try { if (result != true) throw error_msg("operator<", n1, n2, result); }

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

result = n2 > n3;

try { if (result != true) throw error_msg("operator>", n2, n3, result); }

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

result = n1 <= n2;

try { if (result != true) throw error_msg("operator<=", n1, n2, result); }

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

result = n2 <= n2;

try { if (result != true) throw error_msg("operator<=", n2, n2, result); }

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

result = n2 >= n3;

try { if (result != true) throw error_msg("operator>=", n2, n3, result); }

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

result = n2 >= n2;

try { if (result != true) throw error_msg("operator>=", n2, n2, result); }

catch(string m) { cout << m << endl; num_failed++; }

// combination

num_tests++;

n4 = (n1 - n2) * n3 + n1;

try {

if (static_cast<double>(n4) != ExactNumber(-17, 36))

throw error_msg("(n1 - n2) * n3 + n1", n4, -17.0/36.0);

}

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

n4 = n1 * n1 / n1 / n1;

try {

if (static_cast<double>(n4) != ExactNumber(1, 1))

throw error_msg("n1 * n1 / n1 / n1", n4, 1.0/1.0);

}

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

n4 = n1 * n3 / n2 + n3 / n1 * n2;

try {

if (static_cast<double>(n4) != ExactNumber(109, 36))

throw error_msg("n1 * n3 / n2 + n3 / n1 * n2", n4, 109.0/36.0);

}

catch(string m) { cout << m << endl; num_failed++; }

num_tests++;

n4 = (n1 + n2) / (n3 * (n1 - n2) / (n3 + n1 * n2));

try {

if(static_cast<double>(n4) != ExactNumber(-26, 7))

throw error_msg("(n1 + n2) / (n3 * (n1 - n2) / (n3 + n1 * n2))", n4, -26.0/7.0);

}

catch(string m) { cout << m << endl; num_failed++; }

// operator* involving 0

ExactNumber n5(11, 3), n6(0, 5);

num_tests++;

n4 = n5 * n6;

try {

if (static_cast<double>(n4) != ExactNumber(0, 1))

throw error_msg("operator* involving 0", n4, 0.0/1.0);

}

catch(string m) { cout << m << endl; num_failed++; }

// operator/ involving 0

num_tests++;

n4 = n5 / n6;

try {

if(static_cast<double>(n4) != ExactNumber(1, 0))

throw error_msg("operator/ involving 0", n4, 0.0/1.0);

}

catch(string m) { cout << m << endl; num_failed++; }

/* Do not modify the code below */

if (num_failed == 0)

cout << "passed all " << num_tests << " default test cases" << endl;

else

cout << "failed " << num_failed << " default test cases out of " << num_tests << " default test cases" << endl;

cout << endl;

/********************************************************/

/* */

/* add your test cases here */

/* */

/********************************************************/

return 0;

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!