View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      https://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,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  /*
19   * This is not the original file distributed by the Apache Software Foundation
20   * It has been modified by the Hipparchus project
21   */
22  package org.hipparchus.util;
23  
24  import org.hipparchus.exception.MathIllegalStateException;
25  import org.junit.jupiter.api.Test;
26  
27  import static org.junit.jupiter.api.Assertions.assertEquals;
28  import static org.junit.jupiter.api.Assertions.assertThrows;
29  
30  /**
31   * Tests for ContinuedFraction.
32   */
33  class ContinuedFractionTest {
34  
35      @Test
36      void testGoldenRatio() throws Exception {
37          ContinuedFraction cf = new ContinuedFraction() {
38  
39              @Override
40              public double getA(int n, double x) {
41                  return 1.0;
42              }
43  
44              @Override
45              public double getB(int n, double x) {
46                  return 1.0;
47              }
48          };
49  
50          double gr = cf.evaluate(0.0, 10e-9);
51          assertEquals(1.61803399, gr, 10e-9);
52      }
53  
54      @Test
55      void testNonConvergentContinuedFraction() {
56          assertThrows(MathIllegalStateException.class, () -> {
57              ContinuedFraction cf = new ContinuedFraction() {
58  
59                  @Override
60                  public double getA(int n, double x) {
61                      return 1.0;
62                  }
63  
64                  @Override
65                  public double getB(int n, double x) {
66                      return 1.0;
67                  }
68  
69              };
70  
71              cf.evaluate(0.0, 10e-9, 10);
72          });
73      }
74  
75      @Test
76      void testInfinityDivergence() {
77          assertThrows(MathIllegalStateException.class, () -> {
78              ContinuedFraction cf = new ContinuedFraction() {
79  
80                  @Override
81                  public double getA(int n, double x) {
82                      return 1. / n;
83                  }
84  
85                  @Override
86                  public double getB(int n, double x) {
87                      return 1.0;
88                  }
89  
90              };
91  
92              cf.evaluate(1);
93          });
94      }
95  }