1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.utils;
18
19 import org.junit.jupiter.api.Assertions;
20 import org.junit.jupiter.api.BeforeAll;
21 import org.junit.jupiter.api.BeforeEach;
22 import org.junit.jupiter.api.Test;
23 import org.orekit.Utils;
24 import org.orekit.errors.OrekitException;
25 import org.orekit.errors.OrekitMessages;
26 import org.orekit.errors.TimeStampedCacheException;
27 import org.orekit.time.AbsoluteDate;
28
29 import java.util.Arrays;
30 import java.util.Collections;
31 import java.util.List;
32
33
34
35
36
37
38 public class SortedListTrimmerTest {
39
40
41
42
43 private static final AbsoluteDate date = AbsoluteDate.CCSDS_EPOCH;
44
45
46
47
48 @BeforeAll
49 public static void setUpBefore() {
50 Utils.setDataRoot("regular-data");
51 }
52
53
54
55
56 private List<AbsoluteDate> data;
57
58
59
60
61 private SortedListTrimmer trimmer;
62
63
64
65
66 @BeforeEach
67 public void setUp() {
68 data = Arrays.asList(date, date.shiftedBy(1), date.shiftedBy(2),
69 date.shiftedBy(3), date.shiftedBy(4),
70 date.shiftedBy(5));
71 trimmer = new SortedListTrimmer(3);
72 }
73
74
75
76
77
78 @Test
79 public void testGetNeighborsSubList() {
80
81 try {
82 new SortedListTrimmer(data.size() + 1).getNeighborsSubList(date, data);
83 Assertions.fail("Expected Exception");
84 } catch (OrekitException e) {
85 Assertions.assertEquals(OrekitMessages.NOT_ENOUGH_DATA, e.getSpecifier());
86 }
87
88
89 try {
90 new SortedListTrimmer(0);
91 Assertions.fail("Expected Exception");
92 } catch (IllegalArgumentException e) {
93
94 }
95
96
97 try {
98 new SortedListTrimmer(1).getNeighborsSubList(date, null);
99 Assertions.fail("Expected Exception");
100 } catch (NullPointerException e) {
101
102 }
103
104
105 try {
106 new SortedListTrimmer(1).getNeighborsSubList(date, Collections.emptyList());
107 Assertions.fail("Expected Exception");
108 } catch (OrekitException e) {
109 Assertions.assertEquals(OrekitMessages.NOT_ENOUGH_DATA, e.getSpecifier());
110 }
111 }
112
113
114
115
116
117 @Test
118 public void testGetNeighbors() {
119
120 int size = data.size();
121
122
123
124
125 try {
126 trimmer.getNeighborsSubList(data.get(0).shiftedBy(-1), data);
127 Assertions.fail("Expected Exception");
128 } catch (TimeStampedCacheException e) {
129
130 Assertions.assertEquals(OrekitMessages.UNABLE_TO_GENERATE_NEW_DATA_BEFORE, e.getSpecifier());
131 }
132
133
134 Assertions.assertArrayEquals(trimmer.getNeighborsSubList(data.get(0), data).toArray(),
135 data.subList(0, 3).toArray());
136
137 Assertions.assertArrayEquals(trimmer.getNeighborsSubList(data.get(0).shiftedBy(0.5), data).toArray(),
138 data.subList(0, 3).toArray());
139
140 Assertions.assertArrayEquals(trimmer.getNeighborsSubList(data.get(2), data).toArray(),
141 data.subList(1, 4).toArray());
142
143 Assertions.assertArrayEquals(trimmer.getNeighborsSubList(data.get(2).shiftedBy(0.5), data).toArray(),
144 data.subList(1, 4).toArray());
145
146 Assertions.assertArrayEquals(trimmer.getNeighborsSubList(data.get(size - 1).shiftedBy(-0.5), data).toArray(),
147 data.subList(size - 3, size).toArray());
148
149 Assertions.assertArrayEquals(trimmer.getNeighborsSubList(data.get(size - 1), data).toArray(),
150 data.subList(size - 3, size).toArray());
151
152
153 AbsoluteDate central = data.get(size - 1).shiftedBy(1);
154 try {
155 trimmer.getNeighborsSubList(central, data);
156 Assertions.fail("Expected Exception");
157 } catch (TimeStampedCacheException e) {
158
159 Assertions.assertEquals(OrekitMessages.UNABLE_TO_GENERATE_NEW_DATA_AFTER, e.getSpecifier());
160 }
161 }
162
163
164 @Test
165 public void testGetNeighborsSingle() {
166
167 trimmer = new SortedListTrimmer(1);
168 int size = data.size();
169
170
171
172 Assertions.assertArrayEquals(
173 trimmer.getNeighborsSubList(data.get(0), data).toArray(),
174 data.subList(0, 1).toArray());
175
176 Assertions.assertArrayEquals(
177 trimmer.getNeighborsSubList(data.get(0).shiftedBy(0.5), data).toArray(),
178 data.subList(0, 1).toArray());
179
180 Assertions.assertArrayEquals(
181 trimmer.getNeighborsSubList(data.get(2), data).toArray(),
182 data.subList(2, 3).toArray());
183
184 Assertions.assertArrayEquals(
185 trimmer.getNeighborsSubList(data.get(2).shiftedBy(0.1), data).toArray(),
186 data.subList(2, 3).toArray());
187
188 Assertions.assertArrayEquals(
189 trimmer.getNeighborsSubList(data.get(size - 1).shiftedBy(-0.1), data).toArray(),
190 data.subList(size - 2, size - 1).toArray());
191
192 Assertions.assertArrayEquals(
193 trimmer.getNeighborsSubList(data.get(size - 1), data).toArray(),
194 data.subList(size - 1, size).toArray());
195 }
196
197
198
199
200 @Test
201 public void testGetNeighborsSize() {
202 Assertions.assertEquals(trimmer.getNeighborsSize(), 3);
203 }
204
205 @Test
206 public void testNonLinear() {
207 final List<AbsoluteDate> nonLinearCache = Arrays.asList(date.shiftedBy(10),
208 date.shiftedBy(14),
209 date.shiftedBy(18),
210 date.shiftedBy(23),
211 date.shiftedBy(30),
212 date.shiftedBy(36),
213 date.shiftedBy(45),
214 date.shiftedBy(55),
215 date.shiftedBy(67),
216 date.shiftedBy(90),
217 date.shiftedBy(118));
218 for (double dt = 10; dt < 118; dt += 0.01) {
219 checkNeighbors(new SortedListTrimmer(2), nonLinearCache, dt);
220 }
221 }
222
223 private void checkNeighbors(final SortedListTrimmer nonLinearTrimmer,
224 final List<AbsoluteDate> nonLinearCache,
225 final double offset) {
226 List<AbsoluteDate> s = nonLinearTrimmer.getNeighborsSubList(date.shiftedBy(offset), nonLinearCache);
227 Assertions.assertEquals(2, s.size());
228 Assertions.assertTrue(s.get(0).durationFrom(date) <= offset);
229 Assertions.assertTrue(s.get(1).durationFrom(date) > offset);
230 }
231
232 }