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 FixedStepSelectorTest {
27  
28      @Test
29      public void testNoAlign() {
30          final TimeScale utc = TimeScalesFactory.getUTC();
31          final DatesSelector selector = new FixedStepSelector(10.0, null);
32          final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
33          final AbsoluteDate t1 = t0.shiftedBy(91);
34          final List<AbsoluteDate> list = selector.selectDates(t0, t1);
35          Assertions.assertEquals(10, 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( 57.0, list.get(3).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
40          Assertions.assertEquals( 67.0, list.get(4).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
41          Assertions.assertEquals( 77.0, list.get(5).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
42          Assertions.assertEquals( 87.0, list.get(6).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
43          Assertions.assertEquals( 97.0, list.get(7).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
44          Assertions.assertEquals(107.0, list.get(8).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
45          Assertions.assertEquals(117.0, list.get(9).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
46      }
47  
48      @Test
49      public void testAlignUTCBeforeForward() {
50          final TimeScale utc = TimeScalesFactory.getUTC();
51          final DatesSelector selector = new FixedStepSelector(5.0, utc);
52          final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
53          final AbsoluteDate t1 = t0.shiftedBy(17);
54          final List<AbsoluteDate> list = selector.selectDates(t0, t1);
55          Assertions.assertEquals(3, list.size());
56          Assertions.assertEquals( 30.0, list.get(0).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
57          Assertions.assertEquals( 35.0, list.get(1).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
58          Assertions.assertEquals( 40.0, list.get(2).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
59      }
60  
61      @Test
62      public void testAlignUTCBeforeBackward() {
63          final TimeScale utc = TimeScalesFactory.getUTC();
64          final DatesSelector selector = new FixedStepSelector(5.0, utc);
65          final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
66          final AbsoluteDate t1 = t0.shiftedBy(17);
67          final List<AbsoluteDate> list = selector.selectDates(t1, t0);
68          Assertions.assertEquals(3, list.size());
69          Assertions.assertEquals( 40.0, list.get(0).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
70          Assertions.assertEquals( 35.0, list.get(1).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
71          Assertions.assertEquals( 30.0, list.get(2).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
72      }
73  
74      @Test
75      public void testAlignUTCAfterForward() {
76          final TimeScale utc = TimeScalesFactory.getUTC();
77          final DatesSelector selector = new FixedStepSelector(10.0, utc);
78          final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
79          final AbsoluteDate t1 = t0.shiftedBy(2);
80          final AbsoluteDate t2 = t1.shiftedBy(89);
81          final List<AbsoluteDate> list1 = selector.selectDates(t0, t1);
82          Assertions.assertEquals(0, list1.size());
83          final List<AbsoluteDate> list2 = selector.selectDates(t1, t2);
84          Assertions.assertEquals(9, list2.size());
85          Assertions.assertEquals( 30.0, list2.get(0).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
86          Assertions.assertEquals( 40.0, list2.get(1).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
87          Assertions.assertEquals( 50.0, list2.get(2).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
88          Assertions.assertEquals( 60.0, list2.get(3).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
89          Assertions.assertEquals( 70.0, list2.get(4).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
90          Assertions.assertEquals( 80.0, list2.get(5).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
91          Assertions.assertEquals( 90.0, list2.get(6).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
92          Assertions.assertEquals(100.0, list2.get(7).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
93          Assertions.assertEquals(110.0, list2.get(8).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
94      }
95  
96      @Test
97      public void testAlignUTCAfterBackward() {
98          final TimeScale utc = TimeScalesFactory.getUTC();
99          final DatesSelector selector = new FixedStepSelector(10.0, utc);
100         final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
101         final AbsoluteDate t1 = t0.shiftedBy(2);
102         final AbsoluteDate t2 = t1.shiftedBy(89);
103         final List<AbsoluteDate> list1 = selector.selectDates(t2, t1);
104         Assertions.assertEquals(9, list1.size());
105         Assertions.assertEquals(110.0, list1.get(0).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
106         Assertions.assertEquals(100.0, list1.get(1).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
107         Assertions.assertEquals( 90.0, list1.get(2).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
108         Assertions.assertEquals( 80.0, list1.get(3).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
109         Assertions.assertEquals( 70.0, list1.get(4).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
110         Assertions.assertEquals( 60.0, list1.get(5).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
111         Assertions.assertEquals( 50.0, list1.get(6).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
112         Assertions.assertEquals( 40.0, list1.get(7).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
113         Assertions.assertEquals( 30.0, list1.get(8).getComponents(utc).getTime().getSecondsInLocalDay(), 1.0e-15);
114         final List<AbsoluteDate> list2 = selector.selectDates(t1, t0);
115         Assertions.assertEquals(0, list2.size());
116     }
117 
118     @Test
119     public void testInterruptedStream() {
120         final TimeScale utc = TimeScalesFactory.getUTC();
121         final DatesSelector selector = new FixedStepSelector(10.0, null);
122         final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
123         final AbsoluteDate t1 = t0.shiftedBy(91);
124         final AbsoluteDate t2 = t1.shiftedBy(30);
125         final List<AbsoluteDate> list1 = selector.selectDates(t0, t1);
126         Assertions.assertEquals(10, list1.size());
127         final List<AbsoluteDate> list2 = selector.selectDates(t1, t2);
128         Assertions.assertEquals(3, list2.size());
129         Assertions.assertEquals(10.0, list2.get(0).durationFrom(list1.get(list1.size() - 1)), 1.0e-15);
130     }
131 
132     @Test
133     public void testResetStream() {
134         final TimeScale utc = TimeScalesFactory.getUTC();
135         final DatesSelector selector = new FixedStepSelector(10.0, null);
136         final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
137         final AbsoluteDate t1 = t0.shiftedBy(91);
138         final AbsoluteDate t2 = t1.shiftedBy(30);
139         final AbsoluteDate t3 = t2.shiftedBy(15);
140         final List<AbsoluteDate> list1 = selector.selectDates(t0, t1);
141         Assertions.assertEquals(10, list1.size());
142         final List<AbsoluteDate> list2 = selector.selectDates(t2, t3);
143         Assertions.assertEquals(2, list2.size());
144         Assertions.assertEquals( 0.0, list2.get(0).durationFrom(t2), 1.0e-15);
145         Assertions.assertEquals(10.0, list2.get(1).durationFrom(t2), 1.0e-15);
146     }
147 
148     @Test
149     public void testShortInterval() {
150         final TimeScale utc = TimeScalesFactory.getUTC();
151         final DatesSelector selector = new FixedStepSelector(10.0, null);
152         final AbsoluteDate t0 = new AbsoluteDate("2003-02-25T00:00:27.0", utc);
153         final AbsoluteDate t1 = t0.shiftedBy(91);
154         final AbsoluteDate t2 = t1.shiftedBy(8);
155         final List<AbsoluteDate> list1 = selector.selectDates(t0, t1);
156         Assertions.assertEquals(10, list1.size());
157         final List<AbsoluteDate> list2 = selector.selectDates(t1, t2);
158         Assertions.assertEquals(0, list2.size());
159     }
160 
161     @BeforeEach
162     public void setUp() {
163         Utils.setDataRoot("regular-data");
164     }
165 
166 }