    1   /*
    2    *
    3    * Copyright (c) 2003-2004 The Apache Software Foundation. All rights reserved.
    4    *
    5    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
    6    * use this file except in compliance with the License. You may obtain a copy
    7    * of the License at
    8    *
    9    * http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    13   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
    14   * License for the specific language governing permissions and limitations
    15   * under the License.
    16   *
    17   */
    18  package org.apache.commons.math.analysis;
    19
    20  import org.apache.commons.math.MathException;
    21
    22  import junit.framework.TestCase;
    23
    24  /***
    25   * @version $Revision: 1.2 $ $Date: 2004/07/17 21:19:39 $
    26   */
    27  public final class NewtonSolverTest extends TestCase {
    28      /***
    29       *
    30       */
    31      public void testSinZero() throws MathException {
    32          DifferentiableUnivariateRealFunction f = new SinFunction();
    33          double result;
    34
    35          UnivariateRealSolver solver = new NewtonSolver(f);
    36          result = solver.solve(3, 4);
    37          assertEquals(result, Math.PI, solver.getAbsoluteAccuracy());
    38
    39          result = solver.solve(1, 4);
    40          assertEquals(result, Math.PI, solver.getAbsoluteAccuracy());
    41
    42          //TODO:  create abstract solver test class, move these there
    43          assertEquals(result, solver.getResult(), 0);
    44          assertTrue(solver.getIterationCount() > 0);
    45      }
    46
    47      /***
    48       *
    49       */
    50      public void testQuinticZero() throws MathException {
    51          DifferentiableUnivariateRealFunction f = new QuinticFunction();
    52          double result;
    53
    54          UnivariateRealSolver solver = new BisectionSolver(f);
    55          result = solver.solve(-0.2, 0.2);
    56          assertEquals(result, 0, solver.getAbsoluteAccuracy());
    57
    58          result = solver.solve(-0.1, 0.3);
    59          assertEquals(result, 0, solver.getAbsoluteAccuracy());
    60
    61          result = solver.solve(-0.3, 0.45);
    62          assertEquals(result, 0, solver.getAbsoluteAccuracy());
    63
    64          result = solver.solve(0.3, 0.7);
    65          assertEquals(result, 0.5, solver.getAbsoluteAccuracy());
    66
    67          result = solver.solve(0.2, 0.6);
    68          assertEquals(result, 0.5, solver.getAbsoluteAccuracy());
    69
    70          result = solver.solve(0.05, 0.95);
    71          assertEquals(result, 0.5, solver.getAbsoluteAccuracy());
    72
    73          result = solver.solve(0.85, 1.25);
    74          assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
    75
    76          result = solver.solve(0.8, 1.2);
    77          assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
    78
    79          result = solver.solve(0.85, 1.75);
    80          assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
    81
    82          result = solver.solve(0.55, 1.45);
    83          assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
    84
    85          result = solver.solve(0.85, 5);
    86          assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
    87      }
    88  }