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.estimation.measurements;
18  
19  import org.hipparchus.geometry.euclidean.threed.Vector3D;
20  import org.junit.jupiter.api.Assertions;
21  import org.junit.jupiter.api.Test;
22  import org.mockito.Mockito;
23  import org.orekit.propagation.SpacecraftState;
24  import org.orekit.time.AbsoluteDate;
25  import org.orekit.utils.TimeStampedPVCoordinates;
26  
27  import java.util.ArrayList;
28  import java.util.List;
29  
30  class AbstractMeasurementTest {
31  
32      @Test
33      void testTheoreticalEvaluationWithoutDerivatives() {
34          // GIVEN
35          final ObservableSatellite satellite = new ObservableSatellite(0);
36          final List<ObservableSatellite> satellites = new ArrayList<>();
37          satellites.add(satellite);
38          final double mass = 1.;
39          final TestMeasurementModel measurement = new TestMeasurementModel(AbsoluteDate.ARBITRARY_EPOCH, mass,
40                  satellites);
41          final int iteration = 2;
42          final int evaluation = 1;
43          final SpacecraftState mockedState = Mockito.mock(SpacecraftState.class);
44          Mockito.when(mockedState.getDate()).thenReturn(measurement.getDate());
45          Mockito.when(mockedState.getMass()).thenReturn(mass);
46          Mockito.when(mockedState.getPosition()).thenReturn(Vector3D.ZERO);
47          // WHEN
48          final EstimatedMeasurementBase<TestMeasurementModel> measurementBase = measurement.theoreticalEvaluationWithoutDerivatives(iteration, evaluation, new SpacecraftState[] {mockedState});
49          // THEN
50          final EstimatedMeasurement<TestMeasurementModel> estimatedMeasurement = measurement.theoreticalEvaluation(iteration, evaluation, new SpacecraftState[] {mockedState});
51          Assertions.assertArrayEquals(estimatedMeasurement.getObservedValue(), measurementBase.getObservedValue());
52          Assertions.assertArrayEquals(estimatedMeasurement.getEstimatedValue(), measurementBase.getEstimatedValue());
53          Assertions.assertEquals(estimatedMeasurement.getStatus(), measurementBase.getStatus());
54          Assertions.assertEquals(estimatedMeasurement.getDate(), measurementBase.getDate());
55          Assertions.assertEquals(estimatedMeasurement.getIteration(), measurementBase.getIteration());
56          Assertions.assertEquals(estimatedMeasurement.getStates()[0].getPosition(),
57                  measurementBase.getStates()[0].getPosition());
58      }
59  
60      private static class TestMeasurementModel extends AbstractMeasurement<TestMeasurementModel> {
61  
62          TestMeasurementModel(AbsoluteDate date, double observed, List<ObservableSatellite> satellites) {
63              super(date, observed, 1., 1., satellites);
64          }
65  
66          @Override
67          protected EstimatedMeasurement<TestMeasurementModel> theoreticalEvaluation(int iteration, int evaluation, SpacecraftState[] states) {
68              final ObservableSatellite satellite = new ObservableSatellite(0);
69              final List<ObservableSatellite> satellites = new ArrayList<>();
70              satellites.add(satellite);
71              final TestMeasurementModel testMeasurement = new TestMeasurementModel(states[0].getDate(), states[0].getMass(),
72                      satellites);
73              final EstimatedMeasurement<TestMeasurementModel> measurement = new EstimatedMeasurement<>(testMeasurement,
74                      iteration, evaluation, states, new TimeStampedPVCoordinates[] {states[0].getPVCoordinates()});
75              measurement.setEstimatedValue(testMeasurement.getObservedValue());
76              return measurement;
77          }
78      }
79  }