1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.orekit.utils;
19
20 import org.hipparchus.CalculusFieldElement;
21 import org.hipparchus.complex.Complex;
22 import org.hipparchus.complex.ComplexField;
23 import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
24 import org.hipparchus.geometry.euclidean.threed.Vector3D;
25 import org.junit.jupiter.api.Assertions;
26 import org.junit.jupiter.api.Test;
27 import org.mockito.Mockito;
28 import org.orekit.frames.Frame;
29 import org.orekit.time.AbsoluteDate;
30 import org.orekit.time.FieldAbsoluteDate;
31
32 class ExtendedPositionProviderTest {
33
34 @Test
35 void testGetPVCoordinates() {
36
37 final TestExtendedPositionProvider positionProvider = new TestExtendedPositionProvider();
38 final Frame frame = Mockito.mock(Frame.class);
39 final AbsoluteDate date = AbsoluteDate.J2000_EPOCH;
40
41 final TimeStampedPVCoordinates pvCoordinates = positionProvider.getPVCoordinates(date, frame);
42
43 final Vector3D expectedPosition = positionProvider.getPosition(date, frame);
44 Assertions.assertEquals(expectedPosition, pvCoordinates.getPosition());
45 Assertions.assertEquals(1., pvCoordinates.getVelocity().getX());
46 Assertions.assertEquals(0., pvCoordinates.getAcceleration().getNorm());
47 }
48
49 @Test
50 void testGetPVCoordinatesField() {
51
52 final TestExtendedPositionProvider positionProvider = new TestExtendedPositionProvider();
53 final Frame frame = Mockito.mock(Frame.class);
54 final FieldAbsoluteDate<Complex> date = FieldAbsoluteDate.getJ2000Epoch(ComplexField.getInstance());
55
56 final TimeStampedFieldPVCoordinates<Complex> pvCoordinates = positionProvider.getPVCoordinates(date, frame);
57
58 final FieldVector3D<Complex> expectedPosition = positionProvider.getPosition(date, frame);
59 Assertions.assertEquals(expectedPosition, pvCoordinates.getPosition());
60 Assertions.assertEquals(1., pvCoordinates.getVelocity().getX().getReal());
61 Assertions.assertEquals(0., pvCoordinates.getAcceleration().getNorm().getReal());
62 }
63
64 @Test
65 void testToFieldPVCoordinatesProvider() {
66
67 final TestExtendedPositionProvider positionProvider = new TestExtendedPositionProvider();
68 final Frame frame = Mockito.mock(Frame.class);
69 final FieldAbsoluteDate<Complex> date = FieldAbsoluteDate.getJ2000Epoch(ComplexField.getInstance());
70
71 final FieldPVCoordinatesProvider<Complex> fieldPVCoordinatesProvider = positionProvider
72 .toFieldPVCoordinatesProvider(ComplexField.getInstance());
73
74 final FieldVector3D<Complex> expectedPosition = positionProvider.getPosition(date, frame);
75 final FieldVector3D<Complex> actualPosition = fieldPVCoordinatesProvider.getPosition(date, frame);
76 Assertions.assertEquals(expectedPosition, actualPosition);
77 final FieldPVCoordinates<Complex> expectedPV = positionProvider.getPVCoordinates(date, frame);
78 final FieldPVCoordinates<Complex> actualPV = fieldPVCoordinatesProvider.getPVCoordinates(date, frame);
79 Assertions.assertEquals(expectedPV.getPosition(), actualPV.getPosition());
80 Assertions.assertEquals(expectedPV.getVelocity(), actualPV.getVelocity());
81 Assertions.assertEquals(expectedPV.getAcceleration(), actualPV.getAcceleration());
82 }
83
84 private static class TestExtendedPositionProvider implements ExtendedPositionProvider {
85
86 private final AbsoluteDate referenceDate = AbsoluteDate.ARBITRARY_EPOCH;
87
88 @Override
89 public Vector3D getPosition(AbsoluteDate date, Frame frame) {
90 final double shift = date.durationFrom(referenceDate);
91 return new Vector3D(1. + shift, 2., 3.);
92 }
93
94 @Override
95 public <T extends CalculusFieldElement<T>> FieldVector3D<T> getPosition(FieldAbsoluteDate<T> date, Frame frame) {
96 final T zero = date.getField().getZero();
97 final T shift = date.durationFrom(referenceDate);
98 return new FieldVector3D<>(zero.newInstance(1.).add(shift), zero.newInstance(2.), zero.newInstance(3.));
99 }
100 }
101
102 }