1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.orekit.propagation.conversion;
19
20 import org.hipparchus.geometry.euclidean.threed.Vector3D;
21 import org.junit.jupiter.api.Assertions;
22 import org.junit.jupiter.api.DisplayName;
23 import org.junit.jupiter.api.Test;
24 import org.orekit.TestUtils;
25 import org.orekit.Utils;
26 import org.orekit.attitudes.AttitudeProvider;
27 import org.orekit.frames.Frame;
28 import org.orekit.frames.FramesFactory;
29 import org.orekit.orbits.CartesianOrbit;
30 import org.orekit.orbits.Orbit;
31 import org.orekit.propagation.SpacecraftState;
32 import org.orekit.propagation.SpacecraftStateInterpolator;
33 import org.orekit.propagation.analytical.Ephemeris;
34 import org.orekit.time.AbsoluteDate;
35 import org.orekit.time.TimeInterpolator;
36 import org.orekit.utils.Constants;
37 import org.orekit.utils.PVCoordinates;
38
39 import java.util.ArrayList;
40 import java.util.Arrays;
41 import java.util.List;
42
43 import static org.junit.jupiter.api.Assertions.assertEquals;
44 import static org.mockito.Mockito.mock;
45 import static org.mockito.Mockito.when;
46 import static org.orekit.propagation.conversion.AbstractPropagatorBuilderTest.assertPropagatorBuilderIsACopy;
47
48
49
50
51
52
53 public class EphemerisPropagatorBuilderTest {
54
55 @Test
56 @DisplayName("Test issue 1316 : Regression in EphemerisPropagatorBuilder API")
57 void testIssue1316() {
58
59 final int interpolationPoints = 3;
60 final double extrapolationThresholds = 0.007;
61
62
63 final AttitudeProvider mockAttitudeProvider = mock(AttitudeProvider.class);
64
65
66 final Orbit defaultOrbit = TestUtils.getDefaultOrbit(new AbsoluteDate());
67
68
69 final SpacecraftState mockState1 = mock(SpacecraftState.class);
70 when(mockState1.getFrame()).thenReturn(defaultOrbit.getFrame());
71 when(mockState1.getOrbit()).thenReturn(defaultOrbit);
72 final SpacecraftState mockState2 = mock(SpacecraftState.class);
73 final SpacecraftState mockState3 = mock(SpacecraftState.class);
74
75 final List<SpacecraftState> fakeStates = Arrays.asList(mockState1, mockState2, mockState3);
76
77
78 final EphemerisPropagatorBuilder builder = new EphemerisPropagatorBuilder(fakeStates,
79 interpolationPoints,
80 extrapolationThresholds,
81 mockAttitudeProvider);
82
83
84
85 assertEquals(defaultOrbit.getFrame(), builder.getFrame());
86 assertEquals(defaultOrbit.getType(), builder.getOrbitType());
87 assertEquals(defaultOrbit.getDate(), builder.getInitialOrbitDate());
88 assertEquals(defaultOrbit.getMu(), builder.getMu());
89
90
91 assertEquals(mockAttitudeProvider, builder.getAttitudeProvider());
92 }
93
94 @Test
95 @DisplayName("Test buildPropagator method")
96 void should_create_expected_propagator() {
97
98
99 final Orbit orbit = new CartesianOrbit(new PVCoordinates(
100 new Vector3D(Constants.EIGEN5C_EARTH_EQUATORIAL_RADIUS + 400000, 0, 0),
101 new Vector3D(0, 7668.6, 0)), FramesFactory.getGCRF(), new AbsoluteDate(),
102 Constants.EIGEN5C_EARTH_MU);
103 final List<SpacecraftState> states = new ArrayList<>();
104 states.add(new SpacecraftState(orbit));
105 states.add(new SpacecraftState(orbit.shiftedBy(1)));
106
107 final Frame frame = FramesFactory.getGCRF();
108 final TimeInterpolator<SpacecraftState> stateInterpolator = new SpacecraftStateInterpolator(frame);
109
110 final EphemerisPropagatorBuilder builder =
111 new EphemerisPropagatorBuilder(states, stateInterpolator);
112
113
114 final Ephemeris builtPropagator = (Ephemeris) builder.buildPropagator();
115
116
117 final Ephemeris expectedPropagator = new Ephemeris(states, stateInterpolator);
118
119 assertEquals(expectedPropagator.getFrame(), builtPropagator.getFrame());
120 assertEquals(expectedPropagator.getMinDate(), builtPropagator.getMinDate());
121 assertEquals(expectedPropagator.getMaxDate(), builtPropagator.getMaxDate());
122
123 Assertions.assertArrayEquals(expectedPropagator.getManagedAdditionalData(),
124 builtPropagator.getManagedAdditionalData());
125
126
127 }
128
129 @Test
130 void testClone() {
131
132
133 final Orbit orbit = new CartesianOrbit(new PVCoordinates(
134 new Vector3D(Constants.EIGEN5C_EARTH_EQUATORIAL_RADIUS + 400000, 0, 0),
135 new Vector3D(0, 7668.6, 0)), FramesFactory.getGCRF(),
136 new AbsoluteDate(), Constants.EIGEN5C_EARTH_MU);
137 final List<SpacecraftState> states = new ArrayList<>();
138 double end = Constants.JULIAN_DAY;
139 for (double dt = 0; dt <= end; dt += 3600.0) {
140 AbsoluteDate shiftedEpoch = orbit.getDate().shiftedBy(dt);
141 states.add(new SpacecraftState(orbit.shiftedBy(dt), Utils.defaultLaw().getAttitude(orbit, shiftedEpoch, orbit.getFrame())));
142 }
143
144 final TimeInterpolator<SpacecraftState> stateInterpolator = new SpacecraftStateInterpolator(orbit.getFrame());
145 final AttitudeProvider attitudeProvider = Utils.defaultLaw();
146
147 final EphemerisPropagatorBuilder builder =
148 new EphemerisPropagatorBuilder(states, stateInterpolator, attitudeProvider);
149
150
151 final EphemerisPropagatorBuilder copyBuilder = (EphemerisPropagatorBuilder) builder.clone();
152
153
154 assertPropagatorBuilderIsACopy(builder, copyBuilder);
155 }
156 }