@Test
  public void testFalse() throws Exception {
    assertTrue(!(new UnaryOr<Object>()).test("xyzzy"));
    assertTrue(!(new UnaryOr<Object>(Constant.FALSE)).test("xyzzy"));
    assertTrue(!(new UnaryOr<Object>(Constant.FALSE, Constant.FALSE)).test("xyzzy"));
    assertTrue(
        !(new UnaryOr<Object>(Constant.FALSE, Constant.FALSE, Constant.FALSE)).test("xyzzy"));

    UnaryOr<Object> p = new UnaryOr<Object>(Constant.FALSE);
    assertTrue(!p.test("xyzzy"));
    for (int i = 0; i < 10; i++) {
      p.or(Constant.FALSE);
      assertTrue(!p.test("xyzzy"));
    }

    UnaryOr<Object> q = new UnaryOr<Object>(Constant.FALSE);
    assertTrue(!q.test("xyzzy"));
    for (int i = 0; i < 10; i++) {
      q.or(Constant.FALSE);
      assertTrue(!q.test("xyzzy"));
    }

    UnaryOr<Object> r = new UnaryOr<Object>(p, q);
    assertTrue(!r.test("xyzzy"));
  }
 @Test
 public void testDuplicateAdd() throws Exception {
   UnaryPredicate<Object> p = Constant.TRUE;
   UnaryOr<Object> q = new UnaryOr<Object>(p, p);
   assertTrue(q.test("xyzzy"));
   for (int i = 0; i < 10; i++) {
     q.or(p);
     assertTrue(q.test("xyzzy"));
   }
 }
  @Test
  public void testTrue() throws Exception {
    assertTrue((new UnaryOr<Object>(Constant.TRUE)).test("xyzzy"));
    assertTrue((new UnaryOr<Object>(Constant.FALSE, Constant.TRUE)).test("xyzzy"));
    assertTrue((new UnaryOr<Object>(Constant.FALSE, Constant.FALSE, Constant.TRUE)).test("xyzzy"));

    UnaryOr<Object> p = new UnaryOr<Object>(Constant.TRUE);
    assertTrue(p.test("xyzzy"));
    for (int i = 0; i < 10; i++) {
      p.or(Constant.of(i % 2 == 0));
      assertTrue(p.test("xyzzy"));
    }

    UnaryOr<Object> q = new UnaryOr<Object>(Constant.TRUE);
    assertTrue(q.test("xyzzy"));
    for (int i = 0; i < 10; i++) {
      q.or(Constant.of(i % 2 == 0));
      assertTrue(q.test("xyzzy"));
    }

    UnaryOr<Object> r = new UnaryOr<Object>(p, q);
    assertTrue(r.test("xyzzy"));
  }