### Question:
FullyBoundNullaryPredicate implements NullaryPredicate { @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof FullyBoundNullaryPredicate)) { return false; } FullyBoundNullaryPredicate that = (FullyBoundNullaryPredicate) obj; return predicate.equals(that.predicate) && (null == left ? null == that.left : left.equals(that.left)) && (null == right ? null == that.right : right.equals(that.right)); } @SuppressWarnings("unchecked") <L, R> FullyBoundNullaryPredicate(BinaryPredicate<? super L, ? super R> predicate, L left, R right); boolean test(); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString(); static FullyBoundNullaryPredicate bind(
            BinaryPredicate<? super L, ? super R> predicate, L left, R right);  }### Answer:
@Test public void testEquals() throws Exception { NullaryPredicate p = new FullyBoundNullaryPredicate(Constant.TRUE, "xyzzy", null); assertEquals(p, p); assertObjectsAreEqual(p, new FullyBoundNullaryPredicate(Constant.TRUE, "xyzzy", null)); assertObjectsAreNotEqual(p, Constant.TRUE); assertObjectsAreNotEqual(p, new FullyBoundNullaryPredicate(Constant.FALSE, "xyzzy", null)); assertObjectsAreNotEqual(p, new FullyBoundNullaryPredicate(Constant.TRUE, "foo", null)); assertObjectsAreNotEqual(p, new FullyBoundNullaryPredicate(Constant.TRUE, null, "xyzzy")); assertObjectsAreNotEqual(new FullyBoundNullaryPredicate(Constant.TRUE, null, "xyzzy"), new FullyBoundNullaryPredicate(Constant.TRUE, null, null)); assertObjectsAreEqual(new FullyBoundNullaryPredicate(Constant.TRUE, "foo", "xyzzy"), new FullyBoundNullaryPredicate(Constant.TRUE, "foo", "xyzzy")); assertTrue(!p.equals(null)); }