def __add__(self, other): if not isinstance(other, (AlgebraicFraction, Polynomial)): raise TypeError("Only sum between AlgebraicFraction or Polynomial " "instances is allowed.") elif isinstance(other, Polynomial): other = AlgebraicFraction(other) multiple = lcm(self._denominator, other._denominator) num1 = self._numerator * multiple / self._denominator num2 = other._numerator * multiple / other._denominator return AlgebraicFraction(num1 + num2, multiple)
def test_lcm(self): self.assertEqual(lcm(0, 0), 0) self.assertEqual(lcm(5, 0), 0) self.assertEqual(lcm(0, 5), 0) self.assertEqual(lcm(5, 5), 5) self.assertEqual(lcm(5, 1), 5) self.assertEqual(lcm(5, 0), 0) self.assertEqual(lcm(33, 121), 363) self.assertEqual(lcm(256, 160), 1280) self.assertEqual(lcm(256, -160), 1280) self.assertEqual(lcm(-256, 160), 1280) self.assertEqual(lcm(-256, -160), 1280) self.assertEqual(lcm(Polynomial("x2 - 2x + 1"), Polynomial("x2 - 3x + 2")), Polynomial("x - 1") ** 2 * "x - 2") self.assertEqual(lcm(Polynomial("120x2y4z7t"), Polynomial("24xy5zhg")), Polynomial("120x2y5z7hgt")) self.assertEqual(lcm(4, Polynomial("2x2 - 2x + 2")), Polynomial("4x2 - 4x + 4")) self.assertEqual(lcm(Polynomial("4"), Polynomial("2x2 - 2x + 2")), Polynomial("4x2 - 4x + 4")) self.assertEqual(lcm(fractions.Fraction(3, 2), fractions.Fraction(21, 6)), fractions.Fraction(21, 2)) self.assertEqual(lcm(1.2, 4.6), fractions.Fraction(138, 5)) self.assertEqual(lcm(1j, 2), 2j) self.assertEqual(lcm(fractions.Fraction(4, 2), 6), 6) self.assertEqual(lcm(2.0, 6), 6) self.assertEqual(lcm(-2.0, 6), 6) self.assertEqual(lcm(fractions.Fraction(4), Polynomial("2x2 - 2x + 2")), Polynomial("4x2 - 4x + 4")) self.assertEqual(lcm(Polynomial("x - 2"), Polynomial("x")), Polynomial("x2 - 2x")) self.assertEqual(lcm(32, 24, 54, 36), 864) self.assertEqual(lcm(*(2 * x for x in range_(10))), 0) self.assertEqual(lcm(*(2 * x for x in range_(1, 10))), 5040) #self.assertEqual(lcm(Polynomial("x - 2") * "x - 1", # Polynomial("x - 1") ** 2, # Polynomial("y") * "x - 1", # Polynomial("x - 1")), # Polynomial("x - 1") ** 3 * "x - 2" * "y") #self.assertEqual(lcm(Polynomial("2x - 4") * "x - 1", # Polynomial("x - 1") ** 2 * 6, # Polynomial("4y") * "x", # Polynomial("2x - 2"), # -2, # fractions.Fraction(16, 4), # 8.0, # 16), # Polynomial("x-1") ** 4 * "x-2" * "xy" * 3 * 2 ** 14) self.assertRaises(TypeError, lcm, "3", 6) self.assertRaises(TypeError, lcm, 3, "6") self.assertRaises(TypeError, lcm, [3], "6") self.assertRaises(TypeError, lcm, 3, 6, []) self.assertRaises(TypeError, lcm, 3, 6, 9, 18, "") self.assertRaises(TypeError, lcm, 3) self.assertRaises(TypeError, lcm) self.assertRaises(TypeError, lcm, 3, 6, pippo=3)