View Javadoc
1   /*
2    * Licensed to the Hipparchus project 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 Hipparchus project 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  package org.hipparchus.analysis.differentiation;
19  
20  import org.hipparchus.Field;
21  import org.hipparchus.analysis.differentiation.DerivativeTest.TestDerivative;
22  import org.hipparchus.exception.MathIllegalArgumentException;
23  import org.hipparchus.exception.MathRuntimeException;
24  import org.hipparchus.exception.NullArgumentException;
25  import org.hipparchus.util.FastMath;
26  import org.junit.jupiter.api.Test;
27  
28  import static org.junit.jupiter.api.Assertions.assertEquals;
29  
30  class FieldDerivativeTest {
31  
32      private static final double TOLERANCE = 1e-10;
33  
34      @Test
35      void testGetReal() {
36          // GIVEN
37          final double expectedOperation = 0.5;
38          final TestDerivative testDerivative = new TestDerivative(expectedOperation);
39          final TestFieldDerivative testFieldDerivative = new TestFieldDerivative(testDerivative);
40          // WHEN
41          final double actualOperation = testFieldDerivative.getReal();
42          // THEN
43          assertEquals(expectedOperation, actualOperation, 0.);
44      }
45  
46      @Test
47      void testPow() {
48          // GIVEN
49          final TestDerivative testDerivative = new TestDerivative(2.);
50          final TestFieldDerivative testFieldDerivative = new TestFieldDerivative(testDerivative);
51          final TestDerivative testDerivative2 = new TestDerivative(3.);
52          final TestFieldDerivative testFieldDerivative2 = new TestFieldDerivative(testDerivative2);
53          // WHEN
54          final TestFieldDerivative actualOperation = testFieldDerivative.pow(testFieldDerivative2);
55          // THEN
56          final TestFieldDerivative expectedOperation = new TestFieldDerivative(new TestDerivative(FastMath
57                  .pow(testDerivative.getValue(), testDerivative2.getValue())));
58          assertEquals(expectedOperation.getValue().getValue(), actualOperation.getValue().getValue(), TOLERANCE);
59      }
60  
61      @Test
62      void testLog10() {
63          // GIVEN
64          final TestDerivative testDerivative = new TestDerivative(0.5);
65          final TestFieldDerivative testFieldDerivative = new TestFieldDerivative(testDerivative);
66          // WHEN
67          final TestFieldDerivative actualOperation = testFieldDerivative.log10();
68          // THEN
69          final TestFieldDerivative expectedOperation = new TestFieldDerivative(new TestDerivative(FastMath
70                  .log10(testDerivative.getValue())));
71          assertEquals(expectedOperation.getValue().getValue(), actualOperation.getValue().getValue(), TOLERANCE);
72      }
73  
74      @Test
75      void testCosh() {
76          // GIVEN
77          final TestDerivative testDerivative = new TestDerivative(0.5);
78          final TestFieldDerivative testFieldDerivative = new TestFieldDerivative(testDerivative);
79          // WHEN
80          final TestFieldDerivative actualOperation = testFieldDerivative.cosh();
81          // THEN
82          final TestFieldDerivative expectedOperation = new TestFieldDerivative(new TestDerivative(FastMath
83                  .cosh(testDerivative.getValue())));
84          assertEquals(expectedOperation.getValue().getValue(), actualOperation.getValue().getValue(), TOLERANCE);
85      }
86  
87      @Test
88      void testSinh() {
89          // GIVEN
90          final TestDerivative testDerivative = new TestDerivative(0.5);
91          final TestFieldDerivative testFieldDerivative = new TestFieldDerivative(testDerivative);
92          // WHEN
93          final TestFieldDerivative actualOperation = testFieldDerivative.sinh();
94          // THEN
95          final TestFieldDerivative expectedOperation = new TestFieldDerivative(new TestDerivative(FastMath
96                  .sinh(testDerivative.getValue())));
97          assertEquals(expectedOperation.getValue().getValue(), actualOperation.getValue().getValue(), TOLERANCE);
98      }
99  
100     @Test
101     void testAcos() {
102         // GIVEN
103         final TestDerivative testDerivative = new TestDerivative(0.5);
104         final TestFieldDerivative testFieldDerivative = new TestFieldDerivative(testDerivative);
105         // WHEN
106         final TestFieldDerivative actualOperation = testFieldDerivative.acos();
107         // THEN
108         final TestFieldDerivative expectedOperation = new TestFieldDerivative(new TestDerivative(FastMath
109                 .acos(testDerivative.getValue())));
110         assertEquals(expectedOperation.getValue().getValue(), actualOperation.getValue().getValue(), TOLERANCE);
111     }
112 
113     @Test
114     void testFloor() {
115         // GIVEN
116         final TestDerivative testDerivative = new TestDerivative(0.5);
117         final TestFieldDerivative testFieldDerivative = new TestFieldDerivative(testDerivative);
118         // WHEN
119         final TestFieldDerivative actualOperation = testFieldDerivative.floor();
120         // THEN
121         final TestFieldDerivative expectedOperation = new TestFieldDerivative(new TestDerivative(FastMath
122                 .floor(testDerivative.getValue())));
123         assertEquals(expectedOperation.getValue().getValue(), actualOperation.getValue().getValue(), TOLERANCE);
124     }
125 
126     @Test
127     void testCeil() {
128         // GIVEN
129         final TestDerivative testDerivative = new TestDerivative(0.5);
130         final TestFieldDerivative testFieldDerivative = new TestFieldDerivative(testDerivative);
131         // WHEN
132         final TestFieldDerivative actualOperation = testFieldDerivative.ceil();
133         // THEN
134         final TestFieldDerivative expectedOperation = new TestFieldDerivative(new TestDerivative(FastMath
135                 .ceil(testDerivative.getValue())));
136         assertEquals(expectedOperation.getValue().getValue(), actualOperation.getValue().getValue(), TOLERANCE);
137     }
138 
139     @Test
140     void testRint() {
141         // GIVEN
142         final TestDerivative testDerivative = new TestDerivative(0.5);
143         final TestFieldDerivative testFieldDerivative = new TestFieldDerivative(testDerivative);
144         // WHEN
145         final TestFieldDerivative actualOperation = testFieldDerivative.rint();
146         // THEN
147         final TestFieldDerivative expectedOperation = new TestFieldDerivative(new TestDerivative(FastMath
148                 .rint(testDerivative.getValue())));
149         assertEquals(expectedOperation.getValue().getValue(), actualOperation.getValue().getValue(), TOLERANCE);
150     }
151 
152     @Test
153     void testSign() {
154         // GIVEN
155         final TestDerivative testDerivative = new TestDerivative(0.5);
156         final TestFieldDerivative testFieldDerivative = new TestFieldDerivative(testDerivative);
157         // WHEN
158         final TestFieldDerivative actualOperation = testFieldDerivative.sign();
159         // THEN
160         final TestFieldDerivative expectedOperation = new TestFieldDerivative(new TestDerivative(FastMath
161                 .signum(testDerivative.getValue())));
162         assertEquals(expectedOperation, actualOperation);
163     }
164 
165     private static class TestFieldDerivative implements FieldDerivative<TestDerivative, TestFieldDerivative> {
166 
167         private final TestDerivative value;
168 
169         TestFieldDerivative (TestDerivative value) {
170             this.value = value;
171         }
172 
173         @Override
174         public TestFieldDerivative getAddendum() {
175             return subtract(getReal());
176         }
177 
178         @Override
179         public TestFieldDerivative newInstance(double value) {
180             return newInstance(new TestDerivative(value));
181         }
182 
183         @Override
184         public TestFieldDerivative scalb(int n) {
185             return null;
186         }
187 
188         @Override
189         public TestFieldDerivative hypot(TestFieldDerivative y) throws MathIllegalArgumentException {
190             return null;
191         }
192 
193         @Override
194         public TestFieldDerivative exp() {
195             return newInstance(value.exp());
196         }
197 
198         @Override
199         public TestFieldDerivative expm1() {
200             return null;
201         }
202 
203         @Override
204         public TestFieldDerivative log() {
205             return newInstance(value.log());
206         }
207 
208         @Override
209         public TestFieldDerivative log1p() {
210             return null;
211         }
212 
213         @Override
214         public TestFieldDerivative cos() {
215             return null;
216         }
217 
218         @Override
219         public TestFieldDerivative sin() {
220             return null;
221         }
222 
223         @Override
224         public TestFieldDerivative asin() {
225             return newInstance(value.asin());
226         }
227 
228         @Override
229         public TestFieldDerivative atan() {
230             return null;
231         }
232 
233         @Override
234         public TestFieldDerivative atan2(TestFieldDerivative x) throws MathIllegalArgumentException {
235             return null;
236         }
237 
238         @Override
239         public TestFieldDerivative acosh() {
240             return null;
241         }
242 
243         @Override
244         public TestFieldDerivative asinh() {
245             return null;
246         }
247 
248         @Override
249         public TestFieldDerivative atanh() {
250             return null;
251         }
252 
253         @Override
254         public TestFieldDerivative linearCombination(TestFieldDerivative[] a, TestFieldDerivative[] b) throws MathIllegalArgumentException {
255             return null;
256         }
257 
258         @Override
259         public TestFieldDerivative linearCombination(TestFieldDerivative a1, TestFieldDerivative b1, TestFieldDerivative a2, TestFieldDerivative b2) {
260             return null;
261         }
262 
263         @Override
264         public TestFieldDerivative linearCombination(TestFieldDerivative a1, TestFieldDerivative b1, TestFieldDerivative a2, TestFieldDerivative b2, TestFieldDerivative a3, TestFieldDerivative b3) {
265             return null;
266         }
267 
268         @Override
269         public TestFieldDerivative linearCombination(TestFieldDerivative a1, TestFieldDerivative b1, TestFieldDerivative a2, TestFieldDerivative b2, TestFieldDerivative a3, TestFieldDerivative b3, TestFieldDerivative a4, TestFieldDerivative b4) {
270             return null;
271         }
272 
273         @Override
274         public TestFieldDerivative remainder(double a) {
275             return null;
276         }
277 
278         @Override
279         public TestFieldDerivative remainder(TestFieldDerivative a) {
280             return null;
281         }
282 
283         @Override
284         public TestFieldDerivative copySign(TestFieldDerivative sign) {
285             return null;
286         }
287 
288         @Override
289         public TestFieldDerivative abs() {
290             return null;
291         }
292 
293         @Override
294         public TestFieldDerivative add(TestFieldDerivative a) throws NullArgumentException {
295             return new TestFieldDerivative(value.add(a.value));
296         }
297 
298         @Override
299         public TestFieldDerivative negate() {
300             return new TestFieldDerivative(value.negate());
301         }
302 
303         @Override
304         public TestFieldDerivative multiply(TestFieldDerivative a) throws NullArgumentException {
305             return new TestFieldDerivative(value.multiply(a.value));
306         }
307 
308         @Override
309         public TestFieldDerivative reciprocal() throws MathRuntimeException {
310             return new TestFieldDerivative(value.reciprocal());
311         }
312 
313         @Override
314         public Field<TestFieldDerivative> getField() {
315             return null;
316         }
317 
318         @Override
319         public int getFreeParameters() {
320             return 0;
321         }
322 
323         @Override
324         public int getOrder() {
325             return 0;
326         }
327 
328         @Override
329         public TestDerivative getValue() {
330             return value;
331         }
332 
333         @Override
334         public TestDerivative getPartialDerivative(int... orders) throws MathIllegalArgumentException {
335             return null;
336         }
337 
338         @Override
339         public TestFieldDerivative newInstance(TestDerivative value) {
340             return new TestFieldDerivative(value);
341         }
342 
343         @Override
344         public boolean equals(Object obj) {
345             if (obj instanceof TestFieldDerivative) {
346                 return value.equals(((TestFieldDerivative) obj).value);
347             } else {
348                 return false;
349             }
350         }
351     }
352 
353 }