package aspectjhw.lambda;
import junit.framework.TestCase;
public class BigStepTest extends TestCase {
    /** Construct this test */
    public BigStepTest(String name) {
        super(name); 
    }
    
    /** run this test */
    public static void main(String[] args) {
        junit.textui.TestRunner.run(BigStepTest.class);
    }
    
    /** Test the evaluate method */
    public void testEvaluate() {
        assertEquals(new Variable("x"), new Variable("x").evaluate());
        assertEquals(
            new Application(new Variable("x"), new Variable("x")),
            new Application(new Variable("x"), new Variable("x")).evaluate());
        assertEquals(
            new Lambda("x", new Variable("x")), new Lambda("x", new Variable("x")).evaluate());
        assertEquals(
            new Variable("z"),
            new Application(new Lambda("x", new Variable("x")),
                            new Variable("z")).evaluate());
        assertEquals(
            new Variable("z"),
            new Application(
                new Application(
                    new Lambda("x", new Variable("x")),
                    new Lambda("x", new Variable("x"))),
                new Variable("z"))
                .evaluate());
        assertEquals(
            new Variable("z"),
            new Application(
                new Application(
                    new Lambda("x", new Variable("x")),
                    new Application(
                        new Lambda("x", new Variable("x")),
                        new Lambda("x", new Variable("x")))),
                new Application(
                    new Application(
                        new Lambda("x", new Variable("x")),
                        new Lambda("x", new Variable("x"))),
                    new Variable("z")))
                .evaluate());
    }
}
