### Question:
FullyBoundNullaryFunction implements NullaryFunction<T> { @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof FullyBoundNullaryFunction<?>)) { return false; } FullyBoundNullaryFunction<?> that = (FullyBoundNullaryFunction<?>) obj; return function.equals(that.function) && (null == left ? null == that.left : left.equals(that.left)) && (null == right ? null == that.right : right.equals(that.right)); } @SuppressWarnings("unchecked") <L, R> FullyBoundNullaryFunction(
            BinaryFunction<? super L, ? super R, ? extends T> function,
            L left, R right); T evaluate(); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString(); static FullyBoundNullaryFunction<T> bind(
            BinaryFunction<? super L, ? super R, ? extends T> function, L left, R right);  }### Answer:
@Test public void testEquals() throws Exception { NullaryFunction<Object> f = new FullyBoundNullaryFunction<Object>(RightIdentity.FUNCTION, null, "xyzzy"); assertEquals(f, f); assertObjectsAreEqual(f, new FullyBoundNullaryFunction<Object>(RightIdentity.FUNCTION, null, "xyzzy")); assertObjectsAreEqual(new FullyBoundNullaryFunction<Object>(RightIdentity.FUNCTION, "bar", "xyzzy"), new FullyBoundNullaryFunction<Object>(RightIdentity.FUNCTION, "bar", "xyzzy")); assertObjectsAreEqual(new FullyBoundNullaryFunction<Object>(RightIdentity.FUNCTION, "bar", null), new FullyBoundNullaryFunction<Object>(RightIdentity.FUNCTION, "bar", null)); assertObjectsAreNotEqual(f, Constant.of("xyzzy")); assertObjectsAreNotEqual(f, new FullyBoundNullaryFunction<Object>(LeftIdentity.FUNCTION, null, "xyzzy")); assertObjectsAreNotEqual(f, new FullyBoundNullaryFunction<Object>(RightIdentity.FUNCTION, "bar", "xyzzy")); assertObjectsAreNotEqual(f, new FullyBoundNullaryFunction<Object>(RightIdentity.FUNCTION, null, "bar")); assertObjectsAreNotEqual(f, new FullyBoundNullaryFunction<Object>(RightIdentity.FUNCTION, null, null)); assertObjectsAreNotEqual(new FullyBoundNullaryFunction<Object>(RightIdentity.FUNCTION, "xyzzy", "bar"), new FullyBoundNullaryFunction<Object>(RightIdentity.FUNCTION, null, "bar")); assertObjectsAreNotEqual(new FullyBoundNullaryFunction<Object>(RightIdentity.FUNCTION, "xyzzy", "bar"), new FullyBoundNullaryFunction<Object>(RightIdentity.FUNCTION, "bar", "bar")); assertTrue(!f.equals(null)); }