1   /* Copyright 2002-2025 CS GROUP
2    * Licensed to CS GROUP (CS) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * CS licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.orekit.time;
18  
19  import org.junit.jupiter.api.Assertions;
20  import org.junit.jupiter.api.BeforeEach;
21  import org.junit.jupiter.api.Test;
22  import org.orekit.Utils;
23  
24  import java.util.List;
25  
26  public class BurstSelectorStepTest {
27  
28      @Test
29      public void testNoAlign() {
30          final TimeScale utc = TimeScalesFactory.getUTC();
31          final DatesSelector selector = new BurstSelector(3, 10.0, 60.0, null);
32          final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
33          final AbsoluteDate t1 = t0.shiftedBy(71);
34          final List<AbsoluteDate> list = selector.selectDates(t0, t1);
35          Assertions.assertEquals(5, list.size());
36          Assertions.assertEquals( 27.0, list.get(0).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
37          Assertions.assertEquals( 37.0, list.get(1).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
38          Assertions.assertEquals( 47.0, list.get(2).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
39          Assertions.assertEquals( 87.0, list.get(3).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
40          Assertions.assertEquals( 97.0, list.get(4).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
41      }
42  
43      @Test
44      public void testAlignUTCBeforeForward() {
45          final TimeScale utc = TimeScalesFactory.getUTC();
46          final DatesSelector selector = new BurstSelector(2, 10.0, 30.0, utc);
47          final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
48          final AbsoluteDate t1 = t0.shiftedBy(62);
49          final List<AbsoluteDate> list = selector.selectDates(t0, t1);
50          Assertions.assertEquals(4, list.size());
51          Assertions.assertEquals( 30.0, list.get(0).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
52          Assertions.assertEquals( 40.0, list.get(1).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
53          Assertions.assertEquals( 60.0, list.get(2).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
54          Assertions.assertEquals( 70.0, list.get(3).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
55      }
56  
57      @Test
58      public void testAlignUTCBeforeBackward() {
59          final TimeScale utc = TimeScalesFactory.getUTC();
60          final DatesSelector selector = new BurstSelector(2, 10.0, 30.0, utc);
61          final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
62          final AbsoluteDate t1 = t0.shiftedBy(62);
63          final List<AbsoluteDate> list = selector.selectDates(t1, t0);
64          Assertions.assertEquals(4, list.size());
65          Assertions.assertEquals( 70.0, list.get(0).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
66          Assertions.assertEquals( 60.0, list.get(1).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
67          Assertions.assertEquals( 40.0, list.get(2).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
68          Assertions.assertEquals( 30.0, list.get(3).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
69      }
70  
71      @Test
72      public void testAlignUTCAfterForward() {
73          final TimeScale utc = TimeScalesFactory.getUTC();
74          final DatesSelector selector = new BurstSelector(3, 10.0, 60.0, utc);
75          final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
76          final AbsoluteDate t1 = t0.shiftedBy(2);
77          final AbsoluteDate t2 = t1.shiftedBy(98);
78          final List<AbsoluteDate> list1 = selector.selectDates(t0, t1);
79          Assertions.assertEquals(0, list1.size());
80          final List<AbsoluteDate> list2 = selector.selectDates(t1, t2);
81          Assertions.assertEquals(4, list2.size());
82          Assertions.assertEquals( 60.0, list2.get(0).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
83          Assertions.assertEquals( 70.0, list2.get(1).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
84          Assertions.assertEquals( 80.0, list2.get(2).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
85          Assertions.assertEquals(120.0, list2.get(3).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
86      }
87  
88      @Test
89      public void testAlignUTCAfterBackward() {
90          final TimeScale utc = TimeScalesFactory.getUTC();
91          final DatesSelector selector = new BurstSelector(3, 10.0, 60.0, utc);
92          final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
93          final AbsoluteDate t1 = t0.shiftedBy(2);
94          final AbsoluteDate t2 = t1.shiftedBy(98);
95          final List<AbsoluteDate> list1 = selector.selectDates(t2, t1);
96          Assertions.assertEquals(4, list1.size());
97          Assertions.assertEquals(120.0, list1.get(0).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
98          Assertions.assertEquals( 80.0, list1.get(1).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
99          Assertions.assertEquals( 70.0, list1.get(2).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
100         Assertions.assertEquals( 60.0, list1.get(3).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
101         final List<AbsoluteDate> list2 = selector.selectDates(t1, t0);
102         Assertions.assertEquals(0, list2.size());
103     }
104 
105     @Test
106     public void testInterruptedStream() {
107         final TimeScale utc = TimeScalesFactory.getUTC();
108         final DatesSelector selector = new BurstSelector(3, 10.0, 60.0, null);
109         final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
110         final AbsoluteDate t1 = t0.shiftedBy(71);
111         final AbsoluteDate t2 = t1.shiftedBy(30);
112         final List<AbsoluteDate> list1 = selector.selectDates(t0, t1);
113         Assertions.assertEquals(5, list1.size());
114         final List<AbsoluteDate> list2 = selector.selectDates(t1, t2);
115         Assertions.assertEquals(1, list2.size());
116         Assertions.assertEquals(10.0, list2.get(0).durationFrom(list1.get(list1.size() - 1)), 1.0e-15);
117     }
118 
119     @Test
120     public void testMissedHighRateNoReset() {
121         final TimeScale utc = TimeScalesFactory.getUTC();
122         final DatesSelector selector = new BurstSelector(3, 10.0, 60.0, null);
123         final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
124         final AbsoluteDate t1 = t0.shiftedBy(71);
125         final AbsoluteDate t2 = t1.shiftedBy(30);
126         final AbsoluteDate t3 = t2.shiftedBy(19);
127         final List<AbsoluteDate> list1 = selector.selectDates(t0, t1);
128         Assertions.assertEquals(5, list1.size());
129         final List<AbsoluteDate> list2 = selector.selectDates(t2, t3);
130         Assertions.assertEquals(1, list2.size());
131         Assertions.assertEquals(50.0, list2.get(0).durationFrom(list1.get(list1.size() - 1)), 1.0e-15);
132     }
133 
134     @Test
135     public void testResetStream() {
136         final TimeScale utc = TimeScalesFactory.getUTC();
137         final DatesSelector selector = new BurstSelector(3, 10.0, 60.0, null);
138         final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
139         final AbsoluteDate t1 = t0.shiftedBy(71);
140         final AbsoluteDate t2 = t1.shiftedBy(50);
141         final AbsoluteDate t3 = t2.shiftedBy(15);
142         final List<AbsoluteDate> list1 = selector.selectDates(t0, t1);
143         Assertions.assertEquals(5, list1.size());
144         final List<AbsoluteDate> list2 = selector.selectDates(t2, t3);
145         Assertions.assertEquals(2, list2.size());
146         Assertions.assertEquals( 0.0, list2.get(0).durationFrom(t2), 1.0e-15);
147         Assertions.assertEquals(10.0, list2.get(1).durationFrom(t2), 1.0e-15);
148     }
149 
150     @Test
151     public void testShortInterval() {
152         final TimeScale utc = TimeScalesFactory.getUTC();
153         final DatesSelector selector = new BurstSelector(3, 10.0, 60.0, null);
154         final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
155         final AbsoluteDate t1 = t0.shiftedBy(71);
156         final AbsoluteDate t2 = t1.shiftedBy(8);
157         final List<AbsoluteDate> list1 = selector.selectDates(t0, t1);
158         Assertions.assertEquals(5, list1.size());
159         final List<AbsoluteDate> list2 = selector.selectDates(t1, t2);
160         Assertions.assertEquals(0, list2.size());
161     }
162 
163     @Test
164     public void testStartMidBurstForward() {
165         final TimeScale utc = TimeScalesFactory.getUTC();
166         final DatesSelector selector = new BurstSelector(3, 10.0, 60.0, utc);
167         final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:17.0", utc);
168         final AbsoluteDate t1 = t0.shiftedBy(118);
169         final List<AbsoluteDate> list1 = selector.selectDates(t0, t1);
170         Assertions.assertEquals(6, list1.size());
171         Assertions.assertEquals( 20.0, list1.get(0).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
172         Assertions.assertEquals( 60.0, list1.get(1).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
173         Assertions.assertEquals( 70.0, list1.get(2).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
174         Assertions.assertEquals( 80.0, list1.get(3).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
175         Assertions.assertEquals(120.0, list1.get(4).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
176         Assertions.assertEquals(130.0, list1.get(5).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
177     }
178 
179     @Test
180     public void testStartMidBurstBackward() {
181         final TimeScale utc = TimeScalesFactory.getUTC();
182         final DatesSelector selector = new BurstSelector(3, 10.0, 60.0, utc);
183         final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:17.0", utc);
184         final AbsoluteDate t1 = t0.shiftedBy(118);
185         final List<AbsoluteDate> list1 = selector.selectDates(t1, t0);
186         Assertions.assertEquals(6, list1.size());
187         Assertions.assertEquals(130.0, list1.get(0).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
188         Assertions.assertEquals(120.0, list1.get(1).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
189         Assertions.assertEquals( 80.0, list1.get(2).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
190         Assertions.assertEquals( 70.0, list1.get(3).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
191         Assertions.assertEquals( 60.0, list1.get(4).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
192         Assertions.assertEquals( 20.0, list1.get(5).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
193     }
194 
195     @BeforeEach
196     public void setUp() {
197         Utils.setDataRoot("regular-data");
198     }
199 
200 }