1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.orbits;
18
19 import org.hipparchus.complex.Complex;
20 import org.hipparchus.util.Binary64;
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.EnumSource;
25 import org.junit.jupiter.params.provider.ValueSource;
26 import org.orekit.errors.OrekitException;
27 import org.orekit.errors.OrekitMessages;
28
29 class FieldCircularLatitudeArgumentUtilityTest {
30
31 private static final Complex EX = new Complex(0.1, 0.);
32 private static final Complex EY = new Complex(0.66, 0.);
33 private static final double TOLERANCE = 1e-10;
34
35 @Test
36 void testMeanToTrueAndBack() {
37
38 final Complex expectedLatitudeArgument = new Complex(3., 0.);
39
40 final Complex intermediateLatitudeArgument = FieldCircularLatitudeArgumentUtility.meanToTrue(EX, EY,
41 expectedLatitudeArgument);
42 final Complex actualLatitudeArgument = FieldCircularLatitudeArgumentUtility.trueToMean(EX, EY,
43 intermediateLatitudeArgument);
44
45 Assertions.assertEquals(expectedLatitudeArgument.getReal(), actualLatitudeArgument.getReal(), TOLERANCE);
46 }
47
48 @Test
49 void testEccentricToTrueAndBack() {
50
51 final Complex expectedLatitudeArgument = new Complex(3., 0.);
52
53 final Complex intermediateLatitudeArgument = FieldCircularLatitudeArgumentUtility.eccentricToTrue(EX, EY,
54 expectedLatitudeArgument);
55 final Complex actualLatitudeArgument = FieldCircularLatitudeArgumentUtility.trueToEccentric(EX, EY,
56 intermediateLatitudeArgument);
57
58 Assertions.assertEquals(expectedLatitudeArgument.getReal(), actualLatitudeArgument.getReal(), TOLERANCE);
59 }
60
61 @Test
62 void testEccentricToMeanAndBack() {
63
64 final Complex expectedLatitudeArgument = new Complex(3., 0.);
65
66 final Complex intermediateLatitudeArgument = FieldCircularLatitudeArgumentUtility.eccentricToMean(EX, EY,
67 expectedLatitudeArgument);
68 final Complex actualLatitudeArgument = FieldCircularLatitudeArgumentUtility.meanToEccentric(EX, EY,
69 intermediateLatitudeArgument);
70
71 Assertions.assertEquals(expectedLatitudeArgument.getReal(), actualLatitudeArgument.getReal(), TOLERANCE);
72 }
73
74 @Test
75 void testMeanToTrueVersusDouble() {
76
77 final Complex fieldOriginalPositionAngle = new Complex(3., 0.);
78
79 final double actualConvertedPositionAngle = FieldCircularLatitudeArgumentUtility.meanToTrue(
80 EX, EY, fieldOriginalPositionAngle).getReal();
81
82 final double expectedPositionAngle = CircularLatitudeArgumentUtility.meanToTrue(
83 EX.getReal(), EY.getReal(), fieldOriginalPositionAngle.getReal());
84 Assertions.assertEquals(expectedPositionAngle, actualConvertedPositionAngle, TOLERANCE);
85 }
86
87 @Test
88 void testMeanToEccentricVersusDouble() {
89
90 final Complex fieldOriginalPositionAngle = new Complex(3., 0.);
91
92 final double actualConvertedPositionAngle = FieldCircularLatitudeArgumentUtility.meanToEccentric(
93 EX, EY, fieldOriginalPositionAngle).getReal();
94
95 final double expectedPositionAngle = CircularLatitudeArgumentUtility.meanToEccentric(
96 EX.getReal(), EY.getReal(), fieldOriginalPositionAngle.getReal());
97 Assertions.assertEquals(expectedPositionAngle, actualConvertedPositionAngle, TOLERANCE);
98 }
99
100 @Test
101 void testTrueToEccentricVersusDouble() {
102
103 final Complex fieldOriginalPositionAngle = new Complex(3., 0.);
104
105 final double actualConvertedPositionAngle = FieldCircularLatitudeArgumentUtility.trueToEccentric(
106 EX, EY, fieldOriginalPositionAngle).getReal();
107
108 final double expectedPositionAngle = CircularLatitudeArgumentUtility.trueToEccentric(
109 EX.getReal(), EY.getReal(), fieldOriginalPositionAngle.getReal());
110 Assertions.assertEquals(expectedPositionAngle, actualConvertedPositionAngle, TOLERANCE);
111 }
112
113 @Test
114 void testTrueToMeanVersusDouble() {
115
116 final Complex fieldOriginalPositionAngle = new Complex(3., 0.);
117
118 final double actualConvertedPositionAngle = FieldCircularLatitudeArgumentUtility.trueToMean(
119 EX, EY, fieldOriginalPositionAngle).getReal();
120
121 final double expectedPositionAngle = CircularLatitudeArgumentUtility.trueToMean(
122 EX.getReal(), EY.getReal(), fieldOriginalPositionAngle.getReal());
123 Assertions.assertEquals(expectedPositionAngle, actualConvertedPositionAngle, TOLERANCE);
124 }
125
126 @Test
127 void testEccentricToMeanVersusDouble() {
128
129 final Complex fieldOriginalPositionAngle = new Complex(3., 0.);
130
131 final double actualConvertedPositionAngle = FieldCircularLatitudeArgumentUtility.eccentricToMean(
132 EX, EY, fieldOriginalPositionAngle).getReal();
133
134 final double expectedPositionAngle = CircularLatitudeArgumentUtility.eccentricToMean(
135 EX.getReal(), EY.getReal(), fieldOriginalPositionAngle.getReal());
136 Assertions.assertEquals(expectedPositionAngle, actualConvertedPositionAngle, TOLERANCE);
137 }
138
139 @Test
140 void testEccentricToTrueVersusDouble() {
141
142 final Complex fieldOriginalPositionAngle = new Complex(3., 0.);
143
144 final double actualConvertedPositionAngle = FieldCircularLatitudeArgumentUtility.eccentricToTrue(
145 EX, EY, fieldOriginalPositionAngle).getReal();
146
147 final double expectedPositionAngle = CircularLatitudeArgumentUtility.eccentricToTrue(
148 EX.getReal(), EY.getReal(), fieldOriginalPositionAngle.getReal());
149 Assertions.assertEquals(expectedPositionAngle, actualConvertedPositionAngle, TOLERANCE);
150 }
151
152 @Test
153 void testMeanToEccentricException() {
154
155 final Complex fieldNaNPositionAngle = Complex.NaN;
156
157 Assertions.assertThrows(OrekitException.class, () -> FieldCircularLatitudeArgumentUtility.meanToEccentric(EX,
158 EY, fieldNaNPositionAngle), OrekitMessages.UNABLE_TO_COMPUTE_ECCENTRIC_LATITUDE_ARGUMENT.toString());
159 }
160
161 @ParameterizedTest
162 @EnumSource(PositionAngleType.class)
163 void testConvertAlphaVersusDouble(final PositionAngleType positionAngleType) {
164
165 final Complex fieldOriginalPositionAngle = new Complex(3., 0.);
166 final PositionAngleType outputType = PositionAngleType.MEAN;
167
168 final double actualConvertedPositionAngle = FieldCircularLatitudeArgumentUtility.convertAlpha(positionAngleType,
169 fieldOriginalPositionAngle, EX, EY, outputType).getReal();
170
171 final double expectedPositionAngle = CircularLatitudeArgumentUtility.convertAlpha(positionAngleType,
172 fieldOriginalPositionAngle.getReal(), EX.getReal(), EY.getReal(), outputType);
173 Assertions.assertEquals(expectedPositionAngle, actualConvertedPositionAngle, TOLERANCE);
174 }
175
176 @ParameterizedTest
177 @ValueSource(doubles = {1e3, 5e3, 1e4, 1e5, 5e5})
178 void testIssue1525(final double alphaM) {
179 final double ex = 0.44940492906694396;
180 final double ey = 0.56419162961687;
181 final Binary64 zero = Binary64.ZERO;
182 Assertions.assertDoesNotThrow(() -> FieldCircularLatitudeArgumentUtility
183 .meanToEccentric(zero.newInstance(ex), zero.newInstance(ey), zero.newInstance(alphaM)));
184 }
185 }