package net.varkhan.base.functor.functional; import junit.framework.TestCase; import net.varkhan.base.functor.Functional; /** * <b></b>. * <p/> * * @author varkhan * @date 11/9/13 * @time 6:10 PM */ public class TransformFunctionalTest extends TestCase { public void testTransform() throws Exception { final String ref = "@REF"; Functional<String,Object> x = new Functional<String,Object>() { @Override public double invoke(String arg, Object ctx) { return arg==ctx?+1.0:-1.0; } }; TransformFunctional<String,Object> p = new TransformFunctional<String,Object>(x) { @Override public double invoke(String arg, Object ctx) { return -func.invoke(arg, ctx); } }; assertSame("component()",x,p.component()); assertEquals("invoke(null,null)",-1.0,p.invoke(null,null)); assertEquals("invoke(@REF,null)",+1.0,p.invoke(ref,null)); assertEquals("invoke(@REF,@REF)",-1.0,p.invoke(ref,ref)); } public void testLog() throws Exception { assertEquals("log(0)",Double.NEGATIVE_INFINITY,TransformFunctional.log(ConstFunctional.as(0.0)).invoke("foo",null)); assertEquals("log(1)",0.0,TransformFunctional.log(ConstFunctional.as(1.0)).invoke("foo",null)); assertEquals("log(2)",Math.log(2.0),TransformFunctional.log(ConstFunctional.as(2.0)).invoke("foo",null)); assertEquals("log(e)",1.0,TransformFunctional.log(ConstFunctional.as(Math.E)).invoke("foo",null)); } public void testExp() throws Exception { assertEquals("exp(0)",1.0,TransformFunctional.exp(ConstFunctional.as(0.0)).invoke("foo",null)); assertEquals("exp(1)",Math.exp(1.0),TransformFunctional.exp(ConstFunctional.as(1.0)).invoke("foo",null)); assertEquals("exp(-1)",Math.exp(-1.0),TransformFunctional.exp(ConstFunctional.as(-1.0)).invoke("foo",null)); assertEquals("exp(2)",Math.exp(2.0),TransformFunctional.exp(ConstFunctional.as(2.0)).invoke("foo",null)); } public void testSin() throws Exception { assertEquals("sin(0)",0.0,TransformFunctional.sin(ConstFunctional.as(0.0)).invoke("foo",null)); assertEquals("sin(1)",Math.sin(1.0),TransformFunctional.sin(ConstFunctional.as(1.0)).invoke("foo",null)); assertEquals("sin(-1)",Math.sin(-1.0),TransformFunctional.sin(ConstFunctional.as(-1.0)).invoke("foo",null)); assertEquals("sin(2)",Math.sin(2.0),TransformFunctional.sin(ConstFunctional.as(2.0)).invoke("foo",null)); } public void testCos() throws Exception { assertEquals("cos(0)",1.0,TransformFunctional.cos(ConstFunctional.as(0.0)).invoke("foo",null)); assertEquals("cos(1)",Math.cos(1.0),TransformFunctional.cos(ConstFunctional.as(1.0)).invoke("foo",null)); assertEquals("cos(-1)",Math.cos(-1.0),TransformFunctional.cos(ConstFunctional.as(-1.0)).invoke("foo",null)); assertEquals("cos(2)",Math.cos(2.0),TransformFunctional.cos(ConstFunctional.as(2.0)).invoke("foo",null)); } public void testTan() throws Exception { assertEquals("tan(0)",0.0,TransformFunctional.tan(ConstFunctional.as(0.0)).invoke("foo",null)); assertEquals("tan(1)",Math.tan(1.0),TransformFunctional.tan(ConstFunctional.as(1.0)).invoke("foo",null)); assertEquals("tan(-1)",Math.tan(-1.0),TransformFunctional.tan(ConstFunctional.as(-1.0)).invoke("foo",null)); assertEquals("tan(2)",Math.tan(2.0),TransformFunctional.tan(ConstFunctional.as(2.0)).invoke("foo",null)); } public void testAbs() throws Exception { assertEquals("abs(0)",0.0,TransformFunctional.abs(ConstFunctional.as(0.0)).invoke("foo",null)); assertEquals("abs(1)",1.0,TransformFunctional.abs(ConstFunctional.as(1.0)).invoke("foo",null)); assertEquals("abs(-1)",1.0,TransformFunctional.abs(ConstFunctional.as(-1.0)).invoke("foo",null)); assertEquals("abs(2)",2.0,TransformFunctional.abs(ConstFunctional.as(2.0)).invoke("foo",null)); } public void testAsin() throws Exception { assertEquals("asin(0)",0.0,TransformFunctional.asin(ConstFunctional.as(0.0)).invoke("foo",null)); assertEquals("asin(1)",Math.asin(1.0),TransformFunctional.asin(ConstFunctional.as(1.0)).invoke("foo",null)); assertEquals("asin(-1)",Math.asin(-1.0),TransformFunctional.asin(ConstFunctional.as(-1.0)).invoke("foo",null)); assertEquals("asin(2)",Math.asin(2.0),TransformFunctional.asin(ConstFunctional.as(2.0)).invoke("foo",null)); } public void testAcos() throws Exception { assertEquals("acos(0)",0.0,TransformFunctional.acos(ConstFunctional.as(1.0)).invoke("foo",null)); assertEquals("acos(1)",Math.acos(1.0),TransformFunctional.acos(ConstFunctional.as(1.0)).invoke("foo",null)); assertEquals("acos(-1)",Math.acos(-1.0),TransformFunctional.acos(ConstFunctional.as(-1.0)).invoke("foo",null)); assertEquals("acos(2)",Math.acos(2.0),TransformFunctional.acos(ConstFunctional.as(2.0)).invoke("foo",null)); } public void testAtan() throws Exception { assertEquals("atan(0)",0.0,TransformFunctional.atan(ConstFunctional.as(0.0)).invoke("foo",null)); assertEquals("atan(1)",Math.atan(1.0),TransformFunctional.atan(ConstFunctional.as(1.0)).invoke("foo",null)); assertEquals("atan(-1)",Math.atan(-1.0),TransformFunctional.atan(ConstFunctional.as(-1.0)).invoke("foo",null)); assertEquals("atan(2)",Math.atan(2.0),TransformFunctional.atan(ConstFunctional.as(2.0)).invoke("foo",null)); } public void testSinh() throws Exception { assertEquals("sinh(0)",0.0,TransformFunctional.sinh(ConstFunctional.as(0.0)).invoke("foo",null)); assertEquals("sinh(1)",Math.sinh(1.0),TransformFunctional.sinh(ConstFunctional.as(1.0)).invoke("foo",null)); assertEquals("sinh(-1)",Math.sinh(-1.0),TransformFunctional.sinh(ConstFunctional.as(-1.0)).invoke("foo",null)); assertEquals("sinh(2)",Math.sinh(2.0),TransformFunctional.sinh(ConstFunctional.as(2.0)).invoke("foo",null)); } public void testCosh() throws Exception { assertEquals("cosh(0)",1.0,TransformFunctional.cosh(ConstFunctional.as(0.0)).invoke("foo",null)); assertEquals("cosh(1)",Math.cosh(1.0),TransformFunctional.cosh(ConstFunctional.as(1.0)).invoke("foo",null)); assertEquals("cosh(-1)",Math.cosh(-1.0),TransformFunctional.cosh(ConstFunctional.as(-1.0)).invoke("foo",null)); assertEquals("cosh(2)",Math.cosh(2.0),TransformFunctional.cosh(ConstFunctional.as(2.0)).invoke("foo",null)); } public void testTanh() throws Exception { assertEquals("tanh(0)",0.0,TransformFunctional.tanh(ConstFunctional.as(0.0)).invoke("foo",null)); assertEquals("tanh(1)",Math.tanh(1.0),TransformFunctional.tanh(ConstFunctional.as(1.0)).invoke("foo",null)); assertEquals("tanh(-1)",Math.tanh(-1.0),TransformFunctional.tanh(ConstFunctional.as(-1.0)).invoke("foo",null)); assertEquals("tanh(2)",Math.tanh(2.0),TransformFunctional.tanh(ConstFunctional.as(2.0)).invoke("foo",null)); } public void testSqrt() throws Exception { assertEquals("sqrt(0)",0.0,TransformFunctional.sqrt(ConstFunctional.as(0.0)).invoke("foo",null)); assertEquals("sqrt(1)",1.0,TransformFunctional.sqrt(ConstFunctional.as(1.0)).invoke("foo",null)); assertEquals("sqrt(-1)",Double.NaN,TransformFunctional.sqrt(ConstFunctional.as(-1.0)).invoke("foo",null)); assertEquals("sqrt(2)",Math.sqrt(2.0),TransformFunctional.sqrt(ConstFunctional.as(2.0)).invoke("foo",null)); assertEquals("sqrt(4)",2.0,TransformFunctional.sqrt(ConstFunctional.as(4.0)).invoke("foo",null)); } }