import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * Testet, ob die Auswertung der Binärbäume korrekt funktioniert.
 *
 * @author  Rainer Helfrich
 * @version November 2020
 */
public class AuswertungsTest
{
    @Test
    public void test1()
    {
        testAusfuehren("2*3+4*5", 26);
    }
    
    @Test
    public void test2()
    {
        testAusfuehren("(12/6)/2", 1);
    }
    
    @Test
    public void test3()
    {
        testAusfuehren("12/(6/2)", 4);
    }
    
    @Test
    public void test4()
    {
        testAusfuehren("(2+3)*(4+5)", 45);
    }
    
    @Test
    public void test5()
    {
        testAusfuehren("3/2+9/(3+1)", 3);
    }
    
    @Test
    public void test6()
    {
        testAusfuehren("100/5/(9-8)", 20);
    }
    
    @Test
    public void test7()
    {
        testAusfuehren("1*2-3*4+(5*6)-7*8", -36);
    }
    
    @Test
    public void test8()
    {
        testAusfuehren("(1*2+3*4)*((5*6)-7*(89/10))", -364);
    }
    
    private void testAusfuehren(String term, int erwartet)
    {
        try
        {
            Binaerbaum<Symbol> b = TermParser.parse(term);
            TermAuswerter t = new TermAuswerter();
            int ergebnis = t.auswerten(b);
            assertEquals(erwartet, ergebnis);
        }
        catch(Exception x)
        {
            assertTrue(x.getMessage(), false);
        }
    }

}
