@Test
  public void testEquals() throws Exception {
    UnaryOr<Object> p = new UnaryOr<Object>();
    assertEquals(p, p);

    UnaryOr<Object> q = new UnaryOr<Object>();
    assertObjectsAreEqual(p, q);

    UnaryAnd<Object> r = new UnaryAnd<Object>();
    assertObjectsAreNotEqual(p, r);

    for (int i = 0; i < 3; i++) {
      p.or(Constant.truePredicate());
      assertObjectsAreNotEqual(p, q);
      q.or(Constant.truePredicate());
      assertObjectsAreEqual(p, q);
      r.and(Constant.truePredicate());
      assertObjectsAreNotEqual(p, r);

      p.or(new UnaryOr<Object>(Constant.truePredicate(), Constant.falsePredicate()));
      assertObjectsAreNotEqual(p, q);
      q.or(new UnaryOr<Object>(Constant.truePredicate(), Constant.falsePredicate()));
      assertObjectsAreEqual(p, q);
      r.and(new UnaryOr<Object>(Constant.truePredicate(), Constant.falsePredicate()));
      assertObjectsAreNotEqual(p, r);
    }

    assertObjectsAreNotEqual(p, Constant.truePredicate());
    UnaryOr<Object> s = new UnaryOr<Object>();
    s.or(Constant.truePredicate());
    s.or(new UnaryOr<Object>(Constant.truePredicate(), Constant.falsePredicate()));
    assertObjectsAreEqual(s, new UnaryOr<Object>(s.getUnaryPredicateList()));
  }