1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.hipparchus;
19
20 import org.hipparchus.exception.MathIllegalArgumentException;
21 import org.hipparchus.exception.MathRuntimeException;
22 import org.hipparchus.exception.NullArgumentException;
23 import org.hipparchus.util.FastMath;
24 import org.junit.jupiter.api.Test;
25
26 import static org.junit.jupiter.api.Assertions.assertEquals;
27 import static org.junit.jupiter.api.Assertions.assertFalse;
28 import static org.junit.jupiter.api.Assertions.assertTrue;
29
30 class CalculusFieldElementTest {
31
32 @Test
33 void testMultiplyInt() {
34
35 final double value = 3.;
36 final int factor = 2;
37 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
38
39 final TestCalculusFieldElement actualOperation = testElement.multiply(factor);
40
41 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(value * factor);
42 assertEquals(expectedOperation, actualOperation);
43 }
44
45 @Test
46 void testAddDouble() {
47
48 final double value1 = 1.;
49 final double value2 = 2.;
50 final TestCalculusFieldElement testElement1 = new TestCalculusFieldElement(value1);
51
52 final TestCalculusFieldElement actualOperation = testElement1.add(value2);
53
54 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(value1 + value2);
55 assertEquals(expectedOperation, actualOperation);
56 }
57
58 @Test
59 void testSubtractDouble() {
60
61 final double value1 = 1.;
62 final double value2 = 2.;
63 final TestCalculusFieldElement testElement1 = new TestCalculusFieldElement(value1);
64
65 final TestCalculusFieldElement actualOperation = testElement1.subtract(value2);
66
67 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(value1 - value2);
68 assertEquals(expectedOperation, actualOperation);
69 }
70
71 @Test
72 void testMultiplyDouble() {
73
74 final double value1 = 3.;
75 final double value2 = 2.;
76 final TestCalculusFieldElement testElement1 = new TestCalculusFieldElement(value1);
77
78 final TestCalculusFieldElement actualOperation = testElement1.multiply(value2);
79
80 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(value1 * value2);
81 assertEquals(expectedOperation, actualOperation);
82 }
83
84 @Test
85 void testDivideDouble() {
86
87 final double value1 = 3.;
88 final double value2 = 2.;
89 final TestCalculusFieldElement testElement1 = new TestCalculusFieldElement(value1);
90
91 final TestCalculusFieldElement actualOperation = testElement1.divide(value2);
92
93 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(value1 / value2);
94 assertEquals(expectedOperation, actualOperation);
95 }
96
97 @Test
98 void testSubtract() {
99
100 final double value1 = 1.;
101 final double value2 = 2.;
102 final TestCalculusFieldElement testElement1 = new TestCalculusFieldElement(value1);
103 final TestCalculusFieldElement testElement2 = new TestCalculusFieldElement(value2);
104
105 final TestCalculusFieldElement actualOperation = testElement1.subtract(testElement2);
106
107 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(value1 - value2);
108 assertEquals(expectedOperation, actualOperation);
109 }
110
111 @Test
112 void testDivide() {
113
114 final double value1 = 3.;
115 final double value2 = 2.;
116 final TestCalculusFieldElement testElement1 = new TestCalculusFieldElement(value1);
117 final TestCalculusFieldElement testElement2 = new TestCalculusFieldElement(value2);
118
119 final TestCalculusFieldElement actualOperation = testElement1.divide(testElement2);
120
121 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(value1 / value2);
122 assertEquals(expectedOperation, actualOperation);
123 }
124
125 @Test
126 void testSquare() {
127
128 final double value = 3.;
129 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
130
131 final TestCalculusFieldElement actualOperation = testElement.square();
132
133 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(value * value);
134 assertEquals(expectedOperation, actualOperation);
135 }
136
137 @Test
138 void testSqrt() {
139
140 final double value = 3.;
141 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
142
143 final TestCalculusFieldElement actualOperation = testElement.sqrt();
144
145 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.sqrt(value));
146 assertEquals(expectedOperation, actualOperation);
147 }
148
149 @Test
150 void testCbrt() {
151
152 final double value = 3.;
153 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
154
155 final TestCalculusFieldElement actualOperation = testElement.cbrt();
156
157 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.cbrt(value));
158 assertEquals(expectedOperation, actualOperation);
159 }
160
161 @Test
162 void testRootN() {
163
164 final int n = 4;
165 final double value = 3.;
166 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
167
168 final TestCalculusFieldElement actualOperation = testElement.rootN(n);
169
170 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.pow(value, 1. / n));
171 assertEquals(expectedOperation, actualOperation);
172 }
173
174 @Test
175 void testPowInt() {
176
177 final int exponent = 4;
178 final double value = 3.;
179 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
180
181 final TestCalculusFieldElement actualOperation = testElement.pow(exponent);
182
183 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.pow(value, exponent));
184 assertEquals(expectedOperation, actualOperation);
185 }
186
187 @Test
188 void testPowDouble() {
189
190 final double exponent = 4.5;
191 final double value = 3.;
192 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
193
194 final TestCalculusFieldElement actualOperation = testElement.pow(exponent);
195
196 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.pow(value, exponent));
197 assertEquals(expectedOperation, actualOperation);
198 }
199
200 @Test
201 void testSin() {
202
203 final double value = 3.;
204 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
205
206 final TestCalculusFieldElement actualOperation = testElement.sin();
207
208 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.sin(value));
209 assertEquals(expectedOperation, actualOperation);
210 }
211
212 @Test
213 void testCos() {
214
215 final double value = 3.;
216 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
217
218 final TestCalculusFieldElement actualOperation = testElement.cos();
219
220 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.cos(value));
221 assertEquals(expectedOperation, actualOperation);
222 }
223
224 @Test
225 void testTan() {
226
227 final double value = 3.;
228 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
229
230 final TestCalculusFieldElement actualOperation = testElement.tan();
231
232 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.tan(value));
233 assertEquals(expectedOperation, actualOperation);
234 }
235
236 @Test
237 void testSinh() {
238
239 final double value = 3.;
240 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
241
242 final TestCalculusFieldElement actualOperation = testElement.sinh();
243
244 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.sinh(value));
245 assertEquals(expectedOperation, actualOperation);
246 }
247
248 @Test
249 void testCosh() {
250
251 final double value = 3.;
252 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
253
254 final TestCalculusFieldElement actualOperation = testElement.cosh();
255
256 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.cosh(value));
257 assertEquals(expectedOperation, actualOperation);
258 }
259
260 @Test
261 void testTanh() {
262
263 final double value = 3.;
264 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
265
266 final TestCalculusFieldElement actualOperation = testElement.tanh();
267
268 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.tanh(value));
269 assertEquals(expectedOperation, actualOperation);
270 }
271
272 @Test
273 void testSign() {
274
275 final double value = 3.6;
276 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
277
278 final TestCalculusFieldElement actualOperation = testElement.sign();
279
280 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.signum(value));
281 assertEquals(expectedOperation, actualOperation);
282 }
283
284 @Test
285 void testUlp() {
286
287 final double value = 3.6;
288 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
289
290 final TestCalculusFieldElement actualOperation = testElement.ulp();
291
292 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.ulp(value));
293 assertEquals(expectedOperation, actualOperation);
294 }
295
296 @Test
297 void testFloor() {
298
299 final double value = 3.6;
300 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
301
302 final TestCalculusFieldElement actualOperation = testElement.floor();
303
304 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.floor(value));
305 assertEquals(expectedOperation, actualOperation);
306 }
307
308 @Test
309 void testCeil() {
310
311 final double value = 3.6;
312 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
313
314 final TestCalculusFieldElement actualOperation = testElement.ceil();
315
316 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.ceil(value));
317 assertEquals(expectedOperation, actualOperation);
318 }
319
320 @Test
321 void testRint() {
322
323 final double value = 3.6;
324 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
325
326 final TestCalculusFieldElement actualOperation = testElement.rint();
327
328 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.rint(value));
329 assertEquals(expectedOperation, actualOperation);
330 }
331
332 @Test
333 void testToDegrees() {
334
335 final double value = 3.;
336 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
337
338 final TestCalculusFieldElement actualOperation = testElement.toDegrees();
339
340 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.toDegrees(value));
341 assertEquals(expectedOperation, actualOperation);
342 }
343
344 @Test
345 void testToRadians() {
346
347 final double value = 3.;
348 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
349
350 final TestCalculusFieldElement actualOperation = testElement.toRadians();
351
352 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(FastMath.toRadians(value));
353 assertEquals(expectedOperation, actualOperation);
354 }
355
356 @Test
357 void testLinearCombinationDouble2() {
358
359 final double value1 = 3.;
360 final double value2 = 2.;
361 final TestCalculusFieldElement testElement1 = new TestCalculusFieldElement(value1);
362 final TestCalculusFieldElement testElement2 = new TestCalculusFieldElement(value2);
363 final double coeff1 = -5.;
364 final double coeff2 = 4.;
365
366 final TestCalculusFieldElement actualOperation = testElement1.linearCombination(coeff1, testElement1,
367 coeff2, testElement2);
368
369 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(
370 coeff1 * value1 + coeff2 * value2);
371 assertEquals(expectedOperation, actualOperation);
372 }
373
374 @Test
375 void testLinearCombinationDouble3() {
376
377 final double value1 = 3.;
378 final double value2 = 2.;
379 final double value3 = -1;
380 final TestCalculusFieldElement testElement1 = new TestCalculusFieldElement(value1);
381 final TestCalculusFieldElement testElement2 = new TestCalculusFieldElement(value2);
382 final TestCalculusFieldElement testElement3 = new TestCalculusFieldElement(value3);
383 final double coeff1 = -5.;
384 final double coeff2 = 4.;
385 final double coeff3 = 6.;
386
387 final TestCalculusFieldElement actualOperation = testElement1.linearCombination(coeff1, testElement1,
388 coeff2, testElement2, coeff3, testElement3);
389
390 final TestCalculusFieldElement expectedOperation = new TestCalculusFieldElement(
391 coeff1 * value1 + coeff2 * value2 + coeff3 * value3);
392 assertEquals(expectedOperation, actualOperation);
393 }
394
395 @Test
396 void testGetExponent() {
397
398 final double value = 3.5;
399 final TestCalculusFieldElement testElement = new TestCalculusFieldElement(value);
400
401 final int actualOperation = testElement.getExponent();
402
403 final int expectedOperation = FastMath.getExponent(value);
404 assertEquals(expectedOperation, actualOperation);
405 }
406
407 @Test
408 void testIsFinite() {
409 assertTrue(new TestCalculusFieldElement(1.).isFinite());
410 assertFalse(new TestCalculusFieldElement(Double.NaN).isFinite());
411 assertFalse(new TestCalculusFieldElement(Double.POSITIVE_INFINITY).isFinite());
412 }
413
414 @Test
415 void testIsInfinite() {
416 assertFalse(new TestCalculusFieldElement(1.).isInfinite());
417 assertTrue(new TestCalculusFieldElement(Double.POSITIVE_INFINITY).isInfinite());
418 }
419
420 @Test
421 void testIsNan() {
422 assertFalse(new TestCalculusFieldElement(1.).isNaN());
423 assertTrue(new TestCalculusFieldElement(Double.NaN).isNaN());
424 }
425
426 @Test
427 void testNorm() {
428 assertEquals(0., new TestCalculusFieldElement(0.).norm(), 0.0);
429 }
430
431 private static class TestCalculusFieldElement implements CalculusFieldElement<TestCalculusFieldElement> {
432
433 private final double value;
434
435 TestCalculusFieldElement (double value) {
436 this.value = value;
437 }
438
439 @Override
440 public TestCalculusFieldElement getAddendum() {
441 return subtract(getReal());
442 }
443
444 @Override
445 public TestCalculusFieldElement newInstance(double value) {
446 return new TestCalculusFieldElement(value);
447 }
448
449 @Override
450 public TestCalculusFieldElement scalb(int n) {
451 return null;
452 }
453
454 @Override
455 public TestCalculusFieldElement ulp() {
456 return new TestCalculusFieldElement(FastMath.ulp(value));
457 }
458
459 @Override
460 public TestCalculusFieldElement hypot(TestCalculusFieldElement y) throws MathIllegalArgumentException {
461 return null;
462 }
463
464 @Override
465 public TestCalculusFieldElement pow(TestCalculusFieldElement e) throws MathIllegalArgumentException {
466 return new TestCalculusFieldElement(FastMath.pow(value, e.value));
467 }
468
469 @Override
470 public TestCalculusFieldElement exp() {
471 return null;
472 }
473
474 @Override
475 public TestCalculusFieldElement expm1() {
476 return null;
477 }
478
479 @Override
480 public TestCalculusFieldElement log() {
481 return null;
482 }
483
484 @Override
485 public TestCalculusFieldElement log1p() {
486 return null;
487 }
488
489 @Override
490 public TestCalculusFieldElement log10() {
491 return null;
492 }
493
494 @Override
495 public TestCalculusFieldElement sin() {
496 return new TestCalculusFieldElement(FastMath.sin(value));
497 }
498
499 @Override
500 public TestCalculusFieldElement cos() {
501 return new TestCalculusFieldElement(FastMath.cos(value));
502 }
503
504 @Override
505 public TestCalculusFieldElement acos() {
506 return null;
507 }
508
509 @Override
510 public TestCalculusFieldElement asin() {
511 return null;
512 }
513
514 @Override
515 public TestCalculusFieldElement atan() {
516 return null;
517 }
518
519 @Override
520 public TestCalculusFieldElement atan2(TestCalculusFieldElement x) throws MathIllegalArgumentException {
521 return null;
522 }
523
524 @Override
525 public TestCalculusFieldElement sinh() {
526 return new TestCalculusFieldElement(FastMath.sinh(value));
527 }
528
529 @Override
530 public TestCalculusFieldElement cosh() {
531 return new TestCalculusFieldElement(FastMath.cosh(value));
532 }
533
534 @Override
535 public TestCalculusFieldElement acosh() {
536 return null;
537 }
538
539 @Override
540 public TestCalculusFieldElement asinh() {
541 return null;
542 }
543
544 @Override
545 public TestCalculusFieldElement atanh() {
546 return null;
547 }
548
549 @Override
550 public TestCalculusFieldElement linearCombination(TestCalculusFieldElement[] a, TestCalculusFieldElement[] b) throws MathIllegalArgumentException {
551 return null;
552 }
553
554 @Override
555 public TestCalculusFieldElement linearCombination(TestCalculusFieldElement a1, TestCalculusFieldElement b1, TestCalculusFieldElement a2, TestCalculusFieldElement b2) {
556 return newInstance(a1.value * b1.value + a2.value * b2.value);
557 }
558
559 @Override
560 public TestCalculusFieldElement linearCombination(TestCalculusFieldElement a1, TestCalculusFieldElement b1, TestCalculusFieldElement a2, TestCalculusFieldElement b2, TestCalculusFieldElement a3, TestCalculusFieldElement b3) {
561 return newInstance(a1.value * b1.value + a2.value * b2.value + a3.value * b3.value);
562 }
563
564 @Override
565 public TestCalculusFieldElement linearCombination(TestCalculusFieldElement a1, TestCalculusFieldElement b1, TestCalculusFieldElement a2, TestCalculusFieldElement b2, TestCalculusFieldElement a3, TestCalculusFieldElement b3, TestCalculusFieldElement a4, TestCalculusFieldElement b4) {
566 return newInstance(a1.value * b1.value + a2.value * b2.value + a3.value * b3.value +
567 a4.value * b4.value);
568 }
569
570 @Override
571 public TestCalculusFieldElement ceil() {
572 return new TestCalculusFieldElement(FastMath.ceil(value));
573 }
574
575 @Override
576 public TestCalculusFieldElement floor() {
577 return new TestCalculusFieldElement(FastMath.floor(value));
578 }
579
580 @Override
581 public TestCalculusFieldElement rint() {
582 return new TestCalculusFieldElement(FastMath.rint(value));
583 }
584
585 @Override
586 public TestCalculusFieldElement remainder(double a) {
587 return null;
588 }
589
590 @Override
591 public TestCalculusFieldElement remainder(TestCalculusFieldElement a) {
592 return null;
593 }
594
595 @Override
596 public TestCalculusFieldElement sign() {
597 return new TestCalculusFieldElement(FastMath.signum(value));
598 }
599
600 @Override
601 public TestCalculusFieldElement copySign(TestCalculusFieldElement sign) {
602 return null;
603 }
604
605 @Override
606 public TestCalculusFieldElement abs() {
607 return new TestCalculusFieldElement(FastMath.abs(value));
608 }
609
610 @Override
611 public double getReal() {
612 return value;
613 }
614
615 @Override
616 public TestCalculusFieldElement add(TestCalculusFieldElement a) throws NullArgumentException {
617 return new TestCalculusFieldElement(value + a.value);
618 }
619
620 @Override
621 public TestCalculusFieldElement negate() {
622 return new TestCalculusFieldElement(-value);
623 }
624
625 @Override
626 public TestCalculusFieldElement multiply(TestCalculusFieldElement a) throws NullArgumentException {
627 return new TestCalculusFieldElement(value * a.value);
628 }
629
630 @Override
631 public TestCalculusFieldElement reciprocal() throws MathRuntimeException {
632 return new TestCalculusFieldElement(1. / value);
633 }
634
635 @Override
636 public Field<TestCalculusFieldElement> getField() {
637 return null;
638 }
639
640 @Override
641 public boolean equals(Object obj) {
642 if (obj instanceof TestCalculusFieldElement) {
643 return Double.compare(value, ((TestCalculusFieldElement) obj).value) == 0;
644 } else {
645 return false;
646 }
647 }
648 }
649
650 }