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.exception.LocalizedCoreFormats;
25 import org.hipparchus.exception.MathIllegalArgumentException;
26 import org.hipparchus.util.Binary64;
27 import org.hipparchus.util.Binary64Field;
28 import org.hipparchus.util.FastMath;
29 import org.junit.Assert;
30 import org.junit.Test;
31
32
33
34
35
36 public class FieldLegendreTest {
37 private static final FieldGaussIntegratorFactory<Binary64> factory = new FieldGaussIntegratorFactory<>(Binary64Field.getInstance());
38
39 @Test
40 public void testTooLArgeNumberOfPoints() {
41 try {
42 factory.legendre(10000, new Binary64(0), new Binary64(Math.PI / 2));
43 Assert.fail("an exception should have been thrown");
44 } catch (MathIllegalArgumentException miae) {
45 Assert.assertEquals(LocalizedCoreFormats.NUMBER_TOO_LARGE, miae.getSpecifier());
46 Assert.assertEquals(10000, ((Integer) miae.getParts()[0]).intValue());
47 Assert.assertEquals(1000, ((Integer) miae.getParts()[1]).intValue());
48 }
49 }
50
51 @Test
52 public void testCos() {
53 final FieldGaussIntegrator<Binary64> integrator = factory.legendre(7, new Binary64(0), new Binary64(Math.PI / 2));
54 final double s = integrator.integrate(x -> FastMath.cos(x)).getReal();
55
56 Assert.assertEquals(1, s, Math.ulp(1d));
57 }
58
59
60 @Test
61 public void testInverse() {
62
63 final Binary64 lo = new Binary64(12.34);
64 final Binary64 hi = new Binary64(456.78);
65
66 final FieldGaussIntegrator<Binary64> integrator = factory.legendre(60, lo, hi);
67 final double s = integrator.integrate(x -> x.reciprocal()).getReal();
68 final double expected = FastMath.log(hi).subtract(FastMath.log(lo)).getReal();
69
70 Assert.assertEquals(expected, s, 1e-14);
71 }
72 }