// test read -- divide by zero exeption TEST_F(RationalTest, TestReadDivideByZeroException) { Rational actual; Rational actual2; std::stringstream ss; std::stringstream ss2; ss.str("4/0"); ss2.str("4/0"); try { actual.read(ss); FAIL(); } catch (DivideByZeroException &ex) { std::cout << ex << std::endl; } catch (std::exception) { FAIL(); } try { ss2 >> actual2; FAIL(); } catch (DivideByZeroException &ex) { std::cout << ex << std::endl; } catch (std::exception) { FAIL(); } }
// test read -- invalid format exception TEST_F(RationalTest, TestReadInvalidFormatException) { Rational actual; Rational actual2; std::stringstream ss; std::stringstream ss2; std::string expected = "4/"; // set to an invalid format ss.str(expected); ss2.str(expected); try { actual.read(ss); FAIL(); } catch (InvalidFormatException &ex) { std::cout << ex << std::endl; } catch (std::exception) { FAIL(); } try { ss2 >> actual2; FAIL(); } catch (InvalidFormatException &ex) { std::cout << ex << std::endl; } catch (std::exception) { FAIL(); } expected = "12."; ss.clear(); ss.str(expected); ss2.clear(); ss2.str(expected); try { actual.read(ss); FAIL(); } catch (InvalidFormatException &ex) { std::cout << ex << std::endl; } catch (std::exception) { FAIL(); } try { ss2 >> actual2; FAIL(); } catch (InvalidFormatException &ex) { std::cout << ex << std::endl; } catch (std::exception) { FAIL(); } expected = "12/12/43"; ss.clear(); ss.str(expected); ss2.clear(); ss2.str(expected); try { actual.read(ss); FAIL(); } catch (InvalidFormatException &ex) { std::cout << ex << std::endl; } catch (std::exception) { FAIL(); } try { ss2 >> actual2; FAIL(); } catch (InvalidFormatException &ex) { std::cout << ex << std::endl; } catch (std::exception) { FAIL(); } expected = "abcd"; ss.clear(); ss.str(expected); ss2.clear(); ss2.str(expected); try { actual.read(ss); FAIL(); } catch (InvalidFormatException &ex) { std::cout << ex << std::endl; } catch (std::exception) { FAIL(); } try { ss2 >> actual2; FAIL(); } catch (InvalidFormatException &ex) { std::cout << ex << std::endl; } catch (std::exception) { FAIL(); } expected = ""; ss.clear(); ss.str(expected); ss2.clear(); ss2.str(expected); try { actual.read(ss); FAIL(); } catch (InvalidFormatException &ex) { std::cout << ex << std::endl; } catch (std::exception) { FAIL(); } try { ss2 >> actual2; FAIL(); } catch (InvalidFormatException &ex) { std::cout << ex << std::endl; } catch (std::exception) { FAIL(); } expected = "12/3 12"; ss.clear(); ss.str(expected); ss2.clear(); ss2.str(expected); try { actual.read(ss); FAIL(); } catch (InvalidFormatException &ex) { std::cout << ex << std::endl; } catch (std::exception) { FAIL(); } try { ss2 >> actual2; FAIL(); } catch (InvalidFormatException &ex) { std::cout << ex << std::endl; } catch (std::exception) { FAIL(); } }
// test read TEST_F(RationalTest, TestRead) { Rational actual; Rational actual2; std::stringstream ss; std::stringstream ss2; ss.str("4/3"); ss2.str("4/3"); actual.read(ss); ss2 >> actual2; EXPECT_EQ(Rational(4, 3), actual); EXPECT_EQ(Rational(4, 3), actual2); ss.clear(); ss.str("30"); ss2.clear(); ss2.str("30"); actual.read(ss); ss2 >> actual2; EXPECT_EQ(Rational(30), actual); EXPECT_EQ(Rational(30), actual2); ss.clear(); ss.str("-30/60"); ss2.clear(); ss2.str("-30/60"); actual.read(ss); ss2 >> actual2; EXPECT_EQ(half.negate(), actual); EXPECT_EQ(half.negate(), actual2); ss.clear(); ss.str("0.75"); ss2.clear(); ss2.str("0.75"); actual.read(ss); ss2 >> actual2; EXPECT_EQ(Rational(3,4), actual); EXPECT_EQ(Rational(3,4), actual2); ss.clear(); ss.str("12.5/2.5"); // this is a valid rational number -- comes out to 5 ss2.clear(); ss2.str("12.5/2.5"); actual.read(ss); ss2 >> actual2; EXPECT_EQ(Rational(5), actual); EXPECT_EQ(Rational(5), actual2); // allow trailing spaces ss.clear(); ss.str("12/3 "); ss2.clear(); ss2.str("12/3 "); actual.read(ss); ss2 >> actual2; EXPECT_EQ(Rational(4), actual); EXPECT_EQ(Rational(4), actual2); }