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.propagation.events;
18  
19  import org.hipparchus.util.Binary64;
20  import org.hipparchus.util.Binary64Field;
21  import org.junit.jupiter.api.Test;
22  import org.mockito.Mockito;
23  import org.orekit.propagation.FieldSpacecraftState;
24  import org.orekit.propagation.events.handlers.FieldContinueOnEvent;
25  import org.orekit.propagation.events.handlers.FieldEventHandler;
26  import org.orekit.time.FieldAbsoluteDate;
27  
28  import static org.junit.jupiter.api.Assertions.*;
29  
30  class FieldBooleanDetectorTest {
31  
32      @Test
33      @SuppressWarnings("unchecked")
34      void testInit() {
35          final TestDetector detector = new TestDetector();
36          final FieldBooleanDetector<Binary64> booleanDetector = FieldBooleanDetector.orCombine(detector);
37          final FieldAbsoluteDate<Binary64> date = FieldAbsoluteDate.getArbitraryEpoch(Binary64Field.getInstance());
38          final FieldSpacecraftState<Binary64> mockedState = Mockito.mock(FieldSpacecraftState.class);
39          Mockito.when(mockedState.getDate()).thenReturn(date);
40          // WHEN
41          booleanDetector.init(mockedState, date);
42          // THEN
43          assertTrue(detector.initialized);
44          assertFalse(detector.finished);
45          assertFalse(detector.resetted);
46      }
47  
48      @Test
49      @SuppressWarnings("unchecked")
50      void testReset() {
51          final TestDetector detector = new TestDetector();
52          final FieldBooleanDetector<Binary64> booleanDetector = FieldBooleanDetector.orCombine(detector);
53          final FieldAbsoluteDate<Binary64> date = FieldAbsoluteDate.getArbitraryEpoch(Binary64Field.getInstance());
54          final FieldSpacecraftState<Binary64> mockedState = Mockito.mock(FieldSpacecraftState.class);
55          Mockito.when(mockedState.getDate()).thenReturn(date);
56          // WHEN
57          booleanDetector.reset(mockedState, date);
58          // THEN
59          assertTrue(detector.resetted);
60          assertFalse(detector.finished);
61          assertFalse(detector.initialized);
62      }
63  
64      @Test
65      @SuppressWarnings("unchecked")
66      void testFinish() {
67          final TestDetector detector = new TestDetector();
68          final FieldBooleanDetector<Binary64> booleanDetector = FieldBooleanDetector.orCombine(detector);
69          final FieldAbsoluteDate<Binary64> date = FieldAbsoluteDate.getArbitraryEpoch(Binary64Field.getInstance());
70          final FieldSpacecraftState<Binary64> mockedState = Mockito.mock(FieldSpacecraftState.class);
71          Mockito.when(mockedState.getDate()).thenReturn(date);
72          // WHEN
73          booleanDetector.finish(mockedState);
74          // THEN
75          assertTrue(detector.finished);
76          assertFalse(detector.initialized);
77          assertFalse(detector.resetted);
78      }
79  
80      private static class TestDetector implements FieldEventDetector<Binary64> {
81          boolean initialized = false;
82          boolean resetted = false;
83          boolean finished = false;
84  
85          @Override
86          public void init(FieldSpacecraftState<Binary64> s0, FieldAbsoluteDate<Binary64> t) {
87              FieldEventDetector.super.init(s0, t);
88              initialized = true;
89          }
90  
91          @Override
92          public void reset(FieldSpacecraftState<Binary64> state, FieldAbsoluteDate<Binary64> target) {
93              FieldEventDetector.super.reset(state, target);
94              resetted = true;
95          }
96  
97          @Override
98          public void finish(FieldSpacecraftState<Binary64> state) {
99              FieldEventDetector.super.finish(state);
100             finished = true;
101         }
102 
103         @Override
104         public Binary64 g(FieldSpacecraftState<Binary64> s) {
105             return Binary64.ONE;
106         }
107 
108         @Override
109         public FieldEventHandler<Binary64> getHandler() {
110             return new FieldContinueOnEvent<>();
111         }
112 
113         @Override
114         public FieldEventDetectionSettings<Binary64> getDetectionSettings() {
115             return new FieldEventDetectionSettings<>(Binary64Field.getInstance(),
116                     EventDetectionSettings.getDefaultEventDetectionSettings());
117         }
118     }
119 }