public final void testTrueNegationSimplification() {
    True trueExp = new True();
    trueExp.type = BooleanType.instance;
    Not not = new Not(trueExp);
    not.type = BooleanType.instance;

    expressionSimplificationTester(not, False.class, BooleanType.instance, 0, false);
  }
  public final void testFalseNegationSimplification() {
    False falseExp = new False();
    falseExp.type = BooleanType.instance;
    Not not = new Not(falseExp);
    not.type = BooleanType.instance;

    expressionSimplificationTester(not, True.class, BooleanType.instance, 0, false);
  }
  public final void testEvenConstantNegationSimplification() {
    False falseExp = new False();
    falseExp.type = BooleanType.instance;
    Not not1 = new Not(falseExp);
    not1.type = BooleanType.instance;
    Not not2 = new Not(not1);
    not2.type = BooleanType.instance;

    expressionSimplificationTester(not2, False.class, BooleanType.instance, 0, false);
  }
  public final void testEvenExpressionNegationSimplification() {
    MethodAccess callExp = new MethodAccess();
    callExp.expression = new This();
    callExp.type = BooleanType.instance;
    Not not1 = new Not(callExp);
    not1.type = BooleanType.instance;
    Not not2 = new Not(not1);
    not2.type = BooleanType.instance;

    expressionSimplificationTester(not2, MethodAccess.class, BooleanType.instance, 0, false);
  }
  public final void testOddExpressionNegationSimplification() {
    MethodAccess callExp = new MethodAccess();
    callExp.expression = new This();
    callExp.type = BooleanType.instance;
    Not not1 = new Not(callExp);
    not1.type = BooleanType.instance;
    Not not2 = new Not(not1);
    not2.type = BooleanType.instance;
    Not not3 = new Not(not2);
    not3.type = BooleanType.instance;

    Expression resultExp =
        expressionSimplificationTester(not3, Not.class, BooleanType.instance, 0, false);

    assertEquals(((Not) resultExp).expression.getClass(), MethodAccess.class);
  }