/**
   * Create a circuit to getValue (x1 and x2) or x3 and then verify that its result is false for
   * input (false, true, false) and it is true for input (false, false, true).
   */
  public void testX1andX2orX3() {
    BinaryLogicalExpression circuit =
        factory.getBinOperation(
            "or",
            factory.getBinOperation("and", new Constant(false), new Constant(true)),
            new Constant(false));
    Assert.assertFalse(circuit.getValue());

    ((Constant) ((BinaryLogicalExpression) circuit.getLeft()).getRight()).setValue(false);
    ((Constant) circuit.getRight()).setValue(true);

    Assert.assertTrue(circuit.getValue());
  }
  /**
   * Create a circuit to getValue (x1 or not(x1)) and then verify that its result is true for all
   * values of x1.
   */
  public void testAlwaysTrue() {
    BinaryLogicalExpression circuit =
        factory.getBinOperation(
            "or", new Constant(false), factory.getUnaryOperation("not", new Constant(false)));
    Assert.assertTrue(circuit.getValue());

    ((Constant) circuit.getLeft()).setValue(true);
    ((Constant) ((UnaryLogicalExpression) circuit.getRight()).getElement()).setValue(true);

    Assert.assertTrue(circuit.getValue());
  }