def test_parse_from_string_is_correct(self):
        with self.subTest('Coeff is 0'):
            s = '0'
            self.assertEqual(Term.parse_from_string(s),
                             Term(coeff=0, variable=None, power=0))

        with self.subTest('Coeff is 1'):
            s = 'x^2'
            self.assertEqual(Term.parse_from_string(s),
                             Term(coeff=1, variable='x', power=2))

        with self.subTest('Power is 0'):
            s = '2'
            self.assertEqual(Term.parse_from_string(s),
                             Term(coeff=2, variable=None, power=0))

        with self.subTest('Power is 1'):
            s = '2*x'
            self.assertEqual(Term.parse_from_string(s),
                             Term(coeff=2, variable='x', power=1))

        with self.subTest('Coeff is 1 and power is 1'):
            s = 'x'
            self.assertEqual(Term.parse_from_string(s),
                             Term(coeff=1, variable='x', power=1))

        with self.subTest(
                'Coeff is greater than 1 and power is greater than 1'):
            s = '2*x^2'
            self.assertEqual(Term.parse_from_string(s),
                             Term(coeff=2, variable='x', power=2))
    def parse_from_string(cls, s):
        unparsed_terms = s.split('+')

        terms = [Term.parse_from_string(t) for t in unparsed_terms]

        return cls(terms)