1   /* Copyright 2013-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.rugged.utils;
18  
19  
20  import org.hipparchus.exception.LocalizedCoreFormats;
21  import org.junit.jupiter.api.Assertions;
22  import org.junit.jupiter.api.Test;
23  import org.orekit.errors.OrekitException;
24  import org.orekit.time.AbsoluteDate;
25  
26  public class AbsoluteDateForVectorisationTest {
27  	@Test
28      public void testShiftedBySeveralTimeShiftOneDate() {
29  
30  		AbsoluteDate date1 = new AbsoluteDate();
31          AbsoluteDate[] dates = new AbsoluteDate[] {date1};
32          double[] dts = new double[] {10.0, 20.0, 30.0};
33  	    AbsoluteDateArrayHandling datesForVect = new AbsoluteDateArrayHandling(dates);
34  	    AbsoluteDate[][] datesShifted = datesForVect.multipleShiftedBy(dts);
35  	    Assertions.assertEquals(datesShifted[0][0].durationFrom(date1.shiftedBy(10)), 0.0, 1e-5);
36  	    Assertions.assertEquals(datesShifted[0][1].durationFrom(date1.shiftedBy(20)), 0.0, 1e-5);
37  
38      }
39  
40  	@Test
41      public void testShiftedByCorrespondingTimeShift() {
42  
43  		AbsoluteDate date1 = new AbsoluteDate();
44  		AbsoluteDate date2 = date1.shiftedBy(10000);
45  		AbsoluteDate date3 = date1.shiftedBy(20000);
46          AbsoluteDate[] dates = new AbsoluteDate[] {date1, date2, date3};
47          double[] dts = new double[] {10.0, 20.0, 30.0};
48  	    AbsoluteDateArrayHandling datesForVect = new AbsoluteDateArrayHandling(dates);
49  	    AbsoluteDate[] datesShifted = datesForVect.shiftedBy(dts);
50  	    Assertions.assertEquals(datesShifted[0].durationFrom(date1.shiftedBy(10)), 0.0, 1e-5);
51  	    Assertions.assertEquals(datesShifted[1].durationFrom(date1.shiftedBy(10020)), 0.0, 1e-5);
52  	    Assertions.assertEquals(datesShifted[2].durationFrom(date1.shiftedBy(20030)), 0.0, 1e-5);
53  
54      }
55  
56  	@Test
57      public void testShiftedBySeveralTimeShiftSeveralDates() {
58  
59  		AbsoluteDate date1 = new AbsoluteDate();
60  		AbsoluteDate date2 = date1.shiftedBy(10000);
61          AbsoluteDate[] dates = new AbsoluteDate[] {date1, date2};
62          double[] dts = new double[] {10.0, 20.0, 30.0};
63  	    AbsoluteDateArrayHandling datesForVect = new AbsoluteDateArrayHandling(dates);
64  	    AbsoluteDate[][] datesShifted = datesForVect.multipleShiftedBy(dts);
65  	    Assertions.assertEquals(datesShifted[0][0].durationFrom(date1.shiftedBy(10)), 0.0, 1e-5);
66  	    Assertions.assertEquals(datesShifted[0][1].durationFrom(date1.shiftedBy(20)), 0.0, 1e-5);
67  	    Assertions.assertEquals(datesShifted[1][1].durationFrom(date2.shiftedBy(20)), 0.0, 1e-5);
68  	    Assertions.assertEquals(datesShifted[1][2].durationFrom(date2.shiftedBy(30)), 0.0, 1e-5);
69  
70      }
71  
72  	@Test
73      public void testDurationFromSeveralDates() {
74  
75  		AbsoluteDate date1 = new AbsoluteDate();
76  		AbsoluteDate date2 = date1.shiftedBy(10000);
77  		AbsoluteDate date3 = date1.shiftedBy(20000);
78  		AbsoluteDate date4 = date1.shiftedBy(100000);
79          AbsoluteDate[] dates = new AbsoluteDate[] {date1, date2, date3};
80          AbsoluteDate[] datesComputeDuration = new AbsoluteDate[] {date4, date1};
81  	    AbsoluteDateArrayHandling datesForVect = new AbsoluteDateArrayHandling(dates);
82  	    double[][] datesDurations = datesForVect.multipleDurationFrom(datesComputeDuration);
83  	    Assertions.assertEquals(datesDurations[0][0], date1.durationFrom(date4), 1e-5);
84  	    Assertions.assertEquals(datesDurations[0][1], date1.durationFrom(date1), 1e-5);
85  	    Assertions.assertEquals(datesDurations[1][0], date2.durationFrom(date4), 1e-5);
86  	    Assertions.assertEquals(datesDurations[1][1], date2.durationFrom(date1), 1e-5);
87  	    Assertions.assertEquals(datesDurations[2][0], date3.durationFrom(date4), 1e-5);
88  	    Assertions.assertEquals(datesDurations[2][1], date3.durationFrom(date1), 1e-5);
89  
90      }
91  
92  	@Test
93      public void testDurationFromCorrespondingDates() {
94  
95  		AbsoluteDate date1 = new AbsoluteDate();
96  		AbsoluteDate date2 = date1.shiftedBy(10000);
97  		AbsoluteDate date3 = date1.shiftedBy(20000);
98  		AbsoluteDate date4 = date1.shiftedBy(100000);
99          AbsoluteDate[] dates = new AbsoluteDate[] {date1, date2, date3};
100         AbsoluteDate[] datesComputeDuration = new AbsoluteDate[] {date4, date1, date2};
101 	    AbsoluteDateArrayHandling datesForVect = new AbsoluteDateArrayHandling(dates);
102 	    double[] datesDurations = datesForVect.durationFrom(datesComputeDuration);
103 	    Assertions.assertEquals(datesDurations[0], date1.durationFrom(date4), 1e-5);
104 	    Assertions.assertEquals(datesDurations[1], date2.durationFrom(date1), 1e-5);
105 	    Assertions.assertEquals(datesDurations[2], date3.durationFrom(date2), 1e-5);
106 
107     }
108 
109 	@Test
110     public void testExceptionDimensions() {
111 
112 		AbsoluteDate date1 = new AbsoluteDate();
113 		AbsoluteDate date2 = date1.shiftedBy(10000);
114 		AbsoluteDate date3 = date1.shiftedBy(20000);
115 		AbsoluteDate date4 = date1.shiftedBy(100000);
116         AbsoluteDate[] dates = new AbsoluteDate[] {date1, date2, date3};
117         AbsoluteDate[] datesComputeDuration = new AbsoluteDate[] {date4, date1};
118 	    AbsoluteDateArrayHandling datesForVect = new AbsoluteDateArrayHandling(dates);
119 	    try {
120 	    	datesForVect.durationFrom(datesComputeDuration);
121 	    	Assertions.fail("an exception should have been thrown");
122         } catch (OrekitException oe) {
123         	Assertions.assertEquals(LocalizedCoreFormats.DIMENSIONS_MISMATCH, oe.getSpecifier());
124         }
125     }
126 
127 }