1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.gnss.metric.messages.ssr;
18
19 import java.util.ArrayList;
20
21 import org.junit.Assert;
22 import org.junit.Test;
23 import org.orekit.errors.OrekitException;
24 import org.orekit.errors.OrekitMessages;
25 import org.orekit.gnss.SatelliteSystem;
26 import org.orekit.gnss.metric.messages.ssr.igm.SsrIgm03;
27 import org.orekit.gnss.metric.messages.ssr.igm.SsrIgm03Data;
28 import org.orekit.gnss.metric.parser.ByteArrayEncodedMessages;
29 import org.orekit.gnss.metric.parser.EncodedMessage;
30 import org.orekit.gnss.metric.parser.IgsSsrMessagesParser;
31
32 public class SsrIgm03Test {
33
34 private double eps = 1.0e-13;
35
36 @Test
37 public void testPerfectValueGalileo() {
38
39 final String m = "010000100100" +
40 "001" +
41 "00111111" +
42 "01111110011000111111" +
43 "0001" +
44 "0" +
45 "0111" +
46 "0000111101101111" +
47 "0001" +
48 "0" +
49 "000001" +
50 "001100" +
51 "10000100" +
52 "0000101011111101111111" +
53 "01001010111111011111" +
54 "01001010111111011111" +
55 "000010101111110111111" +
56 "0100101011111101111" +
57 "0100101011111101111" +
58 "0011101011111101111111" +
59 "001110101111110111111" +
60 "0011101011111101111111000110000";
61
62 final EncodedMessage message = new ByteArrayEncodedMessages(byteArrayFromBinary(m));
63 message.start();
64
65 ArrayList<Integer> messages = new ArrayList<>();
66 messages.add(63);
67
68 final SsrIgm03 igm03 = (SsrIgm03) new IgsSsrMessagesParser(messages).parse(message, false);
69
70
71 Assert.assertEquals(1, igm03.getData().size());
72 Assert.assertEquals(SatelliteSystem.GALILEO, igm03.getSatelliteSystem());
73
74
75 Assert.assertEquals(63, igm03.getTypeCode());
76 Assert.assertEquals(517695.0, igm03.getHeader().getSsrEpoch1s(), eps);
77 Assert.assertEquals(2.0, igm03.getHeader().getSsrUpdateInterval(), eps);
78 Assert.assertEquals(0, igm03.getHeader().getSsrMultipleMessageIndicator());
79 Assert.assertEquals(7, igm03.getHeader().getIodSsr());
80 Assert.assertEquals(3951, igm03.getHeader().getSsrProviderId());
81 Assert.assertEquals(1, igm03.getHeader().getSsrSolutionId());
82 Assert.assertEquals(0, igm03.getHeader().getCrsIndicator());
83 Assert.assertEquals(1, igm03.getHeader().getNumberOfSatellites());
84
85
86 final SsrIgm03Data e12 = igm03.getSsrIgm03Data().get("E12").get(0);
87 Assert.assertEquals(12, e12.getSatelliteID());
88 Assert.assertEquals(132, e12.getGnssIod());
89 Assert.assertEquals(18.0095, e12.getOrbitCorrection().getDeltaOrbitRadial(), eps);
90 Assert.assertEquals(122.8668, e12.getOrbitCorrection().getDeltaOrbitAlongTrack(), eps);
91 Assert.assertEquals(122.8668, e12.getOrbitCorrection().getDeltaOrbitCrossTrack(), eps);
92 Assert.assertEquals(0.090047, e12.getOrbitCorrection().getDotOrbitDeltaRadial(), eps);
93 Assert.assertEquals(0.614332, e12.getOrbitCorrection().getDotOrbitDeltaAlongTrack(), eps);
94 Assert.assertEquals(0.614332, e12.getOrbitCorrection().getDotOrbitDeltaCrossTrack(), eps);
95 Assert.assertEquals(96.6527, e12.getClockCorrection().getDeltaClockC0(), eps);
96 Assert.assertEquals(0.483263, e12.getClockCorrection().getDeltaClockC1(), eps);
97 Assert.assertEquals(0.61857734, e12.getClockCorrection().getDeltaClockC2(), eps);
98
99 }
100
101 @Test
102 public void testPerfectValueGPS() {
103
104 final String m = "010000100100" +
105 "001" +
106 "00010111" +
107 "01111110011000111111" +
108 "1001" +
109 "0" +
110 "0111" +
111 "0000111101101111" +
112 "0001" +
113 "0" +
114 "000001" +
115 "000001" +
116 "10000100" +
117 "0000101011111101111111" +
118 "01001010111111011111" +
119 "01001010111111011111" +
120 "000010101111110111111" +
121 "0100101011111101111" +
122 "0100101011111101111" +
123 "0011101011111101111111" +
124 "001110101111110111111" +
125 "0011101011111101111111000110000";
126
127 final EncodedMessage message = new ByteArrayEncodedMessages(byteArrayFromBinary(m));
128 message.start();
129
130 ArrayList<Integer> messages = new ArrayList<>();
131 messages.add(23);
132
133 final SsrIgm03 igm03 = (SsrIgm03) new IgsSsrMessagesParser(messages).parse(message, false);
134
135
136 Assert.assertEquals(1, igm03.getData().size());
137 Assert.assertEquals(SatelliteSystem.GPS, igm03.getSatelliteSystem());
138
139
140 Assert.assertEquals(23, igm03.getTypeCode());
141 Assert.assertEquals(517695.0, igm03.getHeader().getSsrEpoch1s(), eps);
142 Assert.assertEquals(300.0, igm03.getHeader().getSsrUpdateInterval(), eps);
143 Assert.assertEquals(0, igm03.getHeader().getSsrMultipleMessageIndicator());
144 Assert.assertEquals(7, igm03.getHeader().getIodSsr());
145 Assert.assertEquals(3951, igm03.getHeader().getSsrProviderId());
146 Assert.assertEquals(1, igm03.getHeader().getSsrSolutionId());
147 Assert.assertEquals(0, igm03.getHeader().getCrsIndicator());
148 Assert.assertEquals(1, igm03.getHeader().getNumberOfSatellites());
149
150
151 final SsrIgm03Data g01 = igm03.getSsrIgm03Data().get("G01").get(0);
152 Assert.assertEquals(1, g01.getSatelliteID());
153 Assert.assertEquals(132, g01.getGnssIod());
154 Assert.assertEquals(18.0095, g01.getOrbitCorrection().getDeltaOrbitRadial(), eps);
155 Assert.assertEquals(122.8668, g01.getOrbitCorrection().getDeltaOrbitAlongTrack(), eps);
156 Assert.assertEquals(122.8668, g01.getOrbitCorrection().getDeltaOrbitCrossTrack(), eps);
157 Assert.assertEquals(0.090047, g01.getOrbitCorrection().getDotOrbitDeltaRadial(), eps);
158 Assert.assertEquals(0.614332, g01.getOrbitCorrection().getDotOrbitDeltaAlongTrack(), eps);
159 Assert.assertEquals(0.614332, g01.getOrbitCorrection().getDotOrbitDeltaCrossTrack(), eps);
160 Assert.assertEquals(96.6527, g01.getClockCorrection().getDeltaClockC0(), eps);
161 Assert.assertEquals(0.483263, g01.getClockCorrection().getDeltaClockC1(), eps);
162 Assert.assertEquals(0.61857734, g01.getClockCorrection().getDeltaClockC2(), eps);
163
164 }
165
166 @Test
167 public void testNullMessage() {
168
169 final String m = "010000100100" +
170 "001" +
171 "00111111" +
172 "01111110011000111111" +
173 "0101" +
174 "0" +
175 "0111" +
176 "0000111101101111" +
177 "0001" +
178 "0" +
179 "000001" +
180 "001100" +
181 "10000100" +
182 "0000101011111101111111" +
183 "01001010111111011111" +
184 "01001010111111011111" +
185 "000010101111110111111" +
186 "0100101011111101111" +
187 "0100101011111101111" +
188 "0011101011111101111111" +
189 "001110101111110111111" +
190 "0011101011111101111111000110000";
191
192 final EncodedMessage message = new ByteArrayEncodedMessages(byteArrayFromBinary(m));
193 message.start();
194
195 ArrayList<Integer> messages = new ArrayList<>();
196 messages.add(9999999);
197
198 final SsrIgm03 igm03 = (SsrIgm03) new IgsSsrMessagesParser(messages).parse(message, false);
199
200 Assert.assertNull(igm03);
201 }
202
203 @Test
204 public void testEmptyMessage() {
205 try {
206 final byte[] array = new byte[0];
207 final EncodedMessage emptyMessage = new ByteArrayEncodedMessages(array);
208 new IgsSsrMessagesParser(new ArrayList<Integer>()).parse(emptyMessage, false);
209 Assert.fail("an exception should have been thrown");
210 } catch (OrekitException oe) {
211 Assert.assertEquals(OrekitMessages.END_OF_ENCODED_MESSAGE, oe.getSpecifier());
212 }
213
214 }
215
216 private byte[] byteArrayFromBinary(String radix2Value) {
217 final byte[] array = new byte[radix2Value.length() / 8];
218 for (int i = 0; i < array.length; ++i) {
219 for (int j = 0; j < 8; ++j) {
220 if (radix2Value.charAt(8 * i + j) != '0') {
221 array[i] |= 0x1 << (7 - j);
222 }
223 }
224 }
225 return array;
226 }
227
228 }