### Question:
BinaryCompositeBinaryFunction implements BinaryFunction<L, R, T> { public final T evaluate(L left, R right) { return helper.evaluate(left, right); } <G, H> BinaryCompositeBinaryFunction(BinaryFunction<? super G, ? super H, ? extends T> f,
            BinaryFunction<? super L, ? super R, ? extends G> g, BinaryFunction<? super L, ? super R, ? extends H> h); final T evaluate(L left, R right); @Override final boolean equals(Object obj); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void testEvaluateRaw() throws Exception { BinaryFunction<Object, Object, Object> f = new BinaryCompositeBinaryFunction<Object, Object, Object>( RightIdentity.FUNCTION, Constant.of("K"), RightIdentity.FUNCTION); assertEquals("right",f.evaluate("left","right")); assertNull("right",f.evaluate("left",null)); assertEquals("right",f.evaluate(null,"right")); }
@Test public void testEvaluate() throws Exception { BinaryFunction<String, String, String> f = new BinaryCompositeBinaryFunction<String, String, String>( RightIdentity.<String, String>function(), Constant.of("K"), RightIdentity.<String, String>function()); assertEquals("right",f.evaluate("left","right")); assertNull("right",f.evaluate("left",null)); assertEquals("right",f.evaluate(null,"right")); }
@Test public void testEvaluateObject() throws Exception { BinaryFunction<Object, Object, Object> f = new BinaryCompositeBinaryFunction<Object, Object, Object>( RightIdentity.FUNCTION, Constant.of("K"), RightIdentity.FUNCTION); assertEquals("right",f.evaluate("left","right")); assertNull("right",f.evaluate("left",null)); assertEquals("right",f.evaluate(null,"right")); }