1 package org.orekit.forces;
2
3 import org.hipparchus.CalculusFieldElement;
4 import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
5 import org.hipparchus.geometry.euclidean.threed.Vector3D;
6 import org.hipparchus.util.Binary64;
7 import org.hipparchus.util.Binary64Field;
8 import org.junit.jupiter.api.Assertions;
9 import org.junit.jupiter.api.Test;
10 import org.mockito.Mockito;
11 import org.orekit.propagation.FieldSpacecraftState;
12 import org.orekit.propagation.SpacecraftState;
13 import org.orekit.propagation.events.EventDetector;
14 import org.orekit.propagation.events.FieldEventDetector;
15 import org.orekit.time.FieldAbsoluteDate;
16 import org.orekit.utils.ParameterDriver;
17
18 import java.util.Collections;
19 import java.util.List;
20 import java.util.stream.Collectors;
21
22 class ForceModelModifierTest {
23
24 @Test
25 void testGetParametersDriver() {
26
27 final TestForceModel forceModel = new TestForceModel();
28 final ForceModelModifier modelModifier = () -> forceModel;
29
30 final List<ParameterDriver> drivers = modelModifier.getParametersDrivers();
31
32 final List<ParameterDriver> expectedDrivers = modelModifier.getParametersDrivers();
33 Assertions.assertEquals(expectedDrivers.size(), drivers.size());
34 }
35
36 @Test
37 void testGetEventDetectors() {
38
39 final TestForceModel forceModel = new TestForceModel();
40 final ForceModelModifier modelModifier = () -> forceModel;
41
42 final List<EventDetector> detectors = modelModifier.getEventDetectors().collect(Collectors.toList());
43
44 final List<EventDetector> expectedDetectors = modelModifier.getEventDetectors().collect(Collectors.toList());
45 Assertions.assertEquals(expectedDetectors.size(), detectors.size());
46 }
47
48 @Test
49 void testGetFieldEventDetectors() {
50
51 final TestForceModel forceModel = new TestForceModel();
52 final ForceModelModifier modelModifier = () -> forceModel;
53 final Binary64Field field = Binary64Field.getInstance();
54
55 final List<FieldEventDetector<Binary64>> detectors = modelModifier.getFieldEventDetectors(field).collect(Collectors.toList());
56
57 final List<FieldEventDetector<Binary64>> expectedDetectors = modelModifier.getFieldEventDetectors(field).collect(Collectors.toList());
58 Assertions.assertEquals(expectedDetectors.size(), detectors.size());
59 }
60
61 @Test
62 void testAcceleration() {
63
64 final TestForceModel forceModel = new TestForceModel();
65 final ForceModelModifier modelModifier = () -> forceModel;
66
67 final Vector3D actualAcceleration = modelModifier.acceleration(null, new double[0]);
68
69 final Vector3D expectedAcceleration = forceModel.acceleration(null, new double[0]);
70 Assertions.assertEquals(expectedAcceleration, actualAcceleration);
71 }
72
73 @Test
74 @SuppressWarnings("unchecked")
75 void testAccelerationField() {
76
77 final TestForceModel forceModel = new TestForceModel();
78 final ForceModelModifier modelModifier = () -> forceModel;
79 final Binary64[] array = new Binary64[0];
80 final FieldSpacecraftState<Binary64> mockedState = Mockito.mock(FieldSpacecraftState.class);
81 Mockito.when(mockedState.getDate()).thenReturn(FieldAbsoluteDate.getArbitraryEpoch(Binary64Field.getInstance()));
82
83 final FieldVector3D<Binary64> actualAcceleration = modelModifier.acceleration(mockedState, array);
84
85 final FieldVector3D<Binary64> expectedAcceleration = forceModel.acceleration(mockedState, array);
86 Assertions.assertEquals(expectedAcceleration, actualAcceleration);
87 }
88
89 @Test
90 void testDependsOn() {
91
92 final TestForceModel forceModel = new TestForceModel();
93 final ForceModelModifier modelModifier = () -> forceModel;
94
95 Assertions.assertEquals(forceModel.dependsOnPositionOnly(), modelModifier.dependsOnPositionOnly());
96 Assertions.assertEquals(forceModel.dependsOnAttitudeRate(), modelModifier.dependsOnAttitudeRate());
97 }
98
99
100 private static class TestForceModel implements ForceModel {
101
102 @Override
103 public boolean dependsOnPositionOnly() {
104 return false;
105 }
106
107 @Override
108 public Vector3D acceleration(SpacecraftState s, double[] parameters) {
109 return Vector3D.ZERO;
110 }
111
112 @Override
113 public <T extends CalculusFieldElement<T>> FieldVector3D<T> acceleration(FieldSpacecraftState<T> s, T[] parameters) {
114 return new FieldVector3D<>(s.getDate().getField(), Vector3D.ZERO);
115 }
116
117 @Override
118 public List<ParameterDriver> getParametersDrivers() {
119 return Collections.emptyList();
120 }
121 }
122 }