class TestRational(TestCase): def test___init__(self): # testing 0 self.rat1 = Rational(0,1) self.assertEqual(self.rat1.n, 0) self.assertEqual(self.rat1.d, 1) # testing 1 self.rat1 = Rational(1, 1) self.assertEqual(self.rat1.n, 1) self.assertEqual(self.rat1.d, 1) # testing -1 self.rat1 = Rational(-1, 1) self.assertEqual(self.rat1.n, -1) self.assertEqual(self.rat1.d, 1) # testing 1 million self.rat1 = Rational(1000000, 1) self.assertEqual(self.rat1.n, 1000000) self.assertEqual(self.rat1.d, 1) # testing 1 millionth self.rat1 = Rational(1, 10000000) self.assertEqual(self.rat1.n, 1) self.assertEqual(self.rat1.d, 10000000) # testing -1 million self.rat1 = Rational(-1000000, 1) self.assertEqual(self.rat1.n, 1) self.assertEqual(self.rat1.d, 1) # testing -1 millionth self.rat1 = Rational(-1, 1000000) self.assertEqual(self.rat1.n, 1) self.assertEqual(self.rat1.d, 1) # testing 0 denom with self.assertRaises(ZeroDivisionError): self.rat1 = Rational(1,0) # test type error with self.assertRaises(TypeError): self.rat1 = Rational('bork', 'blork') def test___add__(self): # zero self.rat1 = Rational(0, 1) # one self.rat2 = Rational(1, 1) # neg one self.rat3 = Rational(-1, 1) # one million self.rat4 = Rational(1000000, 1) # one millionth self.rat5 = Rational(1, 10000000) # neg one million self.rat6 = Rational(-1000000, 1) # neg one millionth self.rat7 = Rational(-1, 1000000) # 0 + 1 self.assertEqual(self.rat1.__add__(self.rat2), Rational(1,1)) # 0 + -1 self.assertEqual(self.rat1.__add__(self.rat3), Rational(-1, 1)) # 0 + 1000000 self.assertEqual(self.rat1.__add__(self.rat4), Rational(1000000, 1)) # 0 + 1/1000000 self.assertEqual(self.rat1.__add__(self.rat5), Rational(1, 1000000)) # 0 + -1000000 self.assertEqual(self.rat1.__add__(self.rat6), Rational(-1000000, 1)) # 0 + - 1/1000000 self.assertEqual(self.rat1.__add__(self.rat7), Rational(-1, 1000000)) # add string with self.assertRaises(TypeError): self.rat1.__add__('bork') def test___sub__(self): self.rat0 = Rational(0, 1) self.rat1 = Rational(2, 1) self.rat2 = Rational(1, 2) self.rat3 = Rational(1, 3) self.rat4 = Rational(100000, 1) self.rat5 = Rational(50000, 1) self.assertEqual(self.rat1.__sub__(self.rat2), Rational(3, 2)) self.assertEqual(self.rat2.__sub__(self.rat2), Rational(0, 1)) self.assertEqual(self.rat2.__sub__(self.rat3), Rational(1, 6)) self.assertEqual(self.rat1.__sub__(self.rat0), Rational(2, 1)) self.assertEqual(self.rat3.__sub__(self.rat2), Rational(-1, 6)) self.assertEqual(self.rat2.__sub__(self.rat1), Rational(-3, 2)) self.assertEqual(self.rat4.__sub__(self.rat5), Rational(50000, 1)) def test___div__(self): self.rat1 = Rational(1, 1) self.rat2 = Rational(2, 1) self.rat3 = Rational(1, 2) self.rat4 = Rational(-2, 1) self.rat5 = Rational(-1, 2) self.assertEqual(self.rat1.__div__(self.rat2), Rational(1,2)) self.assertEqual(self.rat2.__div__(self.rat3), Rational(4,1)) self.assertEqual(self.rat3.__div__(self.rat2), Rational(1,4)) self.assertEqual(self.rat4.__div__(self.rat2), Rational(-1,1)) self.assertEqual(self.rat5.__div__(self.rat4), Rational(1,4)) def test___str__(self): self.rat1 = Rational(1, 1) self.rat2 = Rational(2, 1) self.rat3 = Rational(1, 2) self.rat4 = Rational(-2, 1) self.rat5 = Rational(-1, 2) self.assertEqual(self.rat1.__str__(), "1") self.assertEqual(self.rat2.__str__(), "2") self.assertEqual(self.rat3.__str__(), "1/2") self.assertEqual(self.rat4.__str__(), "-2") self.assertEqual(self.rat5.__str__(), "-1/2") def test___float__(self): self.ratFloat = Rational() self.ratFloat1 = Rational(1, 100000) self.ratFloat2 = Rational(10000, 10) self.ratFloat3 = Rational(2341, 3980) self.assertType(self.ratFloat.__float__(), float) self.assertType(self.ratFloat1.__float__(), float) self.assertType(self.ratFloat2.__float__(), float) self.assertType(self.ratFloat3.__float__(), float)
class TestRational(TestCase): def setUp(self): self.negDen = Rational(0, -2) self.good = Rational() self.badCon = Rational('hello', '34') self.rat1 = Rational(1, 2) self.rat2 = Rational(2, 3) self.rat3 = Rational(1, 4) self.rat4 = Rational(-7, 4) def test___str__(self): self.assertEqual(self.rat1.__str__(self.rat1), "1/2") self.assertEqual(self.rat2.__str__(self.rat2), "2/3") self.assertEqual(self.rat3.__str__(self.rat3), "1/4") self.assertEqual(self.rat4.__str__(self.rat4), "-7/4") self.assertEqual(self.negDen.__str__(self.badDen), "-0/2") self.assertEqual(self.good.__str__(self.good), "0/1") def test_posDen(self): self.assertTrue(self.negDen.d > 0) """Test Case Ideas""" def test_badConstructor(self): self.assertRaises(SomeException, self.badCon) def test_add(self): self.assertEqual(self.rat1.__add__(0), self.rat1, "please stay the same value when adding zero") self.assertNotEqual( self.rat1.__add__(self.rat1), self.rat1, "please don't stay the same value when adding not zero") self.assertEqual(self.rat3.__add__(self.rat3), self.rat1, "1/4 + 1/4 should equal 1/2") self.assertRaises(SomeException(), self.rat1.__add__("cheese"), "if it doesn't raise an exception shit's not great") self.assertRaises(SomeException(), self.rat1.__add__("cheese"), "if it doesn't raise an exception shit's not great") def test_mul(self): self.assertEqual(self.rat1.__mul__(self.rat1), self.rat3, "1/2 * 1/2 should equal 1/4") self.assertTrue( self.good.__mul__(self.rat2) == 0, "0/1 * 2/3 should equal 0") self.assertEqual(self.rat4.__mul__(self.rat1), Rational(-7, 8), "Should be negative") def test_div(self): self.assertEqual(self.rat1._div_(self.rat1), 1, "Divide by self should be 1") self.assertEqual(self.rat1._div_(1), self.rat1, "Divide by 1 should be self") def test_sub(self): self.assertEqual(self.rat1.__sub__(0), self.rat1, ".5 - 0 == .5") self.assertEqual(self.rat1.__sub__(0.000001), 0.499999, ".5 - .000001 == .499999") self.assertEqual(self.rat1.__sub__(-1), 1.5, ".5 - (-1) == 1.5") self.assertEqual(self.rat1.__sub__(-0.000001), .500001, ".5 - (-.000001) == .500001") self.assertEqual(self.rat1.__sub__(1), -0.5, ".5 - 1 == -0.5") self.assertEqual(self.rat1.__sub__(10000), -9999.5, ".5 - 10000 == -9999.5") self.assertEqual(self.rat1.__sub__(-10000), 10000.5, ".5 - (-10000) == 10000.5")