xref: /aosp_15_r20/cts/tests/location/location_none/src/android/location/cts/none/GnssAssistanceTest.java (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.location.cts.none;
18 
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertTrue;
21 
22 import android.location.BeidouAssistance;
23 import android.location.BeidouSatelliteEphemeris;
24 import android.location.BeidouSatelliteEphemeris.BeidouSatelliteClockModel;
25 import android.location.BeidouSatelliteEphemeris.BeidouSatelliteEphemerisTime;
26 import android.location.BeidouSatelliteEphemeris.BeidouSatelliteHealth;
27 import android.location.GalileoAssistance;
28 import android.location.GalileoSatelliteEphemeris;
29 import android.location.GalileoSatelliteEphemeris.GalileoSatelliteClockModel;
30 import android.location.GalileoSatelliteEphemeris.GalileoSvHealth;
31 import android.location.GlonassAlmanac;
32 import android.location.GlonassAlmanac.GlonassSatelliteAlmanac;
33 import android.location.GlonassAssistance;
34 import android.location.GlonassSatelliteEphemeris;
35 import android.location.GlonassSatelliteEphemeris.GlonassSatelliteClockModel;
36 import android.location.GlonassSatelliteEphemeris.GlonassSatelliteOrbitModel;
37 import android.location.GnssAlmanac;
38 import android.location.GnssAlmanac.GnssSatelliteAlmanac;
39 import android.location.GnssAssistance;
40 import android.location.GnssAssistance.GnssSatelliteCorrections;
41 import android.location.GnssCorrectionComponent;
42 import android.location.GnssCorrectionComponent.GnssInterval;
43 import android.location.GnssCorrectionComponent.PseudorangeCorrection;
44 import android.location.GnssStatus;
45 import android.location.GpsAssistance;
46 import android.location.GpsSatelliteEphemeris;
47 import android.location.GpsSatelliteEphemeris.GpsL2Params;
48 import android.location.GpsSatelliteEphemeris.GpsSatelliteClockModel;
49 import android.location.GpsSatelliteEphemeris.GpsSatelliteHealth;
50 import android.location.IonosphericCorrection;
51 import android.location.KeplerianOrbitModel;
52 import android.location.KeplerianOrbitModel.SecondOrderHarmonicPerturbation;
53 import android.location.KlobucharIonosphericModel;
54 import android.location.LeapSecondsModel;
55 import android.location.QzssAssistance;
56 import android.location.QzssSatelliteEphemeris;
57 import android.location.RealTimeIntegrityModel;
58 import android.location.SatelliteEphemerisTime;
59 import android.location.TimeModel;
60 import android.location.UtcModel;
61 import android.os.Parcel;
62 
63 import androidx.test.ext.junit.runners.AndroidJUnit4;
64 
65 import org.junit.Test;
66 import org.junit.runner.RunWith;
67 
68 import java.util.ArrayList;
69 import java.util.List;
70 
71 @RunWith(AndroidJUnit4.class)
72 public class GnssAssistanceTest {
73 
74     @Test
testDescribeContents()75     public void testDescribeContents() {
76         GnssAssistance gnssAssistance = getTestGnssAssistance();
77         assertEquals(0, gnssAssistance.describeContents());
78     }
79 
80     @Test
testWriteToParcel()81     public void testWriteToParcel() {
82         GnssAssistance gnssAssistance = getTestGnssAssistance();
83         Parcel parcel = Parcel.obtain();
84         gnssAssistance.writeToParcel(parcel, 0);
85         parcel.setDataPosition(0);
86         GnssAssistance newGnssAssistance = GnssAssistance.CREATOR.createFromParcel(parcel);
87         assertTrue(verifyTestGpsAssistance(newGnssAssistance.getGpsAssistance()));
88         assertTrue(verifyTestGlonassAssistance(newGnssAssistance.getGlonassAssistance()));
89         assertTrue(verifyTestGalileoAssistance(newGnssAssistance.getGalileoAssistance()));
90         assertTrue(verifyTestBeidouAssistance(newGnssAssistance.getBeidouAssistance()));
91         assertTrue(verifyTestQzssAssistance(newGnssAssistance.getQzssAssistance()));
92         parcel.recycle();
93     }
94 
assertEqualsWithDelta(final double expected, final double actual)95     private void assertEqualsWithDelta(final double expected, final double actual) {
96         final double delta = 10 * Math.ulp(expected);
97         assertEquals(expected, actual, delta);
98     }
99 
getTestGnssAssistance()100     private GnssAssistance getTestGnssAssistance() {
101         return new GnssAssistance.Builder()
102                 .setGpsAssistance(getTestGpsAssistance())
103                 .setGlonassAssistance(getTestGlonassAssistance())
104                 .setGalileoAssistance(getTestGalileoAssistance())
105                 .setBeidouAssistance(getTestBeidouAssistance())
106                 .setQzssAssistance(getTestQzssAssistance())
107                 .build();
108     }
109 
verifyTestGpsAssistance(GpsAssistance gpsAssistance)110     private boolean verifyTestGpsAssistance(GpsAssistance gpsAssistance) {
111         // verify almanac
112         GnssAlmanac almanac = gpsAssistance.getAlmanac();
113         assertEquals(958, almanac.getWeekNumber());
114         assertEquals(503808, almanac.getToaSeconds());
115         List<GnssSatelliteAlmanac> satelliteAlmanacList = almanac.getGnssSatelliteAlmanacs();
116         GnssSatelliteAlmanac satelliteAlmanac1 = satelliteAlmanacList.get(0);
117         GnssSatelliteAlmanac satelliteAlmanac2 = satelliteAlmanacList.get(1);
118         assertEquals(1, satelliteAlmanac1.getSvid());
119         assertEquals(0, satelliteAlmanac1.getSvHealth());
120         assertEqualsWithDelta(7.23e-3, satelliteAlmanac1.getEccentricity());
121         assertEqualsWithDelta(8.79e-3, satelliteAlmanac1.getInclination());
122         assertEqualsWithDelta(1.97e-1, satelliteAlmanac1.getOmega());
123         assertEqualsWithDelta(-3.79e-2, satelliteAlmanac1.getOmega0());
124         assertEqualsWithDelta(-2.55e-9, satelliteAlmanac1.getOmegaDot());
125         assertEqualsWithDelta(5.15e3, satelliteAlmanac1.getRootA());
126         assertEqualsWithDelta(6.14e-1, satelliteAlmanac1.getM0());
127         assertEqualsWithDelta(-2.19e-5, satelliteAlmanac1.getAf0());
128         assertEqualsWithDelta(-3.63e-12, satelliteAlmanac1.getAf1());
129         assertEquals(2, satelliteAlmanac2.getSvid());
130         assertEquals(0, satelliteAlmanac2.getSvHealth());
131         assertEqualsWithDelta(7.22e-3, satelliteAlmanac2.getEccentricity());
132         assertEqualsWithDelta(8.78e-3, satelliteAlmanac2.getInclination());
133         assertEqualsWithDelta(1.96e-1, satelliteAlmanac2.getOmega());
134         assertEqualsWithDelta(-3.78e-2, satelliteAlmanac2.getOmega0());
135         assertEqualsWithDelta(-2.54e-9, satelliteAlmanac2.getOmegaDot());
136         assertEqualsWithDelta(5.14e3, satelliteAlmanac2.getRootA());
137         assertEqualsWithDelta(6.13e-1, satelliteAlmanac2.getM0());
138         assertEqualsWithDelta(-2.18e-5, satelliteAlmanac2.getAf0());
139         assertEqualsWithDelta(-3.62e-12, satelliteAlmanac2.getAf1());
140 
141         // verify ionospheric model
142         assertTrue(verifyTestKlobucharIonosphericModel(gpsAssistance.getIonosphericModel()));
143         // verify utc model
144         assertTrue(verifyTestUtcModel(gpsAssistance.getUtcModel()));
145         // verify leap seconds model
146         assertTrue(verifyTestLeapSecondsModel(gpsAssistance.getLeapSecondsModel()));
147         // verify time model list
148         assertTrue(verifyTestTimeModelList(gpsAssistance.getTimeModels()));
149 
150         // verify satellite ephemeris list
151         List<GpsSatelliteEphemeris> satelliteEphemerisList = gpsAssistance.getSatelliteEphemeris();
152         assertEquals(1, satelliteEphemerisList.size());
153         GpsSatelliteEphemeris satelliteEphemeris = satelliteEphemerisList.get(0);
154 
155         assertEquals(1, satelliteEphemeris.getPrn());
156 
157         GpsL2Params gpsL2Params = satelliteEphemeris.getGpsL2Params();
158         assertEquals(0, gpsL2Params.getL2Code());
159         assertEquals(0, gpsL2Params.getL2Flag());
160 
161         GpsSatelliteClockModel satelliteClockModel = satelliteEphemeris.getSatelliteClockModel();
162         assertEqualsWithDelta(-8.39e-4, satelliteClockModel.getAf0());
163         assertEqualsWithDelta(-1.65e-11, satelliteClockModel.getAf1());
164         assertEqualsWithDelta(0.0, satelliteClockModel.getAf2());
165         assertEqualsWithDelta(0.0, satelliteClockModel.getTgd());
166         assertEquals(91, satelliteClockModel.getIodc());
167         assertTrue(verifyTestTimeOfClockSeconds(satelliteClockModel.getTimeOfClockSeconds()));
168         assertTrue(verifyTestKeplerianOrbitModel(satelliteEphemeris.getSatelliteOrbitModel()));
169 
170         GpsSatelliteHealth satelliteHealth = satelliteEphemeris.getSatelliteHealth();
171         assertEquals(0, satelliteHealth.getSvHealth());
172         assertEqualsWithDelta(2.0, satelliteHealth.getSvAccur());
173         assertEqualsWithDelta(0.0, satelliteHealth.getFitInt());
174 
175         SatelliteEphemerisTime satelliteEphemerisTime =
176                 satelliteEphemeris.getSatelliteEphemerisTime();
177         assertEquals(59, satelliteEphemerisTime.getIode());
178         assertEquals(2290, satelliteEphemerisTime.getWeekNumber());
179         assertEquals(463472, satelliteEphemerisTime.getToeSeconds());
180 
181         // verify real time integrity model list
182         assertTrue(
183                 verifyTestRealTimeIntegrityModelList(gpsAssistance.getRealTimeIntegrityModels()));
184         // verify satellite correction list
185         assertTrue(verifyTestGnssCorrectionList(gpsAssistance.getSatelliteCorrections()));
186         return true;
187     }
188 
verifyTestQzssAssistance(QzssAssistance qzssAssistance)189     private boolean verifyTestQzssAssistance(QzssAssistance qzssAssistance) {
190         // verify almanac
191         GnssAlmanac almanac = qzssAssistance.getAlmanac();
192         assertEquals(261, almanac.getWeekNumber());
193         assertEquals(176128, almanac.getToaSeconds());
194         List<GnssSatelliteAlmanac> satelliteAlmanacList = almanac.getGnssSatelliteAlmanacs();
195         assertEquals(1, satelliteAlmanacList.size());
196         GnssSatelliteAlmanac satelliteAlmanac = satelliteAlmanacList.get(0);
197         assertEquals(194, satelliteAlmanac.getSvid());
198         assertEquals(0, satelliteAlmanac.getSvHealth());
199         assertEqualsWithDelta(7.428e-2, satelliteAlmanac.getEccentricity());
200         assertEqualsWithDelta(0.7101072704 / Math.PI, satelliteAlmanac.getInclination());
201         assertEqualsWithDelta(-1.559158521 / Math.PI, satelliteAlmanac.getOmega());
202         assertEqualsWithDelta(1.029787968 / Math.PI, satelliteAlmanac.getOmega0());
203         assertEqualsWithDelta(-3.120129966e-9 / Math.PI, satelliteAlmanac.getOmegaDot());
204         assertEqualsWithDelta(6493.731445, satelliteAlmanac.getRootA());
205         assertEqualsWithDelta(-3.041552089 / Math.PI, satelliteAlmanac.getM0());
206         assertEqualsWithDelta(-3.814697266e-6, satelliteAlmanac.getAf0());
207         assertEqualsWithDelta(0.0, satelliteAlmanac.getAf1());
208 
209         // verify ionospheric model
210         assertTrue(verifyTestKlobucharIonosphericModel(qzssAssistance.getIonosphericModel()));
211         // verify utc model
212         assertTrue(verifyTestUtcModel(qzssAssistance.getUtcModel()));
213         // verify leap seconds model
214         assertTrue(verifyTestLeapSecondsModel(qzssAssistance.getLeapSecondsModel()));
215         // verify time model list
216         assertTrue(verifyTestTimeModelList(qzssAssistance.getTimeModels()));
217 
218         // verify satellite ephemeris list
219         List<QzssSatelliteEphemeris> satelliteEphemerisList =
220                 qzssAssistance.getSatelliteEphemeris();
221         assertEquals(1, satelliteEphemerisList.size());
222         QzssSatelliteEphemeris satelliteEphemeris = satelliteEphemerisList.get(0);
223 
224         assertEquals(194, satelliteEphemeris.getPrn());
225 
226         GpsL2Params gpsL2Params = satelliteEphemeris.getGpsL2Params();
227         assertEquals(0, gpsL2Params.getL2Code());
228         assertEquals(0, gpsL2Params.getL2Flag());
229 
230         GpsSatelliteClockModel satelliteClockModel = satelliteEphemeris.getSatelliteClockModel();
231         assertEqualsWithDelta(-8.39e-4, satelliteClockModel.getAf0());
232         assertEqualsWithDelta(-1.65e-11, satelliteClockModel.getAf1());
233         assertEqualsWithDelta(0.0, satelliteClockModel.getAf2());
234         assertEqualsWithDelta(0.0, satelliteClockModel.getTgd());
235         assertEquals(91, satelliteClockModel.getIodc());
236         assertTrue(verifyTestTimeOfClockSeconds(satelliteClockModel.getTimeOfClockSeconds()));
237         assertTrue(verifyTestKeplerianOrbitModel(satelliteEphemeris.getSatelliteOrbitModel()));
238 
239         GpsSatelliteHealth satelliteHealth = satelliteEphemeris.getSatelliteHealth();
240         assertEquals(0, satelliteHealth.getSvHealth());
241         assertEqualsWithDelta(2.0, satelliteHealth.getSvAccur());
242         assertEqualsWithDelta(0.0, satelliteHealth.getFitInt());
243 
244         SatelliteEphemerisTime satelliteEphemerisTime =
245                 satelliteEphemeris.getSatelliteEphemerisTime();
246         assertEquals(59, satelliteEphemerisTime.getIode());
247         assertEquals(2290, satelliteEphemerisTime.getWeekNumber());
248         assertEquals(463472, satelliteEphemerisTime.getToeSeconds());
249 
250         // verify real time integrity model list
251         assertTrue(
252                 verifyTestRealTimeIntegrityModelList(qzssAssistance.getRealTimeIntegrityModels()));
253         // verify satellite correction list
254         assertTrue(verifyTestGnssCorrectionList(qzssAssistance.getSatelliteCorrections()));
255         return true;
256     }
257 
verifyTestGlonassAssistance(GlonassAssistance glonassAssistance)258     private boolean verifyTestGlonassAssistance(GlonassAssistance glonassAssistance) {
259         // verify almanac
260         GlonassAlmanac almanac = glonassAssistance.getAlmanac();
261         assertEquals(1831066775042L, almanac.getIssueDateMillis());
262         List<GlonassSatelliteAlmanac> satelliteAlmanacList = almanac.getSatelliteAlmanacs();
263         GlonassSatelliteAlmanac satelliteAlmanac = satelliteAlmanacList.get(0);
264         assertEquals(1, satelliteAlmanac.getSlotNumber());
265         assertEquals(0, satelliteAlmanac.getSvHealth());
266         assertEquals(1, satelliteAlmanac.getFreqChannel());
267         assertEqualsWithDelta(-1.9e-5, satelliteAlmanac.getTau());
268         assertEqualsWithDelta(0.299, satelliteAlmanac.getTLambda());
269         assertEqualsWithDelta(0.0, satelliteAlmanac.getLambda());
270         assertEqualsWithDelta(6.42e-3, satelliteAlmanac.getDeltaI());
271         assertEqualsWithDelta(-2.65e3, satelliteAlmanac.getDeltaT());
272         assertEqualsWithDelta(-6.10e-4, satelliteAlmanac.getDeltaTDot());
273         assertEqualsWithDelta(4.21e-4, satelliteAlmanac.getEccentricity());
274         assertEqualsWithDelta(0.16, satelliteAlmanac.getOmega());
275 
276         // verify utc model
277         assertTrue(verifyTestUtcModel(glonassAssistance.getUtcModel()));
278         // verify time model list
279         assertTrue(verifyTestTimeModelList(glonassAssistance.getTimeModels()));
280 
281         // verify satellite ephemeris list
282         List<GlonassSatelliteEphemeris> satelliteEphemerisList =
283                 glonassAssistance.getSatelliteEphemeris();
284         assertEquals(1, satelliteEphemerisList.size());
285         GlonassSatelliteEphemeris satelliteEphemeris = satelliteEphemerisList.get(0);
286         assertEquals(1, satelliteEphemeris.getSlotNumber());
287         assertEquals(0, satelliteEphemeris.getHealthState());
288         assertEqualsWithDelta(459030.0, satelliteEphemeris.getFrameTimeSeconds());
289         assertEquals(0, satelliteEphemeris.getAgeInDays());
290         GlonassSatelliteClockModel satelliteClockModel =
291                 satelliteEphemeris.getSatelliteClockModel();
292         assertTrue(verifyTestTimeOfClockSeconds(satelliteClockModel.getTimeOfClockSeconds()));
293         assertEqualsWithDelta(-2.11e-5, satelliteClockModel.getClockBias());
294         assertEqualsWithDelta(0.0, satelliteClockModel.getFrequencyBias());
295         assertEquals(-1, satelliteClockModel.getFrequencyNumber());
296         GlonassSatelliteOrbitModel satelliteOrbitModel =
297                 satelliteEphemeris.getSatelliteOrbitModel();
298         assertEqualsWithDelta(-21248.51806641, satelliteOrbitModel.getX());
299         assertEqualsWithDelta(-0.7282361984253, satelliteOrbitModel.getXDot());
300         assertEqualsWithDelta(1.862645149231e-9, satelliteOrbitModel.getXAccel());
301         assertEqualsWithDelta(-12851.89160156, satelliteOrbitModel.getY());
302         assertEqualsWithDelta(-0.3476705551147, satelliteOrbitModel.getYDot());
303         assertEqualsWithDelta(-9.313225746155e-10, satelliteOrbitModel.getYAccel());
304         assertEqualsWithDelta(5766.135253906, satelliteOrbitModel.getZ());
305         assertEqualsWithDelta(-3.464447021484, satelliteOrbitModel.getZDot());
306         assertEqualsWithDelta(9.313225746155e-10, satelliteOrbitModel.getZAccel());
307 
308         // verify satellite correction list
309         assertEquals(0, glonassAssistance.getSatelliteCorrections().size());
310         return true;
311     }
312 
verifyTestGalileoAssistance(GalileoAssistance galileoAssistance)313     private boolean verifyTestGalileoAssistance(GalileoAssistance galileoAssistance) {
314         // verify almanac
315         GnssAlmanac almanac = galileoAssistance.getAlmanac();
316         assertEquals(1831066775042L, almanac.getIssueDateMillis());
317         assertEquals(2, almanac.getWeekNumber());
318         assertEquals(463200, almanac.getToaSeconds());
319         assertEquals(4, almanac.getIod());
320         List<GnssSatelliteAlmanac> satelliteAlmanacList = almanac.getGnssSatelliteAlmanacs();
321         assertEquals(1, satelliteAlmanacList.size());
322         GnssSatelliteAlmanac gnssSatelliteAlmanac = satelliteAlmanacList.get(0);
323         assertEquals(1, gnssSatelliteAlmanac.getSvid());
324         assertEquals(0, gnssSatelliteAlmanac.getSvHealth());
325         assertEqualsWithDelta(0.00035, gnssSatelliteAlmanac.getEccentricity());
326         assertEqualsWithDelta(0.00726, gnssSatelliteAlmanac.getInclination());
327         assertEqualsWithDelta(0.0, gnssSatelliteAlmanac.getOmega());
328         assertEqualsWithDelta(0.21, gnssSatelliteAlmanac.getOmega0());
329         assertEqualsWithDelta(-1.74e-9, gnssSatelliteAlmanac.getOmegaDot());
330         assertEqualsWithDelta(0.0, gnssSatelliteAlmanac.getRootA());
331         assertEqualsWithDelta(-0.8778, gnssSatelliteAlmanac.getM0());
332         assertEqualsWithDelta(1.52e-5, gnssSatelliteAlmanac.getAf0());
333         assertEqualsWithDelta(0.0, gnssSatelliteAlmanac.getAf1());
334 
335         // verify ionospheric model
336         assertTrue(verifyTestKlobucharIonosphericModel(galileoAssistance.getIonosphericModel()));
337         // verify utc model
338         assertTrue(verifyTestUtcModel(galileoAssistance.getUtcModel()));
339         // verify leap seconds model
340         assertTrue(verifyTestLeapSecondsModel(galileoAssistance.getLeapSecondsModel()));
341         // verify time model list
342         assertTrue(verifyTestTimeModelList(galileoAssistance.getTimeModels()));
343 
344         // verify satellite ephemeris list
345         List<GalileoSatelliteEphemeris> satelliteEphemerisList =
346                 galileoAssistance.getSatelliteEphemeris();
347         assertEquals(1, satelliteEphemerisList.size());
348         GalileoSatelliteEphemeris satelliteEphemeris = satelliteEphemerisList.get(0);
349         assertEquals(1, satelliteEphemeris.getSatelliteCodeNumber());
350         List<GalileoSatelliteClockModel> satelliteClockModelList =
351                 satelliteEphemeris.getSatelliteClockModels();
352         assertEquals(1, satelliteClockModelList.size());
353         GalileoSatelliteClockModel satelliteClockModel = satelliteClockModelList.get(0);
354         assertTrue(verifyTestTimeOfClockSeconds(satelliteClockModel.getTimeOfClockSeconds()));
355         assertEqualsWithDelta(0.0032, satelliteClockModel.getAf0());
356         assertEqualsWithDelta(2.278e-11, satelliteClockModel.getAf1());
357         assertEqualsWithDelta(-3.469e-18, satelliteClockModel.getAf2());
358         assertEqualsWithDelta(-1.490e-8, satelliteClockModel.getBgdSeconds());
359         assertEqualsWithDelta(3.119, satelliteClockModel.getSisaMeters());
360         assertEquals(
361                 GalileoSatelliteClockModel.TYPE_FNAV, satelliteClockModel.getSatelliteClockType());
362         assertTrue(verifyTestKeplerianOrbitModel(satelliteEphemeris.getSatelliteOrbitModel()));
363         GalileoSvHealth satelliteHealth = satelliteEphemeris.getSatelliteHealth();
364         assertEquals(0, satelliteHealth.getDataValidityStatusE1b());
365         assertEquals(0, satelliteHealth.getSignalHealthStatusE1b());
366         assertEquals(0, satelliteHealth.getDataValidityStatusE5a());
367         assertEquals(0, satelliteHealth.getSignalHealthStatusE5a());
368         assertEquals(0, satelliteHealth.getDataValidityStatusE5b());
369         assertEquals(0, satelliteHealth.getSignalHealthStatusE5b());
370 
371         // verify real time integrity model list
372         assertTrue(
373                 verifyTestRealTimeIntegrityModelList(
374                         galileoAssistance.getRealTimeIntegrityModels()));
375         // verify satellite correction list
376         assertTrue(verifyTestGnssCorrectionList(galileoAssistance.getSatelliteCorrections()));
377         return true;
378     }
379 
verifyTestBeidouAssistance(BeidouAssistance beidouAssistance)380     private boolean verifyTestBeidouAssistance(BeidouAssistance beidouAssistance) {
381         // verify almanac
382         GnssAlmanac almanac = beidouAssistance.getAlmanac();
383         assertEquals(782, almanac.getWeekNumber());
384         assertEquals(345600, almanac.getToaSeconds());
385         List<GnssSatelliteAlmanac> satelliteAlmanacList = almanac.getGnssSatelliteAlmanacs();
386         assertEquals(1, satelliteAlmanacList.size());
387         GnssSatelliteAlmanac satelliteAlmanac = satelliteAlmanacList.get(0);
388         assertEquals(1, satelliteAlmanac.getSvid());
389         assertEquals(0, satelliteAlmanac.getSvHealth());
390         assertEqualsWithDelta(7.82e-4, satelliteAlmanac.getEccentricity());
391         assertEqualsWithDelta(0.0958150411 / Math.PI, satelliteAlmanac.getInclination());
392         assertEqualsWithDelta(-0.986917360 / Math.PI, satelliteAlmanac.getOmega());
393         assertEqualsWithDelta(-3.02e-1 / Math.PI, satelliteAlmanac.getOmega0());
394         assertEqualsWithDelta(-5.014e-10 / Math.PI, satelliteAlmanac.getOmegaDot());
395         assertEqualsWithDelta(6493.494226, satelliteAlmanac.getRootA());
396         assertEqualsWithDelta(3.15e-1 / Math.PI, satelliteAlmanac.getM0());
397         assertEqualsWithDelta(-7.22e-4, satelliteAlmanac.getAf0());
398         assertEqualsWithDelta(3.45e-11, satelliteAlmanac.getAf1());
399 
400         // verify ionospheric model
401         assertTrue(verifyTestKlobucharIonosphericModel(beidouAssistance.getIonosphericModel()));
402         // verify utc model
403         assertTrue(verifyTestUtcModel(beidouAssistance.getUtcModel()));
404         // verify leap seconds model
405         assertTrue(verifyTestLeapSecondsModel(beidouAssistance.getLeapSecondsModel()));
406         // verify time model list
407         assertTrue(verifyTestTimeModelList(beidouAssistance.getTimeModels()));
408 
409         // verify satellite ephemeris list
410         List<BeidouSatelliteEphemeris> satelliteEphemerisList =
411                 beidouAssistance.getSatelliteEphemeris();
412         assertEquals(1, satelliteEphemerisList.size());
413         BeidouSatelliteEphemeris satelliteEphemeris = satelliteEphemerisList.get(0);
414         assertEquals(1, satelliteEphemeris.getPrn());
415         assertTrue(verifyTestKeplerianOrbitModel(satelliteEphemeris.getSatelliteOrbitModel()));
416         BeidouSatelliteClockModel satelliteClockModel = satelliteEphemeris.getSatelliteClockModel();
417         assertTrue(verifyTestTimeOfClockSeconds(satelliteClockModel.getTimeOfClockSeconds()));
418         assertEqualsWithDelta(0.0006494125118479, satelliteClockModel.getAf0());
419         assertEqualsWithDelta(3.720579400124e-11, satelliteClockModel.getAf1());
420         assertEqualsWithDelta(0.0, satelliteClockModel.getAf2());
421         assertEqualsWithDelta(3.8e-9, satelliteClockModel.getTgd1());
422         assertEqualsWithDelta(3.8e-9, satelliteClockModel.getTgd2());
423         assertEquals(0, satelliteClockModel.getAodc());
424         BeidouSatelliteHealth satelliteHealth = satelliteEphemeris.getSatelliteHealth();
425         assertEquals(0, satelliteHealth.getSatH1());
426         assertEqualsWithDelta(2.0, satelliteHealth.getSvAccur());
427         BeidouSatelliteEphemerisTime satelliteEphemerisTime =
428                 satelliteEphemeris.getSatelliteEphemerisTime();
429         assertEquals(1, satelliteEphemerisTime.getIode());
430         assertEquals(934, satelliteEphemerisTime.getBeidouWeekNumber());
431         assertEquals(457200, satelliteEphemerisTime.getToeSeconds());
432 
433         // verify real time integrity model list
434         assertTrue(
435                 verifyTestRealTimeIntegrityModelList(
436                         beidouAssistance.getRealTimeIntegrityModels()));
437         // verify satellite correction list
438         assertTrue(verifyTestGnssCorrections(beidouAssistance.getSatelliteCorrections()));
439         return true;
440     }
441 
verifyTestGnssCorrectionList( List<GnssSatelliteCorrections> satelliteCorrectionsList)442     private boolean verifyTestGnssCorrectionList(
443             List<GnssSatelliteCorrections> satelliteCorrectionsList) {
444         assertEquals(1, satelliteCorrectionsList.size());
445         GnssSatelliteCorrections satelliteCorrections = satelliteCorrectionsList.get(0);
446         assertEquals(1, satelliteCorrections.getSvid());
447         List<IonosphericCorrection> ionoCorrectionList =
448                 satelliteCorrections.getIonosphericCorrections();
449         assertEquals(1, ionoCorrectionList.size());
450         IonosphericCorrection ionoCorrection = ionoCorrectionList.get(0);
451         assertEquals(1575420000, ionoCorrection.getCarrierFrequencyHz());
452         GnssCorrectionComponent correctionComponent = ionoCorrection.getIonosphericCorrection();
453         assertEquals("Klobuchar", correctionComponent.getSourceKey());
454         GnssInterval validityInterval = correctionComponent.getValidityInterval();
455         assertEquals(1731066775042L, validityInterval.getStartMillisSinceGpsEpoch());
456         assertEquals(1731066811805L, validityInterval.getEndMillisSinceGpsEpoch());
457         PseudorangeCorrection pseudorangeCorrection =
458                 correctionComponent.getPseudorangeCorrection();
459         assertEqualsWithDelta(100.0, pseudorangeCorrection.getCorrectionMeters());
460         assertEqualsWithDelta(10.0, pseudorangeCorrection.getCorrectionUncertaintyMeters());
461         assertEqualsWithDelta(1.0, pseudorangeCorrection.getCorrectionRateMetersPerSecond());
462         return true;
463     }
464 
verifyTestKlobucharIonosphericModel(KlobucharIonosphericModel model)465     private boolean verifyTestKlobucharIonosphericModel(KlobucharIonosphericModel model) {
466         assertEqualsWithDelta(2.794e-8, model.getAlpha0());
467         assertEqualsWithDelta(7.4506e-9, model.getAlpha1());
468         assertEqualsWithDelta(-1.1921e-7, model.getAlpha2());
469         assertEqualsWithDelta(1.1921e-7, model.getAlpha3());
470         assertEqualsWithDelta(145410, model.getBeta0());
471         assertEqualsWithDelta(-180220, model.getBeta1());
472         assertEqualsWithDelta(0.0, model.getBeta2());
473         assertEqualsWithDelta(131070, model.getBeta3());
474         return true;
475     }
476 
verifyTestLeapSecondsModel(LeapSecondsModel model)477     private boolean verifyTestLeapSecondsModel(LeapSecondsModel model) {
478         assertEquals(18, model.getLeapSeconds());
479         assertEquals(19, model.getLeapSecondsFuture());
480         assertEquals(1025, model.getWeekNumberLeapSecondsFuture());
481         assertEquals(1, model.getDayNumberLeapSecondsFuture());
482         return true;
483     }
484 
verifyTestKeplerianOrbitModel(KeplerianOrbitModel model)485     private boolean verifyTestKeplerianOrbitModel(KeplerianOrbitModel model) {
486         assertEqualsWithDelta(5153.63, model.getRootA());
487         assertEqualsWithDelta(0.00129, model.getEccentricity());
488         assertEqualsWithDelta(0.965, model.getI0());
489         assertEqualsWithDelta(1.003e-10, model.getIDot());
490         assertEqualsWithDelta(-2.54, model.getOmega());
491         assertEqualsWithDelta(-0.95, model.getOmega0());
492         assertEqualsWithDelta(-8.35e-9, model.getOmegaDot());
493         assertEqualsWithDelta(-1.12, model.getM0());
494         assertEqualsWithDelta(4.611e-9, model.getDeltaN());
495         SecondOrderHarmonicPerturbation secondOrderHarmonicPerturbation =
496                 model.getSecondOrderHarmonicPerturbation();
497         assertEqualsWithDelta(-3.72e-9, secondOrderHarmonicPerturbation.getCic());
498         assertEqualsWithDelta(-1.67e-8, secondOrderHarmonicPerturbation.getCis());
499         assertEqualsWithDelta(364.03, secondOrderHarmonicPerturbation.getCrc());
500         assertEqualsWithDelta(8.37, secondOrderHarmonicPerturbation.getCrs());
501         assertEqualsWithDelta(5.36e-7, secondOrderHarmonicPerturbation.getCuc());
502         assertEqualsWithDelta(9.48e-7, secondOrderHarmonicPerturbation.getCus());
503         return true;
504     }
505 
verifyTestGnssCorrections( List<GnssSatelliteCorrections> satelliteCorrectionsList)506     private boolean verifyTestGnssCorrections(
507             List<GnssSatelliteCorrections> satelliteCorrectionsList) {
508         assertEquals(1, satelliteCorrectionsList.size());
509         GnssSatelliteCorrections satelliteCorrections = satelliteCorrectionsList.get(0);
510         assertEquals(1, satelliteCorrections.getSvid());
511         List<IonosphericCorrection> ionoCorrectionList =
512                 satelliteCorrections.getIonosphericCorrections();
513         assertEquals(1, ionoCorrectionList.size());
514         IonosphericCorrection ionoCorrection = ionoCorrectionList.get(0);
515         assertEquals(1575420000, ionoCorrection.getCarrierFrequencyHz());
516         GnssCorrectionComponent correctionComponent = ionoCorrection.getIonosphericCorrection();
517         assertEquals("Klobuchar", correctionComponent.getSourceKey());
518         GnssInterval validityInterval = correctionComponent.getValidityInterval();
519         assertEquals(1731066775042L, validityInterval.getStartMillisSinceGpsEpoch());
520         assertEquals(1731066811805L, validityInterval.getEndMillisSinceGpsEpoch());
521         PseudorangeCorrection pseudorangeCorrection =
522                 correctionComponent.getPseudorangeCorrection();
523         assertEqualsWithDelta(100.0, pseudorangeCorrection.getCorrectionMeters());
524         assertEqualsWithDelta(10.0, pseudorangeCorrection.getCorrectionUncertaintyMeters());
525         assertEqualsWithDelta(1.0, pseudorangeCorrection.getCorrectionRateMetersPerSecond());
526         return true;
527     }
528 
verifyTestTimeOfClockSeconds(long timeOfClockSeconds)529     private boolean verifyTestTimeOfClockSeconds(long timeOfClockSeconds) {
530         assertEquals(521330400L, timeOfClockSeconds);
531         return true;
532     }
533 
verifyTestUtcModel(UtcModel model)534     private boolean verifyTestUtcModel(UtcModel model) {
535         assertEqualsWithDelta(1.33e-7, model.getA0());
536         assertEqualsWithDelta(1.07e-13, model.getA1());
537         assertEquals(552960, model.getTimeOfWeek());
538         assertEquals(1025, model.getWeekNumber());
539         return true;
540     }
541 
verifyTestTimeModelList(List<TimeModel> timeModelList)542     private boolean verifyTestTimeModelList(List<TimeModel> timeModelList) {
543         assertEquals(1, timeModelList.size());
544         TimeModel timeModel = timeModelList.get(0);
545         assertEquals(GnssStatus.CONSTELLATION_GPS, timeModelList.get(0).getToGnss());
546         assertEqualsWithDelta(-2.1e-9, timeModel.getA0());
547         assertEqualsWithDelta(-9.7e-15, timeModel.getA1());
548         assertEquals(43200, timeModel.getTimeOfWeek());
549         assertEquals(1849, timeModel.getWeekNumber());
550         return true;
551     }
552 
verifyTestRealTimeIntegrityModelList( List<RealTimeIntegrityModel> realTimeIntegrityModelList)553     private boolean verifyTestRealTimeIntegrityModelList(
554             List<RealTimeIntegrityModel> realTimeIntegrityModelList) {
555         assertEquals(1, realTimeIntegrityModelList.size());
556         RealTimeIntegrityModel realTimeIntegrityModel = realTimeIntegrityModelList.get(0);
557         assertEquals(1, realTimeIntegrityModel.getSvid());
558         assertEquals(true, realTimeIntegrityModel.isUsable());
559         assertEquals(1731065504, realTimeIntegrityModel.getPublishDateSeconds());
560         assertEquals(1731065504, realTimeIntegrityModel.getStartDateSeconds());
561         assertEquals(1731066504, realTimeIntegrityModel.getEndDateSeconds());
562         assertEquals("USABINIT", realTimeIntegrityModel.getAdvisoryType());
563         assertEquals("2018001", realTimeIntegrityModel.getAdvisoryNumber());
564         return true;
565     }
566 
getTestGalileoAssistance()567     private GalileoAssistance getTestGalileoAssistance() {
568         return new GalileoAssistance.Builder()
569                 .setAlmanac(getTestGalileoAlmanac())
570                 .setIonosphericModel(getTestKlobucharIonosphericModel())
571                 .setUtcModel(getTestUtcModel())
572                 .setLeapSecondsModel(getTestLeapSecondsModel())
573                 .setTimeModels(getTestTimeModelList())
574                 .setSatelliteEphemeris(getTestGalileoSatelliteEphemerisList())
575                 .setRealTimeIntegrityModels(getTestRealTimeIntegrityModelList())
576                 .setSatelliteCorrections(getTestSatelliteCorrections())
577                 .build();
578     }
579 
getTestGalileoAlmanac()580     private GnssAlmanac getTestGalileoAlmanac() {
581         final List<GnssSatelliteAlmanac> gnssSatelliteAlmanacList = new ArrayList<>();
582         final GnssSatelliteAlmanac gnssSatelliteAlmanac =
583                 new GnssSatelliteAlmanac.Builder()
584                         .setSvid(1)
585                         .setSvHealth(0)
586                         .setEccentricity(0.00035)
587                         .setInclination(0.00726)
588                         .setOmega(0.0)
589                         .setOmega0(0.21)
590                         .setOmegaDot(-1.74e-9)
591                         .setRootA(0.0)
592                         .setM0(-0.8778)
593                         .setAf0(1.52e-5)
594                         .setAf1(0.0)
595                         .build();
596         gnssSatelliteAlmanacList.add(gnssSatelliteAlmanac);
597 
598         return new GnssAlmanac.Builder()
599                 .setIssueDateMillis(1831066775042L)
600                 .setIod(4)
601                 .setWeekNumber(2)
602                 .setToaSeconds(463200)
603                 .setGnssSatelliteAlmanacs(gnssSatelliteAlmanacList)
604                 .build();
605     }
606 
getTestGalileoSatelliteEphemerisList()607     private List<GalileoSatelliteEphemeris> getTestGalileoSatelliteEphemerisList() {
608         final List<GalileoSatelliteEphemeris> satelliteEphemerisList = new ArrayList<>();
609         final List<GalileoSatelliteClockModel> satelliteClockModelList = new ArrayList<>();
610         final SatelliteEphemerisTime satelliteEphemerisTime =
611                 new SatelliteEphemerisTime.Builder()
612                         .setIode(125)
613                         .setWeekNumber(2290)
614                         .setToeSeconds(45900)
615                         .build();
616         final GalileoSvHealth satelliteHealth =
617                 new GalileoSvHealth.Builder()
618                         .setDataValidityStatusE1b(0)
619                         .setSignalHealthStatusE1b(0)
620                         .setDataValidityStatusE5a(0)
621                         .setSignalHealthStatusE5a(0)
622                         .setDataValidityStatusE5b(0)
623                         .setSignalHealthStatusE5b(0)
624                         .build();
625         satelliteClockModelList.add(
626                 new GalileoSatelliteClockModel.Builder()
627                         .setTimeOfClockSeconds(getTestTimeOfClockSeconds())
628                         .setAf0(0.0032)
629                         .setAf1(2.278e-11)
630                         .setAf2(-3.469e-18)
631                         .setBgdSeconds(-1.490e-8)
632                         .setSisaMeters(3.119)
633                         .setSatelliteClockType(GalileoSatelliteClockModel.TYPE_FNAV)
634                         .build());
635         satelliteEphemerisList.add(
636                 new GalileoSatelliteEphemeris.Builder()
637                         .setSatelliteCodeNumber(1)
638                         .setSatelliteClockModels(satelliteClockModelList)
639                         .setSatelliteOrbitModel(getTestKeplerianOrbitModel())
640                         .setSatelliteHealth(satelliteHealth)
641                         .setSatelliteEphemerisTime(satelliteEphemerisTime)
642                         .build());
643         return satelliteEphemerisList;
644     }
645 
getTestGlonassAssistance()646     private GlonassAssistance getTestGlonassAssistance() {
647         return new GlonassAssistance.Builder()
648                 .setAlmanac(getTestGlonassAlmanac())
649                 .setUtcModel(getTestUtcModel())
650                 .setTimeModels(getTestTimeModelList())
651                 .setSatelliteEphemeris(getTestGlonassSatelliteEphemerisList())
652                 .build();
653     }
654 
getTestGlonassAlmanac()655     private GlonassAlmanac getTestGlonassAlmanac() {
656         List<GlonassSatelliteAlmanac> satelliteAlmanacList = new ArrayList<>();
657         satelliteAlmanacList.add(
658                 new GlonassSatelliteAlmanac.Builder()
659                         .setSlotNumber(1)
660                         .setSvHealth(0)
661                         .setFreqChannel(1)
662                         .setTau(-1.9e-5)
663                         .setTLambda(0.299)
664                         .setLambda(0.0)
665                         .setDeltaI(6.42e-3)
666                         .setDeltaT(-2.65e3)
667                         .setDeltaTDot(-6.10e-4)
668                         .setEccentricity(4.21e-4)
669                         .setOmega(0.16)
670                         .build());
671         return new GlonassAlmanac(1831066775042L, satelliteAlmanacList);
672     }
673 
getTestGlonassSatelliteEphemerisList()674     private List<GlonassSatelliteEphemeris> getTestGlonassSatelliteEphemerisList() {
675         final List<GlonassSatelliteEphemeris> satelliteEphemerisList = new ArrayList<>();
676         final GlonassSatelliteClockModel satelliteClockModel =
677                 new GlonassSatelliteClockModel.Builder()
678                         .setTimeOfClockSeconds(getTestTimeOfClockSeconds())
679                         .setClockBias(-2.11e-5)
680                         .setFrequencyBias(0.0)
681                         .setFrequencyNumber(-1)
682                         .build();
683         final GlonassSatelliteOrbitModel satelliteOrbitModel =
684                 new GlonassSatelliteOrbitModel.Builder()
685                         .setX(-21248.51806641)
686                         .setXDot(-0.7282361984253)
687                         .setXAccel(1.862645149231e-9)
688                         .setY(-12851.89160156)
689                         .setYDot(-0.3476705551147)
690                         .setYAccel(-9.313225746155e-10)
691                         .setZ(5766.135253906)
692                         .setZDot(-3.464447021484)
693                         .setZAccel(9.313225746155e-10)
694                         .build();
695         final GlonassSatelliteEphemeris satelliteEphemeris =
696                 new GlonassSatelliteEphemeris.Builder()
697                         .setSlotNumber(1)
698                         .setHealthState(0)
699                         .setFrameTimeSeconds(459030.0)
700                         .setAgeInDays(0)
701                         .setSatelliteClockModel(satelliteClockModel)
702                         .setSatelliteOrbitModel(satelliteOrbitModel)
703                         .build();
704         satelliteEphemerisList.add(satelliteEphemeris);
705         return satelliteEphemerisList;
706     }
707 
getTestGpsAssistance()708     private GpsAssistance getTestGpsAssistance() {
709         return new GpsAssistance.Builder()
710                 .setAlmanac(getTestGpsAlmance())
711                 .setIonosphericModel(getTestKlobucharIonosphericModel())
712                 .setUtcModel(getTestUtcModel())
713                 .setLeapSecondsModel(getTestLeapSecondsModel())
714                 .setTimeModels(getTestTimeModelList())
715                 .setSatelliteEphemeris(getTestGpsSatelliteEphemerisList())
716                 .setRealTimeIntegrityModels(getTestRealTimeIntegrityModelList())
717                 .setSatelliteCorrections(getTestSatelliteCorrections())
718                 .build();
719     }
720 
getTestGpsSatelliteEphemerisList()721     private List<GpsSatelliteEphemeris> getTestGpsSatelliteEphemerisList() {
722         final List<GpsSatelliteEphemeris> satelliteEphemerisList = new ArrayList<>();
723 
724         final GpsL2Params gpsL2Params = new GpsL2Params.Builder().setL2Code(0).setL2Flag(0).build();
725 
726         final GpsSatelliteClockModel satelliteClockModel =
727                 new GpsSatelliteClockModel.Builder()
728                         .setTimeOfClockSeconds(getTestTimeOfClockSeconds())
729                         .setAf0(-8.39e-4)
730                         .setAf1(-1.65e-11)
731                         .setAf2(0)
732                         .setTgd(0)
733                         .setIodc(91)
734                         .build();
735 
736         final GpsSatelliteHealth satelliteHealth =
737                 new GpsSatelliteHealth.Builder()
738                         .setSvHealth(0)
739                         .setSvAccur(2.0)
740                         .setFitInt(0.0)
741                         .build();
742 
743         final SatelliteEphemerisTime satelliteEphemerisTime =
744                 new SatelliteEphemerisTime.Builder()
745                         .setIode(59)
746                         .setWeekNumber(2290)
747                         .setToeSeconds(463472)
748                         .build();
749 
750         satelliteEphemerisList.add(
751                 new GpsSatelliteEphemeris.Builder()
752                         .setPrn(1)
753                         .setGpsL2Params(gpsL2Params)
754                         .setSatelliteClockModel(satelliteClockModel)
755                         .setSatelliteOrbitModel(getTestKeplerianOrbitModel())
756                         .setSatelliteHealth(satelliteHealth)
757                         .setSatelliteEphemerisTime(satelliteEphemerisTime)
758                         .build());
759         return satelliteEphemerisList;
760     }
761 
getTestGpsAlmance()762     private GnssAlmanac getTestGpsAlmance() {
763         List<GnssSatelliteAlmanac> satelliteAlmanacList = new ArrayList<>();
764         satelliteAlmanacList.add(
765                 new GnssSatelliteAlmanac.Builder()
766                         .setSvid(1)
767                         .setSvHealth(0)
768                         .setEccentricity(7.23e-3)
769                         .setInclination(8.79e-3)
770                         .setOmega(1.97e-1)
771                         .setOmega0(-3.79e-2)
772                         .setOmegaDot(-2.55e-9)
773                         .setRootA(5.15e3)
774                         .setM0(6.14e-1)
775                         .setAf0(-2.19e-5)
776                         .setAf1(-3.63e-12)
777                         .build());
778         satelliteAlmanacList.add(
779                 new GnssSatelliteAlmanac.Builder()
780                         .setSvid(2)
781                         .setSvHealth(0)
782                         .setEccentricity(7.22e-3)
783                         .setInclination(8.78e-3)
784                         .setOmega(1.96e-1)
785                         .setOmega0(-3.78e-2)
786                         .setOmegaDot(-2.54e-9)
787                         .setRootA(5.14e+3)
788                         .setM0(6.13e-1)
789                         .setAf0(-2.18e-5)
790                         .setAf1(-3.62e-12)
791                         .build());
792 
793         return new GnssAlmanac.Builder()
794                 .setWeekNumber(958)
795                 .setToaSeconds(503808)
796                 .setGnssSatelliteAlmanacs(satelliteAlmanacList)
797                 .build();
798     }
799 
getTestBeidouAssistance()800     private BeidouAssistance getTestBeidouAssistance() {
801         return new BeidouAssistance.Builder()
802                 .setAlmanac(getTestBeidouAlmanac())
803                 .setIonosphericModel(getTestKlobucharIonosphericModel())
804                 .setUtcModel(getTestUtcModel())
805                 .setLeapSecondsModel(getTestLeapSecondsModel())
806                 .setTimeModels(getTestTimeModelList())
807                 .setSatelliteEphemeris(getTestBeidouSatelliteEphemerisList())
808                 .setRealTimeIntegrityModels(getTestRealTimeIntegrityModelList())
809                 .setSatelliteCorrections(getTestSatelliteCorrections())
810                 .build();
811     }
812 
getTestBeidouAlmanac()813     private GnssAlmanac getTestBeidouAlmanac() {
814         List<GnssSatelliteAlmanac> satelliteAlmanacList = new ArrayList<>();
815         satelliteAlmanacList.add(
816                 new GnssSatelliteAlmanac.Builder()
817                         .setSvid(1)
818                         .setSvHealth(0)
819                         .setEccentricity(7.82e-4)
820                         .setInclination(0.0958150411 / Math.PI)
821                         .setOmega(-0.986917360 / Math.PI)
822                         .setOmega0(-3.02e-1 / Math.PI)
823                         .setOmegaDot(-5.014e-10 / Math.PI)
824                         .setRootA(6493.494226)
825                         .setM0(3.15e-1 / Math.PI)
826                         .setAf0(-7.22e-4)
827                         .setAf1(3.45e-11)
828                         .build());
829         return new GnssAlmanac.Builder()
830                 .setWeekNumber(782)
831                 .setToaSeconds(345600)
832                 .setGnssSatelliteAlmanacs(satelliteAlmanacList)
833                 .build();
834     }
835 
getTestBeidouSatelliteEphemerisList()836     private List<BeidouSatelliteEphemeris> getTestBeidouSatelliteEphemerisList() {
837         final List<BeidouSatelliteEphemeris> satelliteEphemerisList = new ArrayList<>();
838         final BeidouSatelliteClockModel satelliteClockModel =
839                 new BeidouSatelliteClockModel.Builder()
840                         .setTimeOfClockSeconds(getTestTimeOfClockSeconds())
841                         .setAf0(0.0006494125118479)
842                         .setAf1(3.720579400124e-11)
843                         .setAf2(0.0)
844                         .setTgd1(3.8e-9)
845                         .setTgd2(3.8e-9)
846                         .setAodc(0)
847                         .build();
848         final BeidouSatelliteHealth beidouSatelliteHealth =
849                 new BeidouSatelliteHealth.Builder().setSatH1(0).setSvAccur(2.0).build();
850         final BeidouSatelliteEphemerisTime beidouSatelliteEphemerisTime =
851                 new BeidouSatelliteEphemerisTime.Builder()
852                         .setIode(1)
853                         .setBeidouWeekNumber(934)
854                         .setToeSeconds(457200)
855                         .build();
856         satelliteEphemerisList.add(
857                 new BeidouSatelliteEphemeris.Builder()
858                         .setPrn(1)
859                         .setSatelliteClockModel(satelliteClockModel)
860                         .setSatelliteOrbitModel(getTestKeplerianOrbitModel())
861                         .setSatelliteHealth(beidouSatelliteHealth)
862                         .setSatelliteEphemerisTime(beidouSatelliteEphemerisTime)
863                         .build());
864         return satelliteEphemerisList;
865     }
866 
getTestQzssAssistance()867     private QzssAssistance getTestQzssAssistance() {
868         return new QzssAssistance.Builder()
869                 .setAlmanac(getTestQzssAlmanac())
870                 .setIonosphericModel(getTestKlobucharIonosphericModel())
871                 .setUtcModel(getTestUtcModel())
872                 .setLeapSecondsModel(getTestLeapSecondsModel())
873                 .setTimeModels(getTestTimeModelList())
874                 .setSatelliteEphemeris(getTestQzssSatelliteEphemerisList())
875                 .setRealTimeIntegrityModels(getTestRealTimeIntegrityModelList())
876                 .setSatelliteCorrections(getTestSatelliteCorrections())
877                 .build();
878     }
879 
getTestQzssAlmanac()880     private GnssAlmanac getTestQzssAlmanac() {
881         List<GnssSatelliteAlmanac> satelliteAlmanacList = new ArrayList<>();
882         satelliteAlmanacList.add(
883                 new GnssSatelliteAlmanac.Builder()
884                         .setSvid(194)
885                         .setSvHealth(0)
886                         .setEccentricity(7.428e-2)
887                         .setInclination(0.7101072704 / Math.PI)
888                         .setOmega(-1.559158521 / Math.PI)
889                         .setOmega0(1.029787968 / Math.PI)
890                         .setOmegaDot(-3.120129966e-9 / Math.PI)
891                         .setRootA(6493.731445)
892                         .setM0(-3.041552089 / Math.PI)
893                         .setAf0(-3.814697266e-6)
894                         .setAf1(0.0)
895                         .build());
896         return new GnssAlmanac.Builder()
897                 .setWeekNumber(261)
898                 .setToaSeconds(176128)
899                 .setGnssSatelliteAlmanacs(satelliteAlmanacList)
900                 .build();
901     }
902 
getTestQzssSatelliteEphemerisList()903     private List<QzssSatelliteEphemeris> getTestQzssSatelliteEphemerisList() {
904         final List<QzssSatelliteEphemeris> satelliteEphemerisList = new ArrayList<>();
905 
906         final GpsL2Params gpsL2Params = new GpsL2Params.Builder().setL2Code(0).setL2Flag(0).build();
907 
908         final GpsSatelliteClockModel satelliteClockModel =
909                 new GpsSatelliteClockModel.Builder()
910                         .setTimeOfClockSeconds(getTestTimeOfClockSeconds())
911                         .setAf0(-8.39e-4)
912                         .setAf1(-1.65e-11)
913                         .setAf2(0)
914                         .setTgd(0)
915                         .setIodc(91)
916                         .build();
917 
918         final GpsSatelliteHealth satelliteHealth =
919                 new GpsSatelliteHealth.Builder()
920                         .setSvHealth(0)
921                         .setSvAccur(2.0)
922                         .setFitInt(0.0)
923                         .build();
924 
925         final SatelliteEphemerisTime satelliteEphemerisTime =
926                 new SatelliteEphemerisTime.Builder()
927                         .setIode(59)
928                         .setWeekNumber(2290)
929                         .setToeSeconds(463472)
930                         .build();
931 
932         satelliteEphemerisList.add(
933                 new QzssSatelliteEphemeris.Builder()
934                         .setPrn(194)
935                         .setGpsL2Params(gpsL2Params)
936                         .setSatelliteClockModel(satelliteClockModel)
937                         .setSatelliteOrbitModel(getTestKeplerianOrbitModel())
938                         .setSatelliteHealth(satelliteHealth)
939                         .setSatelliteEphemerisTime(satelliteEphemerisTime)
940                         .build());
941         return satelliteEphemerisList;
942     }
943 
getTestRealTimeIntegrityModelList()944     private List<RealTimeIntegrityModel> getTestRealTimeIntegrityModelList() {
945         final List<RealTimeIntegrityModel> realTimeIntegrityModelList = new ArrayList<>();
946         realTimeIntegrityModelList.add(
947                 new RealTimeIntegrityModel.Builder()
948                         .setSvid(1)
949                         .setUsable(true)
950                         .setPublishDateSeconds(1731065504)
951                         .setStartDateSeconds(1731065504)
952                         .setEndDateSeconds(1731066504)
953                         .setAdvisoryType("USABINIT")
954                         .setAdvisoryNumber("2018001")
955                         .build());
956         return realTimeIntegrityModelList;
957     }
958 
getTestSatelliteCorrections()959     private List<GnssSatelliteCorrections> getTestSatelliteCorrections() {
960         final List<GnssSatelliteCorrections> satelliteCorrectionsList = new ArrayList<>();
961         final List<IonosphericCorrection> ionoCorrectionList = new ArrayList<>();
962         final GnssInterval validityInterval = new GnssInterval(1731066775042L, 1731066811805L);
963         final PseudorangeCorrection pseudorangeCorrection = new PseudorangeCorrection(100, 10, 1);
964         ionoCorrectionList.add(
965                 new IonosphericCorrection(
966                         1575420000,
967                         new GnssCorrectionComponent(
968                                 "Klobuchar", validityInterval, pseudorangeCorrection)));
969 
970         final GnssSatelliteCorrections satelliteCorrections =
971                 new GnssSatelliteCorrections(1, ionoCorrectionList);
972         satelliteCorrectionsList.add(satelliteCorrections);
973         return satelliteCorrectionsList;
974     }
975 
getTestKlobucharIonosphericModel()976     private KlobucharIonosphericModel getTestKlobucharIonosphericModel() {
977         return new KlobucharIonosphericModel.Builder()
978                 .setAlpha0(2.794e-8)
979                 .setAlpha1(7.4506e-9)
980                 .setAlpha2(-1.1921e-7)
981                 .setAlpha3(1.1921e-7)
982                 .setBeta0(145410)
983                 .setBeta1(-180220)
984                 .setBeta2(0.0)
985                 .setBeta3(131070)
986                 .build();
987     }
988 
getTestUtcModel()989     private UtcModel getTestUtcModel() {
990         return new UtcModel.Builder()
991                 .setA0(1.33e-7)
992                 .setA1(1.07e-13)
993                 .setTimeOfWeek(552960)
994                 .setWeekNumber(1025)
995                 .build();
996     }
997 
getTestLeapSecondsModel()998     private LeapSecondsModel getTestLeapSecondsModel() {
999         return new LeapSecondsModel.Builder()
1000                 .setLeapSeconds(18)
1001                 .setLeapSecondsFuture(19)
1002                 .setWeekNumberLeapSecondsFuture(1025)
1003                 .setDayNumberLeapSecondsFuture(1)
1004                 .build();
1005     }
1006 
getTestTimeModelList()1007     private List<TimeModel> getTestTimeModelList() {
1008         final List<TimeModel> timeModelList = new ArrayList<>();
1009         timeModelList.add(
1010                 new TimeModel.Builder()
1011                         .setToGnss(GnssStatus.CONSTELLATION_GPS)
1012                         .setA0(-2.1e-9)
1013                         .setA1(-9.7e-15)
1014                         .setTimeOfWeek(43200)
1015                         .setWeekNumber(1849)
1016                         .build());
1017         return timeModelList;
1018     }
1019 
getTestTimeOfClockSeconds()1020     private long getTestTimeOfClockSeconds() {
1021         return 521330400L;
1022     }
1023 
getTestKeplerianOrbitModel()1024     private KeplerianOrbitModel getTestKeplerianOrbitModel() {
1025         final SecondOrderHarmonicPerturbation secondOrderHarmonicPerturbation =
1026                 new SecondOrderHarmonicPerturbation.Builder()
1027                         .setCic(-3.72e-9)
1028                         .setCis(-1.67e-8)
1029                         .setCrc(364.03)
1030                         .setCrs(8.37)
1031                         .setCuc(5.36e-7)
1032                         .setCus(9.48e-7)
1033                         .build();
1034 
1035         return new KeplerianOrbitModel.Builder()
1036                 .setRootA(5153.63)
1037                 .setEccentricity(0.00129)
1038                 .setI0(0.965)
1039                 .setIDot(1.003e-10)
1040                 .setOmega(-2.54)
1041                 .setOmega0(-0.95)
1042                 .setOmegaDot(-8.35e-9)
1043                 .setM0(-1.12)
1044                 .setDeltaN(4.611e-9)
1045                 .setSecondOrderHarmonicPerturbation(secondOrderHarmonicPerturbation)
1046                 .build();
1047     }
1048 }
1049