Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/HypotGeneratorTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/HypotGeneratorTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/HypotGeneratorTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/HypotGeneratorTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.automatic.functions; + +import org.apache.commons.nabla.ReferenceFunction; +import org.apache.commons.nabla.automatic.AbstractMathTest; + +public class HypotGeneratorTest extends AbstractMathTest { + + public void testReference1(){ + checkReference(new ReferenceFunction() { + public double f(double t) { return Math.hypot(t, 3.0); } + public double fPrime(double t) { return t / Math.hypot(t, 3.0); } + }, -2, 2, 50, 2e-15); + } + + public void testReference2(){ + checkReference(new ReferenceFunction() { + public double f(double t) { return Math.hypot(3.0, t); } + public double fPrime(double t) { return t / Math.hypot(t, 3.0); } + }, -2, 2, 50, 0.0); + } + + public void testReference12Aligned(){ + checkReference(new ReferenceFunction() { + public double f(double t) { return Math.hypot(t, t); } + public double fPrime(double t) { return Math.sqrt(2); } + }, 0.1, 10, 20, 3.0e-16); + } + + public void testReference12Shifted(){ + checkReference(new ReferenceFunction() { + public double f(double t) { return Math.hypot(t, t + 1); } + public double fPrime(double t) { return (2 * t + 1) / Math.hypot(t, t + 1); } + }, 0.1, 10, 20, 3.0e-16); + } + +}
Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/HypotGeneratorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/Log10GeneratorTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/Log10GeneratorTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/Log10GeneratorTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/Log10GeneratorTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.automatic.functions; + +import org.apache.commons.nabla.ReferenceFunction; +import org.apache.commons.nabla.automatic.AbstractMathTest; + +public class Log10GeneratorTest extends AbstractMathTest { + + public void testReference(){ + checkReference(new ReferenceFunction() { + public double f(double t) { return Math.log10(t); } + public double fPrime(double t) { return 1 / (Math.log(10) * t); } + }, 0.1, 10, 50, 0.0); + } + +} Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/Log10GeneratorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/Log1pGeneratorTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/Log1pGeneratorTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/Log1pGeneratorTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/Log1pGeneratorTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.automatic.functions; + +import org.apache.commons.nabla.ReferenceFunction; +import org.apache.commons.nabla.automatic.AbstractMathTest; + +public class Log1pGeneratorTest extends AbstractMathTest { + + public void testReference(){ + checkReference(new ReferenceFunction() { + public double f(double t) { return Math.log1p(t); } + public double fPrime(double t) { return 1 / (1 + t); } + }, -0.2, 0.2, 50, 0.0); + } + +} Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/Log1pGeneratorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/LogGeneratorTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/LogGeneratorTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/LogGeneratorTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/LogGeneratorTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.automatic.functions; + +import org.apache.commons.nabla.ReferenceFunction; +import org.apache.commons.nabla.automatic.AbstractMathTest; + +public class LogGeneratorTest extends AbstractMathTest { + + public void testReference(){ + checkReference(new ReferenceFunction() { + public double f(double t) { return Math.log(t); } + public double fPrime(double t) { return 1 / t; } + }, 0.1, 10, 50, 0.0); + } + +} Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/LogGeneratorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/PowGeneratorTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/PowGeneratorTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/PowGeneratorTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/PowGeneratorTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.automatic.functions; + +import org.apache.commons.nabla.ReferenceFunction; +import org.apache.commons.nabla.automatic.AbstractMathTest; + +public class PowGeneratorTest extends AbstractMathTest { + + public void testReference1(){ + checkReference(new ReferenceFunction() { + public double f(double t) { return Math.pow(t, 3.0); } + public double fPrime(double t) { return 3 * Math.pow(t, 2.0); } + }, -2, 2, 50, 2e-15); + } + + public void testReference2(){ + checkReference(new ReferenceFunction() { + public double f(double t) { return Math.pow(3.0, t); } + public double fPrime(double t) { return Math.log(3) * Math.pow(3, t); } + }, -2, 2, 50, 0.0); + } + + public void testReference12(){ + checkReference(new ReferenceFunction() { + public double f(double t) { return Math.pow(t, t); } + public double fPrime(double t) { return (1 + Math.log(t)) * Math.pow(t, t); } + }, 0.1, 10, 20, 0); + } + +} Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/PowGeneratorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/SinGeneratorTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/SinGeneratorTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/SinGeneratorTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/SinGeneratorTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.automatic.functions; + +import org.apache.commons.nabla.ReferenceFunction; +import org.apache.commons.nabla.automatic.AbstractMathTest; + +public class SinGeneratorTest extends AbstractMathTest { + + public void testReference(){ + checkReference(new ReferenceFunction() { + public double f(double t) { return Math.sin(t); } + public double fPrime(double t) { return Math.cos(t); } + }, 0, 2 * Math.PI, 20, 0.0); + } + +} Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/SinGeneratorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/SinhGeneratorTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/SinhGeneratorTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/SinhGeneratorTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/SinhGeneratorTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.automatic.functions; + +import org.apache.commons.nabla.ReferenceFunction; +import org.apache.commons.nabla.automatic.AbstractMathTest; + +public class SinhGeneratorTest extends AbstractMathTest { + + public void testReference(){ + checkReference(new ReferenceFunction() { + public double f(double t) { return Math.sinh(t); } + public double fPrime(double t) { return Math.cosh(t); } + }, -10, 10, 50, 0.0); + } + +} Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/SinhGeneratorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/SqrtGeneratorTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/SqrtGeneratorTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/SqrtGeneratorTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/SqrtGeneratorTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.automatic.functions; + +import org.apache.commons.nabla.ReferenceFunction; +import org.apache.commons.nabla.automatic.AbstractMathTest; + +public class SqrtGeneratorTest extends AbstractMathTest { + + public void testReference(){ + checkReference(new ReferenceFunction() { + public double f(double t) { return Math.sqrt(t); } + public double fPrime(double t) { return 1 / (2 * Math.sqrt(t)); } + }, 0.001, 10, 50, 0.0); + } + +} Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/SqrtGeneratorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/TanGeneratorTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/TanGeneratorTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/TanGeneratorTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/TanGeneratorTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.automatic.functions; + +import org.apache.commons.nabla.ReferenceFunction; +import org.apache.commons.nabla.automatic.AbstractMathTest; + +public class TanGeneratorTest extends AbstractMathTest { + + public void testReference(){ + checkReference(new ReferenceFunction() { + public double f(double t) { return Math.tan(t); } + public double fPrime(double t) { return 1 + Math.tan(t) * Math.tan(t); } + }, 0, 2 * Math.PI, 20, 0.0); + } + +} Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/TanGeneratorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/TanhGeneratorTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/TanhGeneratorTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/TanhGeneratorTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/TanhGeneratorTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.automatic.functions; + +import org.apache.commons.nabla.ReferenceFunction; +import org.apache.commons.nabla.automatic.AbstractMathTest; + +public class TanhGeneratorTest extends AbstractMathTest { + + public void testReference(){ + checkReference(new ReferenceFunction() { + public double f(double t) { return Math.tanh(t); } + public double fPrime(double t) { return 1 - Math.tanh(t) * Math.tanh(t); } + }, -10, 10, 50, 0.0); + } + +} Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/automatic/functions/TanhGeneratorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/core/DifferentialPairTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/core/DifferentialPairTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/core/DifferentialPairTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/core/DifferentialPairTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,179 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.core; + +import org.apache.commons.nabla.AbstractStaticFunctionsTest; +import org.apache.commons.nabla.core.DifferentialPair; + +public class DifferentialPairTest extends AbstractStaticFunctionsTest { + + public void testConstant() { + DifferentialPair p = DifferentialPair.newConstant(1.5); + assertEquals(1.5, p.getU0(), 1.0e-15); + assertEquals(0.0, p.getU1(), 1.0e-15); + } + + public void testVariable() { + DifferentialPair p = DifferentialPair.newVariable(1.5); + assertEquals(1.5, p.getU0(), 1.0e-15); + assertEquals(1.0, p.getU1(), 1.0e-15); + } + + public void testConstructor() { + DifferentialPair p = new DifferentialPair(1.5, -1.3); + assertEquals(1.5, p.getU0(), 1.0e-15); + assertEquals(-1.3, p.getU1(), 1.0e-15); + } + + public void testMonadicOperations() { + defaultMonadicTest("negate"); + defaultMonadicTest("square"); + defaultMonadicTest("cube"); + } + + public void testDiadicOperations() { + defaultDiadicTest("add"); + defaultDiadicTest("subtract"); + defaultDiadicTest("multiply"); + defaultDiadicTest("divide"); + checkDiadicFunction(getNablaClass(), getJavaClass(), "remainder", + 1023, 1024, 2, 250, 251, 2, 1.0e-15, 1e-10); + } + + protected Class<?> getJavaClass() { + return SimpleOperations.class; + } + + protected Class<?> getNablaClass() { + return DifferentialPair.class; + } + + protected static class SimpleOperations { + public static double add(double a, int b) { + return a + b; + } + + public static double add(int a, double b) { + return a + b; + } + + public static double add(double a, long b) { + return a + b; + } + + public static double add(long a, double b) { + return a + b; + } + + public static double add(double a, double b) { + return a + b; + } + + public static double subtract(double a, int b) { + return a - b; + } + + public static double subtract(int a, double b) { + return a - b; + } + + public static double subtract(double a, long b) { + return a - b; + } + + public static double subtract(long a, double b) { + return a - b; + } + + public static double subtract(double a, double b) { + return a - b; + } + + public static double multiply(double a, int b) { + return a * b; + } + + public static double multiply(int a, double b) { + return a * b; + } + + public static double multiply(double a, long b) { + return a * b; + } + + public static double multiply(long a, double b) { + return a * b; + } + + public static double multiply(double a, double b) { + return a * b; + } + + public static double divide(double a, int b) { + return a / b; + } + + public static double divide(int a, double b) { + return a / b; + } + + public static double divide(double a, long b) { + return a / b; + } + + public static double divide(long a, double b) { + return a / b; + } + + public static double divide(double a, double b) { + return a / b; + } + + public static double remainder(double a, int b) { + return a % b; + } + + public static double remainder(int a, double b) { + return a % b; + } + + public static double remainder(double a, long b) { + return a % b; + } + + public static double remainder(long a, double b) { + return a % b; + } + + public static double remainder(double a, double b) { + return a % b; + } + + public static double negate(double a) { + return -a; + } + + public static double square(double a) { + return a * a; + } + + public static double cube(double a) { + return a * a * a; + } + } + +} Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/core/DifferentialPairTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/AbstractFiniteDifferencesTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/AbstractFiniteDifferencesTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/AbstractFiniteDifferencesTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/AbstractFiniteDifferencesTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,197 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.differences; + +import java.util.Random; + +import org.apache.commons.nabla.Polynomial; +import org.apache.commons.nabla.ReferenceFunction; +import org.apache.commons.nabla.core.DifferentialPair; +import org.apache.commons.nabla.core.DifferentiationException; +import org.apache.commons.nabla.core.UnivariateDerivative; +import org.apache.commons.nabla.differences.FiniteDifferencesDifferentiator; + +import junit.framework.TestCase; + +public abstract class AbstractFiniteDifferencesTest extends TestCase { + + protected abstract FiniteDifferencesDifferentiator buildDifferentiator(double h); + protected abstract int getOrder(); + + /** Check the reference implementation for polynomials. */ + public void testReference() { + + Polynomial legendre5 = new Polynomial(new double[] { 63, 0, -70, 0, 15, 0 }); + assertEquals(17155.92466365559104, legendre5.f(Math.PI), 1.0e-9); + assertEquals(28626.24675148200242, legendre5.fPrime(Math.PI), 1.0e-8); + + Polynomial legendre4 = new Polynomial(new double[] { 35, 0, -30, 0, 3 }); + assertEquals(3116.230054157404545, legendre4.f(Math.PI), 1.0e-10); + assertEquals(4152.383176026587230, legendre4.fPrime(Math.PI), 1.0e-9); + + Polynomial chebyshev7 = new Polynomial(new double[] { 64, 0, -112, 0, 56, 0, -7, 0 }); + assertEquals(160738.9222272848309, chebyshev7.f(Math.PI), 1.0e-8); + assertEquals(377804.3612820780352, chebyshev7.fPrime(Math.PI), 1.0e-7); + + Polynomial laguerre3 = new Polynomial(new double[] { -1, 9, -18, 6 }); + assertEquals(7.271495164888129102, laguerre3.f(Math.PI), 1.0e-13); + assertEquals(8.939854561348202436, laguerre3.fPrime(Math.PI), 1.0e-12); + + } + + /** The differentiation schemes of order p should compute exact differentials + * for polynomials up to degree p. + */ + public void testExactPolynomialDifferentiation() throws DifferentiationException { + for (int k = 0; k <= getOrder(); ++k) { + ReferenceFunction reference = Polynomial.randomPolynomial(random, k); + UnivariateDerivative derivative = buildDifferentiator(0.1).differentiate(reference); + for (DifferentialPair t : transcendentals) { + double error = derivative.f(t).getU1() - reference.fPrime(t.getU0()); + assertEquals(0, error, 1.0e-13 * Math.abs(reference.fPrime(t.getU0()))); + } + } + } + + /** The derivative instances are bound to their primitive + * and should follow their updates transparently. */ + public void testPrimitiveBinding() throws DifferentiationException { + + // compute the differential once only + Polynomial reference = Polynomial.randomPolynomial(random, 3); + FiniteDifferencesDifferentiator differentiator = buildDifferentiator(0.1); + UnivariateDerivative derivative = differentiator.differentiate(reference); + double errorScaleFactor = differentiator.getSignedErrorScaleFactor(); + + + // compute the differential values from this initial state + DifferentialPair[] beforeChange = + new DifferentialPair[transcendentals.length]; + for (int i = 0; i < transcendentals.length; ++i) { + DifferentialPair t = transcendentals[i]; + beforeChange[i] = derivative.f(t); + assertEquals(0, beforeChange[i].getU1() - reference.fPrime(t.getU0()), 100 * Math.abs(errorScaleFactor)); + } + + // change the primitive WITHOUT recomputing the differential + ((Polynomial) derivative.getPrimitive()).addToSelf(Polynomial.randomPolynomial(random, 4)); + + // compute the new values reusing the original differential + DifferentialPair[] afterChange = + new DifferentialPair[transcendentals.length]; + for (int i = 0; i < transcendentals.length; ++i) { + DifferentialPair t = transcendentals[i]; + afterChange[i] = derivative.f(t); + assertEquals(0, afterChange[i].getU1() - reference.fPrime(t.getU0()), 100 * Math.abs(errorScaleFactor)); + } + + // check the change was important + for (int i = 0; i < transcendentals.length; ++i) { + DifferentialPair change = + DifferentialPair.subtract(beforeChange[i], afterChange[i]); + assertTrue(Math.abs(change.getU0()) > 10000.0 * Math.abs(errorScaleFactor)); + assertTrue(Math.abs(change.getU1()) > 10000.0 * Math.abs(errorScaleFactor)); + } + + } + + /** Check the differentials values in a range. + * @param reference reference differential + * @param h finite differences step + * @param lower lower bound of the test range + * @param upper upper bound of the test range + * @param n number of test points in the range + * @param epsilon tolerance on the differentials values + */ + protected void checkValues(ReferenceFunction reference, double h, + double lower, double upper, int n, + double epsilon) { + try { + UnivariateDerivative derivative = buildDifferentiator(h).differentiate(reference); + int n1 = n - 1; + for (int i = 0; i < n; ++i) { + double t = ((n1 - i) * lower + i * upper) / n1; + assertEquals(reference.fPrime(t), + derivative.f(DifferentialPair.newVariable(t)).getU1(), + epsilon); + } + } catch (DifferentiationException de) { + fail(de.getMessage()); + } + } + + /** Check the error order at some point. + * @param reference reference differential + * @param t abscissa of the test point + * @param hMin minimal step + * @param hMax minimal step + * @param n number of steps to try + * @param error expected order-normalized error + * @param epsilon tolerance on the expected extremal values + */ + protected void checkOrder(ReferenceFunction reference, + double t, double hMin, double hMax, int n, + double error, double epsilon) { + try { + int n1 = n - 1; + for (int i = 0; i < n; ++i) { + double h = ((n1 - i) * hMin + i * hMax) / n1; + FiniteDifferencesDifferentiator fds = buildDifferentiator(h); + UnivariateDerivative derivative = fds.differentiate(reference); + double rawError = + derivative.f(DifferentialPair.newVariable(t)).getU1() - reference.fPrime(t); + double orderNormalizedError = Math.abs(rawError / fds.getSignedErrorScaleFactor()); + assertEquals(error, orderNormalizedError, epsilon); + } + } catch (DifferentiationException de) { + fail(de.getMessage()); + } + } + + protected ReferenceFunction hugeDifferentialsFunction() { + return new ReferenceFunction() { + public double f(double t) { + return Math.sin(3 * Math.tan(t * t) - Math.log(t)); + } + public double fPrime(double t) { + double t2 = t * t; + double cosT2 = Math.cos(t2); + double tanT2 = Math.tan(t2); + return (6 * t / (cosT2 * cosT2) - 1 / t) * Math.cos(3 * tanT2 - Math.log(t)); + } + }; + } + + public void setUp() { + random = new Random(0x6c05e9f92868d664l); + transcendentals = new DifferentialPair[] { + DifferentialPair.newVariable(Math.PI), + DifferentialPair.newVariable(Math.E), + DifferentialPair.newVariable(Math.pow(2, Math.sqrt(2))) + }; + + } + + public void tearDown() { + random = null; + transcendentals = null; + } + + protected Random random; + private DifferentialPair[] transcendentals; + +} Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/AbstractFiniteDifferencesTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/EightPointsSchemeTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/EightPointsSchemeTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/EightPointsSchemeTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/EightPointsSchemeTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.differences; + +import org.apache.commons.nabla.Polynomial; +import org.apache.commons.nabla.ReferenceFunction; +import org.apache.commons.nabla.differences.EightPointsScheme; +import org.apache.commons.nabla.differences.FiniteDifferencesDifferentiator; + +public class EightPointsSchemeTest extends AbstractFiniteDifferencesTest { + + public void testApproximatePolynomialDifferentiation() { + + ReferenceFunction reference = Polynomial.randomPolynomial(random, 9); + checkValues(reference, 0.1, -1.0, 1.0, 100, 3.0e-4); + checkOrder(reference, Math.PI, 0.05, 0.1, 100, 266000, 10000); + + reference = Polynomial.randomPolynomial(random, 10); + checkValues(reference, 0.1, -1.0, 1.0, 100, 2.0e-3); + checkOrder(reference, Math.PI, 0.05, 0.1, 10, 8280000, 15500); + + } + + public void testHugeDifferentialsFunction() { + ReferenceFunction reference = hugeDifferentialsFunction(); + checkValues(reference, 0.05, 0.3, 0.7, 100, 0.005); + checkOrder(reference, 0.5, 0.01, 0.02, 10, 61200000, 1300000); + } + + protected FiniteDifferencesDifferentiator buildDifferentiator(double h) { + return new EightPointsScheme(h); + } + + protected int getOrder() { + return 8; + } + +} Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/EightPointsSchemeTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/FourPointsSchemeTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/FourPointsSchemeTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/FourPointsSchemeTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/FourPointsSchemeTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.differences; + +import org.apache.commons.nabla.Polynomial; +import org.apache.commons.nabla.ReferenceFunction; +import org.apache.commons.nabla.differences.FiniteDifferencesDifferentiator; +import org.apache.commons.nabla.differences.FourPointsScheme; + +public class FourPointsSchemeTest extends AbstractFiniteDifferencesTest { + + public void testApproximatePolynomialDifferentiation() { + + ReferenceFunction reference = Polynomial.randomPolynomial(random, 5); + checkValues(reference, 0.1, -1.0, 1.0, 100, 3.0e-4); + checkOrder(reference, Math.PI, 0.05, 0.1, 100, 7.261, 1.0e-3); + + reference = Polynomial.randomPolynomial(random, 6); + checkValues(reference, 0.1, -1.0, 1.0, 100, 2.0e-3); + checkOrder(reference, Math.PI, 0.05, 0.1, 10, 131.682, 1.0e-3); + + } + + public void testHugeDifferentialsFunction() { + ReferenceFunction reference = hugeDifferentialsFunction(); + checkValues(reference, 0.05, 0.3, 0.7, 100, 0.005); + checkOrder(reference, 0.5, 0.01, 0.02, 10, 130.548, 0.084); + } + + protected FiniteDifferencesDifferentiator buildDifferentiator(double h) { + return new FourPointsScheme(h); + } + + protected int getOrder() { + return 4; + } + +} Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/FourPointsSchemeTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/SixPointsSchemeTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/SixPointsSchemeTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/SixPointsSchemeTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/SixPointsSchemeTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.differences; + +import org.apache.commons.nabla.Polynomial; +import org.apache.commons.nabla.ReferenceFunction; +import org.apache.commons.nabla.differences.FiniteDifferencesDifferentiator; +import org.apache.commons.nabla.differences.SixPointsScheme; + +public class SixPointsSchemeTest extends AbstractFiniteDifferencesTest { + + public void testApproximatePolynomialDifferentiation() { + + ReferenceFunction reference = Polynomial.randomPolynomial(random, 7); + checkValues(reference, 0.1, -1.0, 1.0, 100, 3.0e-4); + checkOrder(reference, Math.PI, 0.05, 0.1, 100, 3659.4, 0.5); + + reference = Polynomial.randomPolynomial(random, 8); + checkValues(reference, 0.1, -1.0, 1.0, 100, 2.0e-3); + checkOrder(reference, Math.PI, 0.05, 0.1, 10, 90415.25, 0.75); + + } + + public void testHugeDifferentialsFunction() { + ReferenceFunction reference = hugeDifferentialsFunction(); + checkValues(reference, 0.05, 0.3, 0.7, 100, 0.005); + checkOrder(reference, 0.5, 0.01, 0.012, 10, 55685, 256); + } + + protected FiniteDifferencesDifferentiator buildDifferentiator(double h) { + return new SixPointsScheme(h); + } + + protected int getOrder() { + return 6; + } + +} Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/SixPointsSchemeTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/TwoPointsSchemeTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/TwoPointsSchemeTest.java?rev=648243&view=auto ============================================================================== --- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/TwoPointsSchemeTest.java (added) +++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/TwoPointsSchemeTest.java Tue Apr 15 06:25:28 2008 @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.nabla.differences; + +import org.apache.commons.nabla.Polynomial; +import org.apache.commons.nabla.ReferenceFunction; +import org.apache.commons.nabla.differences.FiniteDifferencesDifferentiator; +import org.apache.commons.nabla.differences.TwoPointsScheme; + + +public class TwoPointsSchemeTest extends AbstractFiniteDifferencesTest { + + public void testApproximatePolynomialDifferentiation() { + + ReferenceFunction reference = Polynomial.randomPolynomial(random, 3); + checkValues(reference, 0.1, -1.0, 1.0, 100, 1.0e-2); + checkOrder(reference, Math.PI, 0.05, 0.1, 10, 4.356, 1.0e-3); + + reference = Polynomial.randomPolynomial(random, 4); + checkValues(reference, 0.1, -1.0, 1.0, 100, 2.0e-2); + checkOrder(reference, Math.PI, 0.05, 0.1, 10, 28.078, 1.0e-3); + + } + + public void testHugeDifferentialsFunction() { + ReferenceFunction reference = hugeDifferentialsFunction(); + checkValues(reference, 0.05, 0.3, 0.7, 100, 0.09); + checkOrder(reference, 0.5, 0.01, 0.02, 10, 42.907, 0.013); + } + + protected FiniteDifferencesDifferentiator buildDifferentiator(double h) { + return new TwoPointsScheme(h); + } + + protected int getOrder() { + return 2; + } + +} Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/differences/TwoPointsSchemeTest.java ------------------------------------------------------------------------------ svn:eol-style = native