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