ImpliesPredicate val = (ImpliesPredicate)pred;
Assert.assertTrue("Left side is a bool value", val.getLeft() instanceof BooleanValue);
Assert.assertTrue("Right side is a or pred", val.getRight() instanceof OrPredicate);
FreeVars vars = val.getFreeVariables();
Assert.assertEquals("Should only contain three free variables", 3, vars.size());
vars = val.getLeft().getFreeVariables();
Assert.assertEquals("Should only contain one free variables", 1, vars.size());
Assert.assertEquals("c should have a boolean type", "boolean", vars.getType(new SpecVar("c")));
vars = val.getRight().getFreeVariables();
Assert.assertEquals("Should only contain two free variables", 2, vars.size());
Assert.assertEquals("a should have a boolean type", "boolean", vars.getType(new SpecVar("a")));
Assert.assertEquals("b should have a boolean type", "boolean", vars.getType(new SpecVar("b")));
}