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.SsrIgm04;
27 import org.orekit.gnss.metric.messages.ssr.igm.SsrIgm04Data;
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 SsrIgm04Test {
33
34 private double eps = 1.0e-13;
35
36 @Test
37 public void testPerfectValueQZSS() {
38
39 final String m = "010000100100" +
40 "001" +
41 "01010100" +
42 "01111110011000111111" +
43 "0011" +
44 "0" +
45 "0111" +
46 "0000111101101111" +
47 "0001" +
48 "000010" +
49 "000001" +
50 "0011101011111101111111" +
51 "001100" +
52 "0011101011111101111110000";
53
54 final EncodedMessage message = new ByteArrayEncodedMessages(byteArrayFromBinary(m));
55 message.start();
56
57 ArrayList<Integer> messages = new ArrayList<>();
58 messages.add(84);
59
60 final SsrIgm04 igm04 = (SsrIgm04) new IgsSsrMessagesParser(messages).parse(message, false);
61
62
63 Assert.assertEquals(2, igm04.getData().size());
64 Assert.assertEquals(SatelliteSystem.QZSS, igm04.getSatelliteSystem());
65
66
67 Assert.assertEquals(84, igm04.getTypeCode());
68 Assert.assertEquals(517695.0, igm04.getHeader().getSsrEpoch1s(), eps);
69 Assert.assertEquals(10.0, igm04.getHeader().getSsrUpdateInterval(), eps);
70 Assert.assertEquals(0, igm04.getHeader().getSsrMultipleMessageIndicator());
71 Assert.assertEquals(7, igm04.getHeader().getIodSsr());
72 Assert.assertEquals(3951, igm04.getHeader().getSsrProviderId());
73 Assert.assertEquals(1, igm04.getHeader().getSsrSolutionId());
74 Assert.assertEquals(2, igm04.getHeader().getNumberOfSatellites());
75
76
77 final SsrIgm04Data j204 = igm04.getSsrIgm04Data().get("J204").get(0);
78 Assert.assertEquals(204, j204.getSatelliteID());
79 Assert.assertEquals(96.6526, j204.getHighRateClockCorrection(), eps);
80
81
82 final SsrIgm04Data j193 = igm04.getSsrIgm04Data().get("J193").get(0);
83 Assert.assertEquals(193, j193.getSatelliteID());
84 Assert.assertEquals(96.6527, j193.getHighRateClockCorrection(), eps);
85
86 }
87
88 @Test
89 public void testPerfectValueGalileo() {
90
91 final String m = "010000100100" +
92 "001" +
93 "01000000" +
94 "01111110011000111111" +
95 "1010" +
96 "0" +
97 "0111" +
98 "0000111101101111" +
99 "0001" +
100 "000010" +
101 "000001" +
102 "0011101011111101111111" +
103 "010000" +
104 "0011101011111101111110000";
105
106 final EncodedMessage message = new ByteArrayEncodedMessages(byteArrayFromBinary(m));
107 message.start();
108
109 ArrayList<Integer> messages = new ArrayList<>();
110 messages.add(64);
111
112 final SsrIgm04 igm04 = (SsrIgm04) new IgsSsrMessagesParser(messages).parse(message, false);
113
114
115 Assert.assertEquals(2, igm04.getData().size());
116 Assert.assertEquals(SatelliteSystem.GALILEO, igm04.getSatelliteSystem());
117
118
119 Assert.assertEquals(64, igm04.getTypeCode());
120 Assert.assertEquals(517695.0, igm04.getHeader().getSsrEpoch1s(), eps);
121 Assert.assertEquals(600.0, igm04.getHeader().getSsrUpdateInterval(), eps);
122 Assert.assertEquals(0, igm04.getHeader().getSsrMultipleMessageIndicator());
123 Assert.assertEquals(7, igm04.getHeader().getIodSsr());
124 Assert.assertEquals(3951, igm04.getHeader().getSsrProviderId());
125 Assert.assertEquals(1, igm04.getHeader().getSsrSolutionId());
126 Assert.assertEquals(2, igm04.getHeader().getNumberOfSatellites());
127
128
129 final SsrIgm04Data e01 = igm04.getSsrIgm04Data().get("E01").get(0);
130 Assert.assertEquals(1, e01.getSatelliteID());
131 Assert.assertEquals(96.6527, e01.getHighRateClockCorrection(), eps);
132
133
134 final SsrIgm04Data e16 = igm04.getSsrIgm04Data().get("E16").get(0);
135 Assert.assertEquals(16, e16.getSatelliteID());
136 Assert.assertEquals(96.6526, e16.getHighRateClockCorrection(), eps);
137
138 }
139
140 @Test
141 public void testNullMessage() {
142
143 final String m = "010000100100" +
144 "001" +
145 "01010100" +
146 "01111110011000111111" +
147 "0101" +
148 "0" +
149 "0111" +
150 "0000111101101111" +
151 "0001" +
152 "000010" +
153 "000001" +
154 "0011101011111101111111" +
155 "001100" +
156 "0011101011111101111110000";
157
158 final EncodedMessage message = new ByteArrayEncodedMessages(byteArrayFromBinary(m));
159 message.start();
160
161 ArrayList<Integer> messages = new ArrayList<>();
162 messages.add(9999999);
163
164 final SsrIgm04 igm04 = (SsrIgm04) new IgsSsrMessagesParser(messages).parse(message, false);
165
166 Assert.assertNull(igm04);
167 }
168
169 @Test
170 public void testEmptyMessage() {
171 try {
172 final byte[] array = new byte[0];
173 final EncodedMessage emptyMessage = new ByteArrayEncodedMessages(array);
174 new IgsSsrMessagesParser(new ArrayList<Integer>()).parse(emptyMessage, false);
175 Assert.fail("an exception should have been thrown");
176 } catch (OrekitException oe) {
177 Assert.assertEquals(OrekitMessages.END_OF_ENCODED_MESSAGE, oe.getSpecifier());
178 }
179
180 }
181
182 private byte[] byteArrayFromBinary(String radix2Value) {
183 final byte[] array = new byte[radix2Value.length() / 8];
184 for (int i = 0; i < array.length; ++i) {
185 for (int j = 0; j < 8; ++j) {
186 if (radix2Value.charAt(8 * i + j) != '0') {
187 array[i] |= 0x1 << (7 - j);
188 }
189 }
190 }
191 return array;
192 }
193
194 }