1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.events;
18
19 import org.hipparchus.util.Binary64;
20 import org.hipparchus.util.Binary64Field;
21 import org.junit.jupiter.api.Assertions;
22 import org.junit.jupiter.api.Test;
23 import org.junit.jupiter.params.ParameterizedTest;
24 import org.junit.jupiter.params.provider.ValueSource;
25 import org.mockito.Mockito;
26 import org.orekit.TestUtils;
27 import org.orekit.orbits.FieldCartesianOrbit;
28 import org.orekit.orbits.FieldOrbit;
29 import org.orekit.orbits.Orbit;
30 import org.orekit.propagation.FieldSpacecraftState;
31 import org.orekit.propagation.SpacecraftState;
32 import org.orekit.propagation.analytical.FieldKeplerianPropagator;
33 import org.orekit.propagation.events.handlers.FieldRecordAndContinue;
34 import org.orekit.time.FieldAbsoluteDate;
35
36 import static org.junit.jupiter.api.Assertions.*;
37
38 class FieldEventShifterTest {
39
40 @Test
41 void testEventOccurred() {
42
43 final FieldAbsoluteDate<Binary64> fieldDate = FieldAbsoluteDate.getArbitraryEpoch(Binary64Field.getInstance());
44 final FieldDateDetector<Binary64> dateDetector = new FieldDateDetector<>(fieldDate);
45 final Binary64 increasingTimeShift = Binary64.ONE;
46 final Binary64 decreasingTimeShift = new Binary64(2);
47 final FieldEventShifter<Binary64> fieldEventShifter = new FieldEventShifter<>(dateDetector, true,
48 increasingTimeShift, decreasingTimeShift);
49 final SpacecraftState state = new SpacecraftState(TestUtils.getDefaultOrbit(fieldDate.toAbsoluteDate()));
50 final FieldSpacecraftState<Binary64> fieldState = new FieldSpacecraftState<>(fieldDate.getField(), state);
51 fieldEventShifter.getHandler().eventOccurred(fieldState, fieldEventShifter, true);
52
53
54 final FieldSpacecraftState<Binary64> resettedState = fieldEventShifter.getHandler().resetState(fieldEventShifter, fieldState);
55
56
57 assertEquals(fieldState.getOrbit(), resettedState.getOrbit());
58 assertEquals(fieldState.getMass(), resettedState.getMass());
59 assertEquals(fieldState.getAttitude(), resettedState.getAttitude());
60 assertEquals(fieldState.getDate(), resettedState.getDate());
61 assertEquals(fieldState.getAdditionalDataValues(), resettedState.getAdditionalDataValues());
62 assertEquals(fieldState.getAdditionalStatesDerivatives().size(),
63 resettedState.getAdditionalStatesDerivatives().size());
64 }
65
66 @ParameterizedTest
67 @ValueSource(booleans = {true, false})
68 void testGetters(final boolean useShiftedStates) {
69
70 final FieldAbsoluteDate<Binary64> fieldDate = FieldAbsoluteDate.getArbitraryEpoch(Binary64Field.getInstance());
71 final FieldDateDetector<Binary64> dateDetector = new FieldDateDetector<>(fieldDate);
72 final Binary64 increasingTimeShift = Binary64.ONE;
73 final Binary64 decreasingTimeShift = new Binary64(2);
74
75
76 final FieldEventShifter<Binary64> fieldEventShifter = new FieldEventShifter<>(dateDetector, useShiftedStates,
77 increasingTimeShift, decreasingTimeShift);
78
79
80 assertEquals(increasingTimeShift, fieldEventShifter.getIncreasingTimeShift());
81 assertEquals(decreasingTimeShift, fieldEventShifter.getDecreasingTimeShift());
82 assertEquals(dateDetector, fieldEventShifter.getDetector());
83 }
84
85 @Test
86 @SuppressWarnings("unchecked")
87 void testWithDetectionSettings() {
88
89 final FieldDateDetector<Binary64> detector = new FieldDateDetector<>(FieldAbsoluteDate.getArbitraryEpoch(Binary64Field.getInstance()));
90 final FieldEventShifter<Binary64> template = new FieldEventShifter<>(detector, true, Binary64.ONE, new Binary64(2));
91 final FieldEventDetectionSettings<Binary64> detectionSettings = Mockito.mock();
92
93 final FieldEventShifter<Binary64> shifter = template.withDetectionSettings(detectionSettings);
94
95 Assertions.assertEquals(detector, shifter.getDetector());
96 Assertions.assertEquals(detectionSettings, shifter.getDetectionSettings());
97 Assertions.assertEquals(template.getIncreasingTimeShift(), shifter.getIncreasingTimeShift());
98 Assertions.assertEquals(template.getDecreasingTimeShift(), shifter.getDecreasingTimeShift());
99 }
100
101 @ParameterizedTest
102 @ValueSource(booleans = {true, false})
103 void testDetection(final boolean useShiftedStates) {
104
105 final FieldAbsoluteDate<Binary64> fieldDate = FieldAbsoluteDate.getArbitraryEpoch(Binary64Field.getInstance());
106 final FieldRecordAndContinue<Binary64> recordAndContinue = new FieldRecordAndContinue<>();
107 final FieldDateDetector<Binary64> dateDetector = new FieldDateDetector<>(fieldDate).withHandler(recordAndContinue);
108 final Binary64 increasingTimeShift = Binary64.ONE;
109 final Binary64 decreasingTimeShift = increasingTimeShift;
110 final FieldEventShifter<Binary64> fieldEventShifter = new FieldEventShifter<>(dateDetector, useShiftedStates,
111 increasingTimeShift, decreasingTimeShift);
112 final Binary64 dt = Binary64.ONE;
113 final Orbit orbit = TestUtils.getDefaultOrbit(fieldDate.shiftedBy(dt.negate()).toAbsoluteDate());
114 final FieldOrbit<Binary64> initialOrbit = new FieldCartesianOrbit<>(Binary64Field.getInstance(), orbit);
115 final FieldKeplerianPropagator<Binary64> keplerianPropagator = new FieldKeplerianPropagator<>(initialOrbit);
116 keplerianPropagator.addEventDetector(fieldEventShifter);
117
118
119 keplerianPropagator.propagate(fieldDate.shiftedBy(dt));
120
121
122 assertEquals(1, recordAndContinue.getEvents().size());
123 final double shift = useShiftedStates ? increasingTimeShift.getReal() : 0.;
124 assertEquals(dateDetector.getDate().shiftedBy(shift),
125 recordAndContinue.getEvents().get(0).getState().getDate());
126 }
127 }