Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)