package nl.utwente.viskell.haskell.expr;
import nl.utwente.viskell.ghcj.HaskellException;
import nl.utwente.viskell.haskell.env.Environment;
import nl.utwente.viskell.haskell.type.Type;
import nl.utwente.viskell.haskell.type.TypeScope;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class IdentTest {
private Type alpha;
private Environment env;
@Before
public final void setUp() {
this.env = new Environment();
TypeScope scope = new TypeScope();
this.alpha = scope.getVar("a");
this.env.addTestSignature("id", "a -> a");
}
@Test
public final void testAnalyze() throws HaskellException {
assertEquals(Type.fun(this.alpha, this.alpha).prettyPrint(), this.env.useFun("id").inferType().prettyPrint());
}
@Test
public final void testToHaskell() throws HaskellException {
assertEquals("id", this.env.useFun("id").toHaskell());
}
@Test(expected=HaskellException.class)
public final void testIncorrectName() throws HaskellException {
new Environment().useFun("id");
}
}