1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.hipparchus.analysis.integration.gauss;
23
24 import org.hipparchus.analysis.UnivariateFunction;
25 import org.hipparchus.analysis.function.Cos;
26 import org.hipparchus.analysis.function.Inverse;
27 import org.hipparchus.analysis.function.Log;
28 import org.hipparchus.exception.LocalizedCoreFormats;
29 import org.hipparchus.exception.MathIllegalArgumentException;
30 import org.junit.jupiter.api.Test;
31
32 import static org.junit.jupiter.api.Assertions.assertEquals;
33 import static org.junit.jupiter.api.Assertions.fail;
34
35
36
37
38
39 class LegendreTest {
40 private static final GaussIntegratorFactory factory = new GaussIntegratorFactory();
41
42 @Test
43 void testTooLArgeNumberOfPoints() {
44 try {
45 factory.legendre(10000, 0, Math.PI / 2);
46 fail("an exception should have been thrown");
47 } catch (MathIllegalArgumentException miae) {
48 assertEquals(LocalizedCoreFormats.NUMBER_TOO_LARGE, miae.getSpecifier());
49 assertEquals(10000, ((Integer) miae.getParts()[0]).intValue());
50 assertEquals(1000, ((Integer) miae.getParts()[1]).intValue());
51 }
52 }
53
54 @Test
55 void testCos() {
56 final UnivariateFunction cos = new Cos();
57
58 final GaussIntegrator integrator = factory.legendre(7, 0, Math.PI / 2);
59 final double s = integrator.integrate(cos);
60
61 assertEquals(1, s, Math.ulp(1d));
62 }
63
64
65 @Test
66 void testInverse() {
67 final UnivariateFunction inv = new Inverse();
68 final UnivariateFunction log = new Log();
69
70 final double lo = 12.34;
71 final double hi = 456.78;
72
73 final GaussIntegrator integrator = factory.legendre(60, lo, hi);
74 final double s = integrator.integrate(inv);
75 final double expected = log.value(hi) - log.value(lo);
76
77 assertEquals(expected, s, 1e-14);
78 }
79 }