def test_simple_fraction(self):
        ex = Expression(None)
        s1 = Segment(1,'4', 'num', [])
        s2 = Segment(2,'2', 'num', [])
        f1 = Fraction(3, [s1], [s2], [])

        ex.groups = [f1]
        self.assertEqual('\\frac{4}{2}', ex.to_latex())
    def test_simple_power(self):
        ex = Expression(None)
        s1 = Segment(1,'4', 'num', [])
        s2 = Segment(2,'2', 'num', [])
        p1 = Power(3, [s1], [s2])

        ex.groups = [p1]
        self.assertEqual('4^{2}', ex.to_latex())
    def test_another_simple_expresssion(self):
        ex = Expression(None)
        s1 = Segment(1,'4', 'num', [])
        s2 = Segment(2,'-', 'num', [])
        s3 = Segment(3,'1', 'num', [])
        s4 = Segment(4,'=', 'operator', [])
        s5 = Segment(5,'3', 'num', [])

        ex.groups = [s1, s2, s3, s4, s5]
        
        self.assertEqual('4-1=3', ex.to_latex())
    def test_recursive_exponent(self):
        ex = Expression(None)
        s1 = Segment(1,'2', 'num', [])
        s2 = Segment(2,'2', 'num', [])
        s3 = Segment(3,'2', 'num', [])
        s4 = Segment(4,'x', 'num', [])
        p1 = Power(5, [s3], [s4])
        p2 = Power(6, [s2], [p1])
        p3 = Power(7, [s1], [p2])

        ex.groups = [p3]
        self.assertEqual('2^{2^{2^{x}}}', ex.to_latex())
    def test_recursive_fraction(self):
        ex = Expression(None)
        s1 = Segment(1,'1', 'num', [])
        s2 = Segment(2,'2', 'num', [])
        s3 = Segment(3,'3', 'num', [])
        s4 = Segment(4,'4', 'num', [])
        f1 = Fraction(5, [s1], [s2], [])
        f2 = Fraction(6, [f1], [s3], [])
        f3 = Fraction(7, [f2], [s4], [])

        ex.groups = [f3]
        self.assertEqual('\\frac{\\frac{\\frac{1}{2}}{3}}{4}', ex.to_latex())
    def test_simple_multigroup(self):
        ex = Expression(None)
        s1 = Segment(1,'5', 'num', [])
        r1 = Root(2, [s1], [])

        s2 = Segment(3,'2', 'num', [])
        s3 = Segment(4,'2', 'num', [])
        p1 = Power(5, [s2], [s3])

        f1 = Fraction(6, [r1], [p1], [])

        ex.groups = [f1]
        self.assertEqual('\\frac{\\sqrt{5}}{2^{2}}', ex.to_latex())
    def test_simple_root(self):
        ex = Expression(None)
        s1 = Segment(2,'3', 'num', [])
        r1 = Root(3, [s1], [])

        ex.groups = [r1]
        self.assertEqual('\\sqrt{3}', ex.to_latex())
        pass
    def test_recursive_root(self):
        ex = Expression(None)
        s1 = Segment(1,'3', 'num', [])
        r1 = Root(2, [s1], [])
        r2 = Root(3, [r1], [])
        r3 = Root(4, [r2], [])

        ex.groups = [r3]
        self.assertEqual('\\sqrt{\\sqrt{\\sqrt{3}}}', ex.to_latex())
    def test_advanced_multigroup(self):
        ex = Expression(None)
        s1 = Segment(1,'3', 'num', [])
        s2 = Segment(2,'+', 'operator', [])
        s3 = Segment(3,'2', 'num', [])
        r1 = Root(4, [s1, s2, s3], [])

        s4 = Segment(5,'5', 'num', [])
        s5 = Segment(6,'3', 'num', [])
        s6 = Segment(7,'-', 'operator', [])
        s7 = Segment(8,'2', 'num', [])
        f1 = Fraction(9, [s4], [s5, s6, s7], [])
        f2 = Fraction(10, [r1], [f1], [])

        s8 = Segment(11,'+', 'operator', [])
        s9 = Segment(12,'3', 'num', [])
        s10 = Segment(13,'x', 'var', [])
        s11 = Segment(14,'2', 'num', [])
        f1 = Fraction(6, [s10], [s11], [])
        p1 = Power(5, [s9], [f1])

        ex.groups = [f2, s8, p1]
        self.assertEqual('\\frac{\\sqrt{3+2}}{\\frac{5}{3-2}}+3^{\\frac{x}{2}}', ex.to_latex())