1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation;
18
19 import org.hipparchus.complex.Complex;
20 import org.hipparchus.complex.ComplexField;
21 import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
22 import org.hipparchus.geometry.euclidean.threed.Vector3D;
23 import org.junit.jupiter.api.Assertions;
24 import org.junit.jupiter.api.Test;
25 import org.mockito.Mockito;
26 import org.orekit.attitudes.AttitudeProvider;
27 import org.orekit.frames.Frame;
28 import org.orekit.frames.FramesFactory;
29 import org.orekit.propagation.events.FieldEventDetector;
30 import org.orekit.propagation.sampling.FieldStepHandlerMultiplexer;
31 import org.orekit.time.AbsoluteDate;
32 import org.orekit.time.FieldAbsoluteDate;
33 import org.orekit.utils.FieldPVCoordinates;
34 import org.orekit.utils.PVCoordinates;
35 import org.orekit.utils.TimeStampedFieldPVCoordinates;
36 import org.orekit.utils.TimeStampedPVCoordinates;
37
38 import java.util.Collection;
39 import java.util.List;
40
41 class FieldPropagatorTest {
42
43 @Test
44 void testGetPosition() {
45
46 final TestFieldPropagator testPropagator = new TestFieldPropagator();
47 final AbsoluteDate date = AbsoluteDate.ARBITRARY_EPOCH;
48 final FieldAbsoluteDate<Complex> fieldDate = new FieldAbsoluteDate<>(ComplexField.getInstance(), date);
49 final Frame frame = FramesFactory.getGCRF();
50
51 final FieldVector3D<Complex> actualPosition = testPropagator.getPosition(fieldDate, frame);
52
53 final FieldPVCoordinates<Complex> expectedState = testPropagator.propagate(fieldDate).getPVCoordinates(frame);
54 Assertions.assertEquals(expectedState.getPosition().toVector3D(), actualPosition.toVector3D());
55 }
56
57 @Test
58 void testGetVelocity() {
59
60 final TestFieldPropagator testPropagator = new TestFieldPropagator();
61 final AbsoluteDate date = AbsoluteDate.ARBITRARY_EPOCH;
62 final FieldAbsoluteDate<Complex> fieldDate = new FieldAbsoluteDate<>(ComplexField.getInstance(), date);
63 final Frame frame = FramesFactory.getGCRF();
64
65 final FieldVector3D<Complex> actualVelocity = testPropagator.getVelocity(fieldDate, frame);
66
67 final FieldPVCoordinates<Complex> expectedState = testPropagator.propagate(fieldDate).getPVCoordinates(frame);
68 Assertions.assertEquals(expectedState.getVelocity().toVector3D(), actualVelocity.toVector3D());
69 }
70
71 @Test
72 void testGetPVCoordinates() {
73
74 final TestFieldPropagator testPropagator = new TestFieldPropagator();
75 final AbsoluteDate date = AbsoluteDate.ARBITRARY_EPOCH;
76 final FieldAbsoluteDate<Complex> fieldDate = new FieldAbsoluteDate<>(ComplexField.getInstance(), date);
77 final Frame frame = FramesFactory.getGCRF();
78
79 final FieldPVCoordinates<Complex> actualState = testPropagator.getPVCoordinates(fieldDate, frame);
80
81 final FieldPVCoordinates<Complex> expectedState = testPropagator.propagate(fieldDate).getPVCoordinates(frame);
82 Assertions.assertEquals(expectedState.getPosition().toVector3D(), actualState.getPosition().toVector3D());
83 Assertions.assertEquals(expectedState.getVelocity().toVector3D(), actualState.getVelocity().toVector3D());
84 }
85
86 @SuppressWarnings("unchecked")
87 private static FieldSpacecraftState<Complex> mockFieldSpacecraftState(final FieldAbsoluteDate<Complex> date) {
88 final FieldSpacecraftState<Complex> mockedFieldSpacecraftState = Mockito.mock(FieldSpacecraftState.class);
89 Mockito.when(mockedFieldSpacecraftState.getDate()).thenReturn(date);
90 final ComplexField complexField = ComplexField.getInstance();
91 final PVCoordinates pvCoordinates = new PVCoordinates(Vector3D.MINUS_I, Vector3D.PLUS_K);
92 final TimeStampedPVCoordinates tspvc = new TimeStampedPVCoordinates(date.toAbsoluteDate(), pvCoordinates);
93 final TimeStampedFieldPVCoordinates<Complex> fieldPVCoordinates = new TimeStampedFieldPVCoordinates<>(
94 complexField, tspvc);
95 Mockito.when(mockedFieldSpacecraftState.getPVCoordinates()).thenReturn(fieldPVCoordinates);
96 Mockito.when(mockedFieldSpacecraftState.getPVCoordinates(Mockito.any(Frame.class)))
97 .thenReturn(fieldPVCoordinates);
98 Mockito.when(mockedFieldSpacecraftState.getPosition(Mockito.any(Frame.class)))
99 .thenReturn(fieldPVCoordinates.getPosition());
100 Mockito.when(mockedFieldSpacecraftState.getVelocity()).thenReturn(fieldPVCoordinates.getVelocity());
101 return mockedFieldSpacecraftState;
102 }
103
104 private static class TestFieldPropagator implements FieldPropagator<Complex> {
105
106 @Override
107 public FieldStepHandlerMultiplexer<Complex> getMultiplexer() {
108 return null;
109 }
110
111 @Override
112 public FieldEphemerisGenerator<Complex> getEphemerisGenerator() {
113 return null;
114 }
115
116 @Override
117 public FieldSpacecraftState<Complex> getInitialState() {
118 return null;
119 }
120
121 @Override
122 public void resetInitialState(FieldSpacecraftState<Complex> state) {
123
124 }
125
126 @Override
127 public void addAdditionalDataProvider(FieldAdditionalDataProvider<?, Complex> additionalDataProvider) {
128
129 }
130
131 @Override
132 public List<FieldAdditionalDataProvider<?, Complex>> getAdditionalDataProviders() {
133 return null;
134 }
135
136 @Override
137 public boolean isAdditionalDataManaged(String name) {
138 return false;
139 }
140
141 @Override
142 public String[] getManagedAdditionalData() {
143 return new String[0];
144 }
145
146 @Override
147 public <D extends FieldEventDetector<Complex>> void addEventDetector(D detector) {
148
149 }
150
151 @Override
152 public Collection<FieldEventDetector<Complex>> getEventDetectors() {
153 return null;
154 }
155
156 @Override
157 public void clearEventsDetectors() {
158
159 }
160
161 @Override
162 public AttitudeProvider getAttitudeProvider() {
163 return null;
164 }
165
166 @Override
167 public void setAttitudeProvider(AttitudeProvider attitudeProvider) {
168
169 }
170
171 @Override
172 public Frame getFrame() {
173 return FramesFactory.getGCRF();
174 }
175
176 @Override
177 public FieldSpacecraftState<Complex> propagate(FieldAbsoluteDate<Complex> target) {
178 return mockFieldSpacecraftState(target);
179 }
180
181 @Override
182 public FieldSpacecraftState<Complex> propagate(FieldAbsoluteDate<Complex> start, FieldAbsoluteDate<Complex> target) {
183 return null;
184 }
185 }
186
187 }