1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  package org.hipparchus.distribution.continuous;
24  
25  import org.hipparchus.exception.MathIllegalArgumentException;
26  import org.junit.jupiter.api.BeforeEach;
27  import org.junit.jupiter.api.Test;
28  
29  import static org.junit.jupiter.api.Assertions.assertEquals;
30  import static org.junit.jupiter.api.Assertions.assertTrue;
31  import static org.junit.jupiter.api.Assertions.fail;
32  
33  
34  
35  
36  public class CauchyDistributionTest extends RealDistributionAbstractTest {
37  
38      
39      protected double defaultTolerance = 1e-9;
40  
41      @BeforeEach
42      @Override
43      public void setUp() {
44          super.setUp();
45          setTolerance(defaultTolerance);
46      }
47  
48      
49  
50      
51      @Override
52      public CauchyDistribution makeDistribution() {
53          return new CauchyDistribution(1.2, 2.1);
54      }
55  
56      
57      @Override
58      public double[] makeCumulativeTestPoints() {
59          
60          return new double[] {-667.24856187, -65.6230835029, -25.4830299460, -12.0588781808,
61                  -5.26313542807, 669.64856187, 68.0230835029, 27.8830299460, 14.4588781808, 7.66313542807};
62      }
63  
64      
65      @Override
66      public double[] makeCumulativeTestValues() {
67          return new double[] {0.001, 0.01, 0.025, 0.05, 0.1, 0.999,
68                  0.990, 0.975, 0.950, 0.900};
69      }
70  
71      
72      @Override
73      public double[] makeDensityTestValues() {
74          return new double[] {
75              1.49599158008e-06, 0.000149550440335, 0.000933076881878,
76              0.00370933207799,  0.0144742330437,   1.49599158008e-06,
77              0.000149550440335, 0.000933076881878, 0.00370933207799,
78              0.0144742330437
79          };
80      }
81  
82      
83  
84      @Test
85      void testInverseCumulativeProbabilityExtremes() {
86          setInverseCumulativeTestPoints(new double[] {0.0, 1.0});
87          setInverseCumulativeTestValues(
88                  new double[] {Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY});
89          verifyInverseCumulativeProbabilities();
90      }
91  
92      @Test
93      void testMedian() {
94          CauchyDistribution distribution = (CauchyDistribution) getDistribution();
95          assertEquals(1.2, distribution.getMedian(), 0.0);
96      }
97  
98      @Test
99      void testScale() {
100         CauchyDistribution distribution = (CauchyDistribution) getDistribution();
101         assertEquals(2.1, distribution.getScale(), 0.0);
102     }
103 
104     @Test
105     void testPreconditions() {
106         try {
107             new CauchyDistribution(0, 0);
108             fail("Cannot have zero scale");
109         } catch (MathIllegalArgumentException ex) {
110             
111         }
112         try {
113             new CauchyDistribution(0, -1);
114             fail("Cannot have negative scale");
115         } catch (MathIllegalArgumentException ex) {
116             
117         }
118     }
119 
120     @Test
121     void testMoments() {
122         CauchyDistribution dist;
123 
124         dist = new CauchyDistribution(10.2, 0.15);
125         assertTrue(Double.isNaN(dist.getNumericalMean()));
126         assertTrue(Double.isNaN(dist.getNumericalVariance()));
127 
128         dist = new CauchyDistribution(23.12, 2.12);
129         assertTrue(Double.isNaN(dist.getNumericalMean()));
130         assertTrue(Double.isNaN(dist.getNumericalVariance()));
131     }
132 }