1   package org.orekit.utils;
2   
3   import org.hipparchus.geometry.euclidean.threed.Vector3D;
4   import org.junit.jupiter.api.BeforeEach;
5   import org.junit.jupiter.api.Test;
6   import org.junit.jupiter.params.ParameterizedTest;
7   import org.junit.jupiter.params.provider.EnumSource;
8   import org.orekit.Utils;
9   import org.orekit.frames.Frame;
10  import org.orekit.frames.FramesFactory;
11  import org.orekit.frames.Predefined;
12  import org.orekit.time.AbsoluteDate;
13  
14  import static org.junit.jupiter.api.Assertions.*;
15  
16  class ShiftablePVCoordinatesHolderTest {
17  
18      private static final TimeStampedPVCoordinates PV = new TimeStampedPVCoordinates(AbsoluteDate.ARBITRARY_EPOCH,
19              Vector3D.MINUS_I, Vector3D.MINUS_K, Vector3D.MINUS_J);
20  
21      @BeforeEach
22      void setUp() {
23          Utils.setDataRoot("regular-data:potential");
24      }
25  
26      @ParameterizedTest
27      @EnumSource(Predefined.class)
28      void testGetPosition(final Predefined predefined) {
29          // GIVEN
30          final TestShiftablePVCoordinatesHolder testShiftablePVCoordinatesHolder = new TestShiftablePVCoordinatesHolder(PV,
31                  FramesFactory.getEME2000());
32          final AbsoluteDate shiftedDate = PV.getDate().shiftedBy(1);
33          final Frame frame = FramesFactory.getFrame(predefined);
34          // WHEN
35          final Vector3D position = testShiftablePVCoordinatesHolder.getPosition(shiftedDate, frame);
36          // THEN
37          final PVCoordinates expected = testShiftablePVCoordinatesHolder.getPVCoordinates(shiftedDate, frame);
38          assertEquals(expected.getPosition(), position);
39      }
40  
41      @ParameterizedTest
42      @EnumSource(Predefined.class)
43      void testGetVelocity(final Predefined predefined) {
44          // GIVEN
45          final TestShiftablePVCoordinatesHolder testShiftablePVCoordinatesHolder = new TestShiftablePVCoordinatesHolder(PV,
46                  FramesFactory.getEME2000());
47          final AbsoluteDate shiftedDate = PV.getDate().shiftedBy(1);
48          final Frame frame = FramesFactory.getFrame(predefined);
49          // WHEN
50          final Vector3D velocity = testShiftablePVCoordinatesHolder.getVelocity(shiftedDate, frame);
51          // THEN
52          final PVCoordinates expected = testShiftablePVCoordinatesHolder.getPVCoordinates(shiftedDate, frame);
53          assertEquals(expected.getVelocity(), velocity);
54      }
55  
56      @Test
57      void testGetterVelocity() {
58          // GIVEN
59          final TestShiftablePVCoordinatesHolder testShiftablePVCoordinatesHolder = new TestShiftablePVCoordinatesHolder(PV,
60                  FramesFactory.getEME2000());
61          // WHEN
62          final Vector3D velocity = testShiftablePVCoordinatesHolder.getVelocity();
63          // THEN
64          assertEquals(PV.getVelocity(), velocity);
65      }
66  
67      private static class TestShiftablePVCoordinatesHolder implements ShiftablePVCoordinatesHolder<TestShiftablePVCoordinatesHolder> {
68  
69          private final TimeStampedPVCoordinates timeStampedPVCoordinates;
70          private final Frame frame;
71  
72          TestShiftablePVCoordinatesHolder(final TimeStampedPVCoordinates timeStampedPVCoordinates,
73                                           final Frame frame) {
74              this.timeStampedPVCoordinates = timeStampedPVCoordinates;
75              this.frame = frame;
76          }
77  
78          @Override
79          public TimeStampedPVCoordinates getPVCoordinates() {
80              return timeStampedPVCoordinates;
81          }
82  
83          @Override
84          public Frame getFrame() {
85              return frame;
86          }
87  
88          @Override
89          public TestShiftablePVCoordinatesHolder shiftedBy(double dt) {
90              return new TestShiftablePVCoordinatesHolder(new TimeStampedPVCoordinates(getDate().shiftedBy(dt),
91                      timeStampedPVCoordinates.getPosition(), timeStampedPVCoordinates.getVelocity(),
92                      timeStampedPVCoordinates.getAcceleration()), getFrame());
93          }
94  
95          @Override
96          public AbsoluteDate getDate() {
97              return timeStampedPVCoordinates.getDate();
98          }
99      }
100 }