1   /* Copyright 2022-2025 Romain Serra
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.Test;
20  
21  import static org.junit.jupiter.api.Assertions.assertEquals;
22  import static org.junit.jupiter.api.Assertions.assertTrue;
23  import static org.junit.jupiter.api.Assertions.assertFalse;
24  
25  class TimeIntervalTest {
26  
27      @Test
28      void testOf() {
29          // GIVEN
30          final AbsoluteDate minDate = AbsoluteDate.ARBITRARY_EPOCH;
31          final AbsoluteDate maxDate = minDate.shiftedBy(1);
32          // WHEN
33          final TimeInterval timeInterval = TimeInterval.of(maxDate, minDate);
34          // THEN
35          assertEquals(minDate, timeInterval.getStartDate());
36          assertEquals(maxDate, timeInterval.getEndDate());
37      }
38  
39      @Test
40      void testContainsDate() {
41          // GIVEN
42          final AbsoluteDate minDate = AbsoluteDate.ARBITRARY_EPOCH;
43          final AbsoluteDate maxDate = minDate.shiftedBy(1);
44          final TimeInterval timeInterval = TimeInterval.of(maxDate, minDate);
45          // WHEN & THEN
46          assertFalse(timeInterval.contains(minDate.shiftedBy(-1)));
47          assertTrue(timeInterval.contains(minDate));
48          assertTrue(timeInterval.contains(minDate.shiftedBy(timeInterval.duration() / 2)));
49          assertTrue(timeInterval.contains(maxDate));
50          assertFalse(timeInterval.contains(maxDate.shiftedBy(2)));
51      }
52  
53      @Test
54      void testContainsInterval() {
55          // GIVEN
56          final AbsoluteDate minDate = AbsoluteDate.ARBITRARY_EPOCH;
57          final AbsoluteDate maxDate = minDate.shiftedBy(1);
58          final TimeInterval timeInterval = TimeInterval.of(maxDate, minDate);
59          final TimeInterval allTimes = TimeInterval.of(AbsoluteDate.PAST_INFINITY, AbsoluteDate.FUTURE_INFINITY);
60          // WHEN & THEN
61          assertFalse(timeInterval.contains(TimeInterval.of(maxDate.shiftedBy(1), maxDate.shiftedBy(10))));
62          assertFalse(timeInterval.contains(allTimes));
63          assertFalse(timeInterval.contains(TimeInterval.of(AbsoluteDate.PAST_INFINITY, maxDate)));
64          assertFalse(timeInterval.contains(TimeInterval.of(minDate, AbsoluteDate.FUTURE_INFINITY)));
65          assertTrue(TimeInterval.of(AbsoluteDate.PAST_INFINITY, maxDate).contains(timeInterval));
66          assertTrue(TimeInterval.of(minDate, AbsoluteDate.FUTURE_INFINITY).contains(timeInterval));
67          assertTrue(allTimes.contains(timeInterval));
68          assertTrue(timeInterval.contains(TimeInterval.of(minDate, minDate)));
69          assertTrue(timeInterval.contains(TimeInterval.of(maxDate, maxDate)));
70          assertTrue(timeInterval.contains(timeInterval));
71          assertTrue(timeInterval.contains(TimeInterval.of(minDate.shiftedBy(0.5), maxDate.shiftedBy(-0.1))));
72      }
73  
74      @Test
75      void testIntersects() {
76          // GIVEN
77          final AbsoluteDate minDate = AbsoluteDate.ARBITRARY_EPOCH;
78          final AbsoluteDate maxDate = minDate.shiftedBy(1);
79          final TimeInterval timeInterval = TimeInterval.of(maxDate, minDate);
80          final TimeInterval allTimes = TimeInterval.of(AbsoluteDate.PAST_INFINITY, AbsoluteDate.FUTURE_INFINITY);
81          // WHEN & THEN
82          assertFalse(timeInterval.intersects(TimeInterval.of(minDate.shiftedBy(-10), minDate.shiftedBy(-1))));
83          assertFalse(timeInterval.intersects(TimeInterval.of(maxDate.shiftedBy(1), maxDate.shiftedBy(10))));
84          assertTrue(timeInterval.intersects(allTimes));
85          assertTrue(allTimes.intersects(timeInterval));
86          assertTrue(timeInterval.intersects(timeInterval));
87          assertTrue(timeInterval.intersects(TimeInterval.of(minDate, minDate)));
88          assertTrue(timeInterval.intersects(TimeInterval.of(maxDate, maxDate)));
89          assertTrue(timeInterval.intersects(TimeInterval.of(minDate.shiftedBy(0.1), maxDate.shiftedBy(-0.5))));
90      }
91  
92      @Test
93      void testDuration() {
94          // GIVEN
95          final AbsoluteDate minDate = AbsoluteDate.ARBITRARY_EPOCH;
96          final double expectedDuration = 42;
97          final AbsoluteDate maxDate = minDate.shiftedBy(expectedDuration);
98          final TimeInterval timeInterval = TimeInterval.of(minDate, maxDate);
99          // WHEN
100         final double actualDuration = timeInterval.duration();
101         // THEN
102         assertEquals(expectedDuration, actualDuration);
103     }
104 }