1 package org.orekit.attitudes;
2
3 import org.hipparchus.CalculusFieldElement;
4 import org.hipparchus.analysis.differentiation.Gradient;
5 import org.hipparchus.analysis.differentiation.GradientField;
6 import org.hipparchus.geometry.euclidean.threed.FieldRotation;
7 import org.hipparchus.geometry.euclidean.threed.Rotation;
8 import org.junit.jupiter.api.Assertions;
9 import org.junit.jupiter.api.Test;
10 import org.mockito.Mockito;
11 import org.orekit.frames.Frame;
12 import org.orekit.frames.FramesFactory;
13 import org.orekit.time.AbsoluteDate;
14 import org.orekit.time.FieldAbsoluteDate;
15 import org.orekit.utils.AngularCoordinates;
16 import org.orekit.utils.FieldPVCoordinatesProvider;
17 import org.orekit.utils.PVCoordinatesProvider;
18 import org.orekit.utils.TimeSpanMap;
19
20 import static org.mockito.Mockito.mock;
21
22 class AbstractSwitchingAttitudeProviderTest {
23
24 @Test
25 void testResetActiveProvider() {
26
27 final TestAttitudesSequence attitudesSequence = new TestAttitudesSequence();
28 final AttitudeProvider attitudeProvider = Mockito.mock(AttitudeProvider.class);
29
30 attitudesSequence.resetActiveProvider(attitudeProvider);
31
32 final TimeSpanMap<AttitudeProvider> timeSpanMap = attitudesSequence.getActivated();
33 Assertions.assertEquals(1, timeSpanMap.getSpansNumber());
34 }
35
36
37 @Test
38 void testGetAttitudeRotation() {
39
40 final AttitudeProvider attitudeProvider = new TestAttitudeProvider();
41 final TestAttitudesSequence attitudesSequence = new TestAttitudesSequence();
42 attitudesSequence.resetActiveProvider(attitudeProvider);
43 final Frame frame = FramesFactory.getGCRF();
44 final AbsoluteDate date = AbsoluteDate.ARBITRARY_EPOCH;
45 final PVCoordinatesProvider mockPvCoordinatesProvider = mock(PVCoordinatesProvider.class);
46
47 final Rotation actualRotation = attitudesSequence.getAttitudeRotation(mockPvCoordinatesProvider, date, frame);
48
49 final Attitude attitude = attitudesSequence.getAttitude(mockPvCoordinatesProvider, date, frame);
50 final Rotation expectedRotation = attitude.getRotation();
51 Assertions.assertEquals(0., Rotation.distance(expectedRotation, actualRotation));
52 }
53
54 @Test
55 @SuppressWarnings("unchecked")
56 void testGetAttitudeRotationFieldTest() {
57
58 final GradientField field = GradientField.getField(1);
59 final AttitudeProvider attitudeProvider = new TestAttitudeProvider();
60 final TestAttitudesSequence attitudesSequence = new TestAttitudesSequence();
61 attitudesSequence.resetActiveProvider(attitudeProvider);
62 final AbsoluteDate date = AbsoluteDate.ARBITRARY_EPOCH;
63 final FieldAbsoluteDate<Gradient> fieldDate = new FieldAbsoluteDate<>(field, date);
64 final FieldPVCoordinatesProvider<Gradient> pvCoordinatesProvider = mock(FieldPVCoordinatesProvider.class);
65 final Frame mockFrame = mock(Frame.class);
66
67 final FieldRotation<Gradient> actualRotation = attitudesSequence.getAttitudeRotation(pvCoordinatesProvider, fieldDate, mockFrame);
68
69 final FieldAttitude<Gradient> attitude = attitudesSequence.getAttitude(pvCoordinatesProvider, fieldDate, mockFrame);
70 final FieldRotation<Gradient> expectedRotation = attitude.getRotation();
71 Assertions.assertEquals(0., Rotation.distance(expectedRotation.toRotation(), actualRotation.toRotation()));
72 }
73
74 private static class TestAttitudesSequence extends AbstractSwitchingAttitudeProvider {}
75
76 private static class TestAttitudeProvider implements AttitudeProvider {
77
78 TestAttitudeProvider() {
79
80 }
81
82 @Override
83 public Attitude getAttitude(PVCoordinatesProvider pvProv, AbsoluteDate date, Frame frame) {
84 return new Attitude(date, frame, new AngularCoordinates());
85 }
86
87 @Override
88 public <T extends CalculusFieldElement<T>> FieldAttitude<T> getAttitude(FieldPVCoordinatesProvider<T> pvProv,
89 FieldAbsoluteDate<T> date, Frame frame) {
90 return new FieldAttitude<>(date.getField(), new Attitude(date.toAbsoluteDate(), frame,
91 new AngularCoordinates()));
92 }
93
94 }
95 }