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.BeforeEach;
27 import org.junit.jupiter.api.Test;
28 import org.mockito.Mockito;
29 import org.orekit.Utils;
30 import org.orekit.frames.Frame;
31 import org.orekit.time.AbsoluteDate;
32 import org.orekit.time.FieldAbsoluteDate;
33
34 class ExtendedPositionProviderTest {
35
36 @Test
37 void testGetVelocity() {
38
39 final TestExtendedPositionProvider positionProvider = new TestExtendedPositionProvider();
40 final Frame frame = Mockito.mock(Frame.class);
41 final AbsoluteDate date = AbsoluteDate.J2000_EPOCH;
42
43 final Vector3D velocity = positionProvider.getVelocity(date, frame);
44
45 final TimeStampedPVCoordinates pvCoordinates = positionProvider.getPVCoordinates(date, frame);
46 Assertions.assertEquals(pvCoordinates.getVelocity(), velocity);
47 }
48
49 @Test
50 void testGetPVCoordinates() {
51
52 final TestExtendedPositionProvider positionProvider = new TestExtendedPositionProvider();
53 final Frame frame = Mockito.mock(Frame.class);
54 final AbsoluteDate date = AbsoluteDate.J2000_EPOCH;
55
56 final TimeStampedPVCoordinates pvCoordinates = positionProvider.getPVCoordinates(date, frame);
57
58 final Vector3D expectedPosition = positionProvider.getPosition(date, frame);
59 Assertions.assertEquals(expectedPosition, pvCoordinates.getPosition());
60 Assertions.assertEquals(1., pvCoordinates.getVelocity().getX());
61 Assertions.assertEquals(0., pvCoordinates.getAcceleration().getNorm());
62 }
63
64 @Test
65 void testGetPVCoordinatesField() {
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 TimeStampedFieldPVCoordinates<Complex> pvCoordinates = positionProvider.getPVCoordinates(date, frame);
72
73 final FieldVector3D<Complex> expectedPosition = positionProvider.getPosition(date, frame);
74 Assertions.assertEquals(expectedPosition, pvCoordinates.getPosition());
75 Assertions.assertEquals(1., pvCoordinates.getVelocity().getX().getReal());
76 Assertions.assertEquals(0., pvCoordinates.getAcceleration().getNorm().getReal());
77 }
78
79 @Test
80 void testToFieldPVCoordinatesProvider() {
81
82 final TestExtendedPositionProvider positionProvider = new TestExtendedPositionProvider();
83 final Frame frame = Mockito.mock(Frame.class);
84 final FieldAbsoluteDate<Complex> date = FieldAbsoluteDate.getJ2000Epoch(ComplexField.getInstance());
85
86 final FieldPVCoordinatesProvider<Complex> fieldPVCoordinatesProvider = positionProvider
87 .toFieldPVCoordinatesProvider(ComplexField.getInstance());
88
89 final FieldVector3D<Complex> expectedPosition = positionProvider.getPosition(date, frame);
90 final FieldVector3D<Complex> actualPosition = fieldPVCoordinatesProvider.getPosition(date, frame);
91 Assertions.assertEquals(expectedPosition, actualPosition);
92 final FieldPVCoordinates<Complex> expectedPV = positionProvider.getPVCoordinates(date, frame);
93 final FieldPVCoordinates<Complex> actualPV = fieldPVCoordinatesProvider.getPVCoordinates(date, frame);
94 Assertions.assertEquals(expectedPV.getPosition(), actualPV.getPosition());
95 Assertions.assertEquals(expectedPV.getVelocity(), actualPV.getVelocity());
96 Assertions.assertEquals(expectedPV.getAcceleration(), actualPV.getAcceleration());
97 }
98
99 private static class TestExtendedPositionProvider implements ExtendedPositionProvider {
100
101 private final AbsoluteDate referenceDate = AbsoluteDate.ARBITRARY_EPOCH;
102
103 @Override
104 public Vector3D getPosition(AbsoluteDate date, Frame frame) {
105 final double shift = date.durationFrom(referenceDate);
106 return new Vector3D(1. + shift, 2., 3.);
107 }
108
109 @Override
110 public <T extends CalculusFieldElement<T>> FieldVector3D<T> getPosition(FieldAbsoluteDate<T> date, Frame frame) {
111 final T zero = date.getField().getZero();
112 final T shift = date.durationFrom(referenceDate);
113 return new FieldVector3D<>(zero.newInstance(1.).add(shift), zero.newInstance(2.), zero.newInstance(3.));
114 }
115 }
116
117 @BeforeEach
118 public void setUp() {
119 Utils.setDataRoot("regular-data");
120 }
121
122 }