1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.utils;
18
19 import java.util.ArrayList;
20 import java.util.Arrays;
21 import java.util.Collections;
22 import java.util.List;
23 import java.util.stream.Collectors;
24
25 import org.hipparchus.Field;
26 import org.hipparchus.util.Binary64;
27 import org.hipparchus.util.Binary64Field;
28 import org.junit.jupiter.api.Assertions;
29 import org.junit.jupiter.api.BeforeAll;
30 import org.junit.jupiter.api.BeforeEach;
31 import org.junit.jupiter.api.Test;
32 import org.orekit.Utils;
33 import org.orekit.errors.OrekitMessages;
34 import org.orekit.errors.TimeStampedCacheException;
35 import org.orekit.time.FieldAbsoluteDate;
36
37
38
39
40
41
42 public class ImmutableFieldTimeStampedCacheTest {
43
44
45
46
47 private static final Field<Binary64> field = Binary64Field.getInstance();
48
49
50
51
52 private static final FieldAbsoluteDate<Binary64> date = FieldAbsoluteDate.getCCSDSEpoch(field);
53
54
55
56
57 private List<FieldAbsoluteDate<Binary64>> data;
58
59
60
61
62 private ImmutableFieldTimeStampedCache<FieldAbsoluteDate<Binary64>, Binary64> cache;
63
64
65
66
67 @BeforeAll
68 public static void setUpBefore() {
69 Utils.setDataRoot("regular-data");
70 }
71
72
73
74
75 @BeforeEach
76 public void setUp() {
77 data = Arrays.asList(date, date.shiftedBy(1), date.shiftedBy(2),
78 date.shiftedBy(3), date.shiftedBy(4),
79 date.shiftedBy(5));
80 cache = new ImmutableFieldTimeStampedCache<>(3, data);
81 }
82
83
84
85
86 @Test
87 public void testImmutableTimeStampedCache() {
88
89 try {
90 new ImmutableFieldTimeStampedCache<>(data.size() + 1, data);
91 Assertions.fail("Expected Exception");
92 }
93 catch (IllegalArgumentException e) {
94
95 }
96
97
98 try {
99 new ImmutableFieldTimeStampedCache<>(0, data);
100 Assertions.fail("Expected Exception");
101 }
102 catch (IllegalArgumentException e) {
103
104 }
105
106
107 try {
108 new ImmutableFieldTimeStampedCache<FieldAbsoluteDate<Binary64>, Binary64>(1, null);
109 Assertions.fail("Expected Exception");
110 }
111 catch (NullPointerException e) {
112
113 }
114
115
116 try {
117 new ImmutableFieldTimeStampedCache<FieldAbsoluteDate<Binary64>, Binary64>(
118 1,
119 Collections.emptyList());
120 Assertions.fail("Expected Exception");
121 }
122 catch (IllegalArgumentException e) {
123
124 }
125 }
126
127
128
129
130
131 @Test
132 public void testGetNeighbors() {
133
134 int size = data.size();
135
136
137
138
139 try {
140 cache.getNeighbors(data.get(0).shiftedBy(-1));
141 Assertions.fail("Expected Exception");
142 }
143 catch (TimeStampedCacheException e) {
144
145 Assertions.assertEquals(OrekitMessages.UNABLE_TO_GENERATE_NEW_DATA_BEFORE, e.getSpecifier());
146 }
147
148
149 Assertions.assertArrayEquals(cache.getNeighbors(data.get(0)).toArray(), data
150 .subList(0, 3).toArray());
151
152 Assertions.assertArrayEquals(cache.getNeighbors(data.get(0).shiftedBy(0.5))
153 .toArray(), data.subList(0, 3).toArray());
154
155 Assertions.assertArrayEquals(cache.getNeighbors(data.get(2)).toArray(), data
156 .subList(1, 4).toArray());
157
158 Assertions.assertArrayEquals(cache.getNeighbors(data.get(2).shiftedBy(0.5))
159 .toArray(), data.subList(1, 4).toArray());
160
161 Assertions.assertArrayEquals(cache.getNeighbors(data.get(size - 1).shiftedBy(-0.5)).toArray(),
162 data.subList(size - 3, size).toArray());
163
164 Assertions.assertArrayEquals(cache.getNeighbors(data.get(size - 1)).toArray(),
165 data.subList(size - 3, size).toArray());
166
167
168 FieldAbsoluteDate<Binary64> central = data.get(size - 1).shiftedBy(1);
169 try {
170 cache.getNeighbors(central);
171 Assertions.fail("Expected Exception");
172 }
173 catch (TimeStampedCacheException e) {
174
175 Assertions.assertEquals(OrekitMessages.UNABLE_TO_GENERATE_NEW_DATA_AFTER, e.getSpecifier());
176 }
177 }
178
179
180
181
182 @Test
183 public void testGetNeighborsSize() {
184 Assertions.assertEquals(cache.getMaxNeighborsSize(), 3);
185 }
186
187
188
189
190 @Test
191 public void testGetEarliest() {
192 Assertions.assertEquals(cache.getEarliest(), data.get(0));
193 }
194
195
196
197
198 @Test
199 public void testGetLatest() {
200 Assertions.assertEquals(cache.getLatest(), data.get(data.size() - 1));
201 }
202
203
204
205
206 @Test
207 public void testGetAll() {
208 Assertions.assertArrayEquals(cache.getAll().toArray(), data.toArray());
209 }
210
211
212
213
214 @Test
215 public void testImmutable() {
216
217 List<FieldAbsoluteDate<Binary64>> actuals;
218 List<FieldAbsoluteDate<Binary64>> expecteds = new ArrayList<>(data);
219 FieldAbsoluteDate<Binary64> different = date.shiftedBy(-50);
220
221
222
223
224 data.set(0, different);
225 Assertions.assertArrayEquals(cache.getAll().toArray(), expecteds.toArray());
226
227
228 actuals = cache.getAll();
229 try {
230 actuals.set(0, different);
231 }
232 catch (UnsupportedOperationException e) {
233
234 }
235 Assertions.assertArrayEquals(cache.getAll().toArray(), expecteds.toArray());
236
237
238 Assertions.assertArrayEquals(cache.getAll().toArray(), expecteds.toArray());
239 }
240
241
242
243
244 @Test
245 public void testEmptyCache() {
246
247 cache = ImmutableFieldTimeStampedCache.emptyCache();
248
249
250 try {
251 cache.getNeighbors(date);
252 Assertions.fail("Expected Exception");
253 }
254 catch (TimeStampedCacheException e) {
255
256 }
257 try {
258 cache.getEarliest();
259 Assertions.fail("Expected Exception");
260 }
261 catch (IllegalStateException e) {
262
263 }
264 try {
265 cache.getLatest();
266 Assertions.fail("Expected Exception");
267 }
268 catch (IllegalStateException e) {
269
270 }
271 Assertions.assertEquals(cache.getAll().size(), 0);
272 Assertions.assertEquals(cache.getMaxNeighborsSize(), 0);
273 }
274
275 @Test
276 public void testNonLinear() {
277 final ImmutableFieldTimeStampedCache<FieldAbsoluteDate<Binary64>, Binary64> nonLinearCache = new ImmutableFieldTimeStampedCache<>(2,
278 Arrays.asList(date.shiftedBy(10),
279 date.shiftedBy(14),
280 date.shiftedBy(18),
281 date.shiftedBy(23),
282 date.shiftedBy(30),
283 date.shiftedBy(36),
284 date.shiftedBy(45),
285 date.shiftedBy(55),
286 date.shiftedBy(67),
287 date.shiftedBy(90),
288 date.shiftedBy(118)));
289 for (double dt = 10; dt < 118; dt += 0.01) {
290 checkNeighbors(nonLinearCache, dt);
291 }
292 }
293
294 private void checkNeighbors(final ImmutableFieldTimeStampedCache<FieldAbsoluteDate<Binary64>, Binary64> nonLinearCache,
295 final double offset) {
296 List<FieldAbsoluteDate<Binary64>> s = nonLinearCache.getNeighbors(date.shiftedBy(offset)).collect(Collectors.toList());
297 Assertions.assertEquals(2, s.size());
298 Assertions.assertTrue(s.get(0).durationFrom(date).getReal() <= offset);
299 Assertions.assertTrue(s.get(1).durationFrom(date).getReal() > offset);
300 }
301
302 }