1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.time;
18
19 import org.junit.jupiter.api.Assertions;
20 import org.junit.jupiter.api.BeforeEach;
21 import org.junit.jupiter.api.Test;
22 import org.orekit.Utils;
23 import org.orekit.errors.OrekitException;
24 import org.orekit.errors.OrekitMessages;
25 import org.orekit.gnss.SatelliteSystem;
26
27 public class GNSSDateTest {
28
29 @Test
30 public void testFromWeekAndSecondsGPS() {
31 final DateComponents date = new DateComponents(2006, 8, 9);
32 final TimeComponents time = new TimeComponents(16, 31, new TimeOffset(3, 0));
33 doTestFromWeekAndSeconds(SatelliteSystem.GPS, date, time, 1387, 318677.0);
34 }
35
36 @Test
37 public void testFromWeekAndSecondsGalileo() {
38 final DateComponents date = new DateComponents(2006, 8, 9);
39 final TimeComponents time = new TimeComponents(16, 31, new TimeOffset(3, 0));
40 doTestFromWeekAndSeconds(SatelliteSystem.GALILEO, date, time, 363, 318677.0);
41 }
42
43 @Test
44 public void testFromWeekAndSecondsQZSS() {
45 final DateComponents date = new DateComponents(2006, 8, 9);
46 final TimeComponents time = new TimeComponents(16, 31, new TimeOffset(3, 0));
47 doTestFromWeekAndSeconds(SatelliteSystem.QZSS, date, time, 1387, 318677.0);
48 }
49
50 @Test
51 public void testFromWeekAndSecondsBeidou() {
52 final DateComponents date = new DateComponents(2010, 2, 26);
53 final TimeComponents time = new TimeComponents(23, 15, new TimeOffset(12, 0));
54 doTestFromWeekAndSeconds(SatelliteSystem.BEIDOU, date, time, 216, 515713.0);
55 }
56
57 @Test
58 public void testFromWeekAndSecondsNavIC() {
59 final DateComponents date = new DateComponents(2006, 8, 9);
60 final TimeComponents time = new TimeComponents(16, 31, new TimeOffset(3, 0));
61 doTestFromWeekAndSeconds(SatelliteSystem.NAVIC, date, time, 363, 318677.0);
62 }
63
64 @Test
65 public void testFromWeekAndSecondsSBAS() {
66 final DateComponents date = new DateComponents(2006, 8, 9);
67 final TimeComponents time = new TimeComponents(16, 31, new TimeOffset(3, 0));
68 doTestFromWeekAndSeconds(SatelliteSystem.SBAS, date, time, 1387, 318677.0);
69 }
70
71 private void doTestFromWeekAndSeconds(final SatelliteSystem system,
72 final DateComponents date, final TimeComponents time,
73 final int refWeek, final double refSeconds) {
74 GNSSDate GNSSDate = new GNSSDate(refWeek, refSeconds, system);
75 AbsoluteDate ref = new AbsoluteDate(date, time, utc);
76 Assertions.assertEquals(refWeek, GNSSDate.getWeekNumber());
77 Assertions.assertEquals(1000 * refSeconds, GNSSDate.getMilliInWeek(), 1.0e-15);
78 Assertions.assertEquals(refSeconds, GNSSDate.getSecondsInWeek(), 1.0e-15);
79 Assertions.assertEquals(0, GNSSDate.getDate().durationFrom(ref), 1.0e-15);
80 }
81
82 @Test
83 public void testFromAbsoluteDateGPS() {
84 final DateComponents date = new DateComponents(2006, 8, 9);
85 final TimeComponents time = new TimeComponents(16, 31, new TimeOffset(3, 0));
86 doTestFromAbsoluteDate(SatelliteSystem.GPS, date, time, 1387, 318677000.0);
87 }
88
89 @Test
90 public void testFromAbsoluteDateGalileo() {
91 final DateComponents date = new DateComponents(2006, 8, 9);
92 final TimeComponents time = new TimeComponents(16, 31, new TimeOffset(3, 0));
93 doTestFromAbsoluteDate(SatelliteSystem.GALILEO, date, time, 363, 318677000.0);
94 }
95
96 @Test
97 public void testFromAbsoluteDateQZSS() {
98 final DateComponents date = new DateComponents(2006, 8, 9);
99 final TimeComponents time = new TimeComponents(16, 31, new TimeOffset(3, 0));
100 doTestFromAbsoluteDate(SatelliteSystem.QZSS, date, time, 1387, 318677000.0);
101 }
102
103 @Test
104 public void testFromAbsoluteDateBeidou() {
105 final DateComponents date = new DateComponents(2010, 2, 26);
106 final TimeComponents time = new TimeComponents(23, 15, new TimeOffset(12, 0));
107 doTestFromAbsoluteDate(SatelliteSystem.BEIDOU, date, time, 216, 515713000.0);
108 }
109
110 @Test
111 public void testFromAbsoluteDateNavIC() {
112 final DateComponents date = new DateComponents(2006, 8, 9);
113 final TimeComponents time = new TimeComponents(16, 31, new TimeOffset(3, 0));
114 doTestFromAbsoluteDate(SatelliteSystem.NAVIC, date, time, 363, 318677000.0);
115 }
116
117 @Test
118 public void testFromAbsoluteDateSBAS() {
119 final DateComponents date = new DateComponents(2006, 8, 9);
120 final TimeComponents time = new TimeComponents(16, 31, new TimeOffset(3, 0));
121 doTestFromAbsoluteDate(SatelliteSystem.SBAS, date, time, 1387, 318677000.0);
122 }
123
124 private void doTestFromAbsoluteDate(final SatelliteSystem system,
125 final DateComponents date, final TimeComponents time,
126 final int refWeek, final double refMilliSeconds) {
127 GNSSDate GNSSDate = new GNSSDate(new AbsoluteDate(date, time, utc), system);
128 Assertions.assertEquals(refWeek, GNSSDate.getWeekNumber());
129 Assertions.assertEquals(refMilliSeconds, GNSSDate.getMilliInWeek(), 1.0e-15);
130 }
131
132 @Test
133 public void testZeroGPS() {
134 doTestZero(SatelliteSystem.GPS);
135 }
136
137 @Test
138 public void testZeroGalileo() {
139 doTestZero(SatelliteSystem.GALILEO);
140 }
141
142 @Test
143 public void testZeroQZSS() {
144 doTestZero(SatelliteSystem.QZSS);
145 }
146
147 @Test
148 public void testZeroBeidou() {
149 doTestZero(SatelliteSystem.BEIDOU);
150 }
151
152 @Test
153 public void testZeroNavIC() {
154 doTestZero(SatelliteSystem.NAVIC);
155 }
156
157 @Test
158 public void testZeroSBAS() {
159 doTestZero(SatelliteSystem.SBAS);
160 }
161
162 private void doTestZero(final SatelliteSystem system) {
163 AbsoluteDate epoch = null;
164 switch (system) {
165 case GPS:
166 case SBAS:
167 epoch = AbsoluteDate.GPS_EPOCH;
168 break;
169 case GALILEO:
170 epoch = AbsoluteDate.GALILEO_EPOCH;
171 break;
172 case QZSS:
173 epoch = AbsoluteDate.QZSS_EPOCH;
174 break;
175 case BEIDOU:
176 epoch = AbsoluteDate.BEIDOU_EPOCH;
177 break;
178 case NAVIC:
179 epoch = AbsoluteDate.NAVIC_EPOCH;
180 break;
181 default:
182 break;
183 }
184 GNSSDate date = new GNSSDate(epoch, system);
185 Assertions.assertEquals(0, date.getWeekNumber());
186 Assertions.assertEquals(0.0, date.getMilliInWeek(), 1.0e-15);
187 }
188
189 @Test
190 public void testZeroZeroGPS() {
191 GNSSDate.setRolloverReference(new DateComponents(DateComponents.GPS_EPOCH, 7 * 512));
192 GNSSDate date1 = new GNSSDate(0, 0.0, SatelliteSystem.GPS);
193 Assertions.assertEquals(0.0, date1.getDate().durationFrom(AbsoluteDate.GPS_EPOCH), 1.0e-15);
194 GNSSDate.setRolloverReference(new DateComponents(GNSSDate.getRolloverReference(), 1));
195 GNSSDate date2 = new GNSSDate(0, 0.0, SatelliteSystem.GPS);
196 Assertions.assertEquals(1024, date2.getWeekNumber());
197 }
198
199 @Test
200 public void testZeroZeroGalileo() {
201 GNSSDate.setRolloverReference(new DateComponents(DateComponents.GALILEO_EPOCH, 7 * 2048));
202 GNSSDate date1 = new GNSSDate(0, 0.0, SatelliteSystem.GALILEO);
203 Assertions.assertEquals(0.0, date1.getDate().durationFrom(AbsoluteDate.GALILEO_EPOCH), 1.0e-15);
204 GNSSDate.setRolloverReference(new DateComponents(GNSSDate.getRolloverReference(), 1));
205 GNSSDate date2 = new GNSSDate(0, 0.0, SatelliteSystem.GALILEO);
206 Assertions.assertEquals(4096, date2.getWeekNumber());
207 }
208
209 @Test
210 public void testZeroZeroQZSS() {
211 GNSSDate.setRolloverReference(new DateComponents(DateComponents.QZSS_EPOCH, 7 * 512));
212 GNSSDate date1 = new GNSSDate(0, 0.0, SatelliteSystem.QZSS);
213 Assertions.assertEquals(0.0, date1.getDate().durationFrom(AbsoluteDate.QZSS_EPOCH), 1.0e-15);
214 GNSSDate.setRolloverReference(new DateComponents(GNSSDate.getRolloverReference(), 1));
215 GNSSDate date2 = new GNSSDate(0, 0.0, SatelliteSystem.QZSS);
216 Assertions.assertEquals(1024, date2.getWeekNumber());
217 }
218
219 @Test
220 public void testZeroZeroBeidou() {
221 GNSSDate.setRolloverReference(new DateComponents(DateComponents.BEIDOU_EPOCH, 7 * 4096));
222 GNSSDate date1 = new GNSSDate(0, 0.0, SatelliteSystem.BEIDOU);
223 Assertions.assertEquals(0.0, date1.getDate().durationFrom(AbsoluteDate.BEIDOU_EPOCH), 1.0e-15);
224 GNSSDate.setRolloverReference(new DateComponents(GNSSDate.getRolloverReference(), 1));
225 GNSSDate date2 = new GNSSDate(0, 0.0, SatelliteSystem.BEIDOU);
226 Assertions.assertEquals(8192, date2.getWeekNumber());
227 }
228
229 @Test
230 public void testZeroZeroNavIC() {
231 GNSSDate.setRolloverReference(new DateComponents(DateComponents.NAVIC_EPOCH, 7 * 512));
232 GNSSDate date1 = new GNSSDate(0, 0.0, SatelliteSystem.NAVIC);
233 Assertions.assertEquals(0.0, date1.getDate().durationFrom(AbsoluteDate.NAVIC_EPOCH), 1.0e-15);
234 GNSSDate.setRolloverReference(new DateComponents(GNSSDate.getRolloverReference(), 1));
235 GNSSDate date2 = new GNSSDate(0, 0.0, SatelliteSystem.NAVIC);
236 Assertions.assertEquals(1024, date2.getWeekNumber());
237 }
238
239 @Test
240 public void testZeroZeroSBAS() {
241 GNSSDate.setRolloverReference(new DateComponents(DateComponents.GPS_EPOCH, 7 * 512));
242 GNSSDate date1 = new GNSSDate(0, 0.0, SatelliteSystem.SBAS);
243 Assertions.assertEquals(0.0, date1.getDate().durationFrom(AbsoluteDate.GPS_EPOCH), 1.0e-15);
244 GNSSDate.setRolloverReference(new DateComponents(GNSSDate.getRolloverReference(), 1));
245 GNSSDate date2 = new GNSSDate(0, 0.0, SatelliteSystem.SBAS);
246 Assertions.assertEquals(1024, date2.getWeekNumber());
247 }
248
249 @Test
250 public void testDefaultRolloverReference() {
251 Assertions.assertNull(GNSSDate.getRolloverReference());
252 GNSSDate date = new GNSSDate(305, 1.5e-3, SatelliteSystem.GPS);
253
254
255 Assertions.assertEquals("2006-03-05", GNSSDate.getRolloverReference().toString());
256 Assertions.assertEquals(305 + 1024, date.getWeekNumber());
257 }
258
259 @Test
260 public void testUserRolloverReference() {
261 GNSSDate.setRolloverReference(new DateComponents(DateComponents.GPS_EPOCH, 7 * (3 * 1024 + 512)));
262 GNSSDate date = new GNSSDate(305, 1.5e-3, SatelliteSystem.GPS);
263 Assertions.assertEquals("2048-09-13", GNSSDate.getRolloverReference().toString());
264 Assertions.assertEquals(305 + 3 * 1024, date.getWeekNumber());
265 }
266
267 @Test
268 public void testBadSatelliteSystem() {
269 try {
270 @SuppressWarnings("unused")
271 GNSSDate date = new GNSSDate(new AbsoluteDate(), SatelliteSystem.GLONASS);
272 Assertions.fail("an exception should have been thrown");
273 } catch (OrekitException oe) {
274 Assertions.assertEquals(OrekitMessages.INVALID_SATELLITE_SYSTEM, oe.getSpecifier());
275 }
276 }
277
278 @BeforeEach
279 public void setUp() {
280 Utils.setDataRoot("regular-data");
281 utc = TimeScalesFactory.getUTC();
282 }
283
284 private TimeScale utc;
285
286 }