1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.events;
18
19 import java.util.Collections;
20 import java.util.NoSuchElementException;
21
22 import org.hipparchus.ode.events.Action;
23 import org.junit.Assert;
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.mockito.Mockito;
27 import org.orekit.propagation.SpacecraftState;
28 import org.orekit.propagation.events.handlers.EventHandler;
29 import org.orekit.time.AbsoluteDate;
30
31
32
33
34
35
36 public class AndDetectorTest {
37
38
39 private MockDetector a;
40
41 private MockDetector b;
42
43 private SpacecraftState s;
44
45 private BooleanDetector and;
46
47
48 @Before
49 public void setUp() {
50 a = new MockDetector();
51 b = new MockDetector();
52 s = null;
53 and = BooleanDetector.andCombine(a, b);
54 }
55
56
57
58
59 @Test
60 public void testG() {
61
62 a.g = b.g = 0.0;
63 Assert.assertEquals(0.0, and.g(s), 0);
64
65
66 a.g = 1;
67 b.g = 0;
68 Assert.assertEquals(0.0, and.g(s), 0);
69 a.g = 0;
70 b.g = 1;
71 Assert.assertEquals(0.0, and.g(s), 0);
72
73
74 a.g = 0;
75 b.g = -1;
76 Assert.assertTrue("negative", and.g(s) < 0);
77 a.g = 1;
78 b.g = -1;
79 Assert.assertTrue("negative", and.g(s) < 0);
80 a.g = -1;
81 b.g = 0;
82 Assert.assertTrue("negative", and.g(s) < 0);
83 a.g = -1;
84 b.g = 1;
85 Assert.assertTrue("negative", and.g(s) < 0);
86 a.g = -1;
87 b.g = -1;
88 Assert.assertTrue("negative", and.g(s) < 0);
89
90
91 a.g = 1;
92 b.g = 1;
93 Assert.assertTrue("positive", and.g(s) > 0);
94
95 }
96
97
98
99
100 @Test
101 public void testCancellation() {
102 a.g = -1e-10;
103 b.g = 1e10;
104 Assert.assertTrue("negative", and.g(s) < 0);
105 a.g = 1e10;
106 b.g = -1e-10;
107 Assert.assertTrue("negative", and.g(s) < 0);
108 a.g = 1e10;
109 b.g = 1e-10;
110 Assert.assertTrue("positive", and.g(s) > 0);
111 a.g = 1e-10;
112 b.g = 1e10;
113 Assert.assertTrue("positive", and.g(s) > 0);
114 }
115
116
117
118
119 @Test
120 public void testInit() {
121
122 EventDetector a = Mockito.mock(EventDetector.class);
123 EventDetector b = Mockito.mock(EventDetector.class);
124 @SuppressWarnings("unchecked")
125 EventHandler<EventDetector> c = Mockito.mock(EventHandler.class);
126 BooleanDetector and = BooleanDetector.andCombine(a, b).withHandler(c);
127 AbsoluteDate t = AbsoluteDate.CCSDS_EPOCH;
128 s = Mockito.mock(SpacecraftState.class);
129 Mockito.when(s.getDate()).thenReturn(t.shiftedBy(60.0));
130
131
132 and.init(s, t);
133
134
135 Assert.assertEquals(2, and.getDetectors().size());
136 Mockito.verify(a).init(s, t);
137 Mockito.verify(b).init(s, t);
138 Mockito.verify(c).init(s, t, and);
139 }
140
141
142 @Test
143 public void testZeroDetectors() {
144
145 try {
146 BooleanDetector.andCombine(Collections.emptyList());
147 Assert.fail("Expected Exception");
148 } catch (NoSuchElementException e) {
149
150 }
151 }
152
153
154 private static class MockDetector implements EventDetector {
155
156
157 public double g = 0;
158
159 @Override
160 public void init(SpacecraftState s0, AbsoluteDate t) {
161
162 }
163
164 @Override
165 public double g(SpacecraftState s) {
166 return this.g;
167 }
168
169 @Override
170 public double getThreshold() {
171 return 0;
172 }
173
174 @Override
175 public double getMaxCheckInterval() {
176 return 0;
177 }
178
179 @Override
180 public int getMaxIterationCount() {
181 return 0;
182 }
183
184 @Override
185 public Action eventOccurred(SpacecraftState s, boolean increasing) {
186 return null;
187 }
188
189 @Override
190 public SpacecraftState resetState(SpacecraftState oldState) {
191 return null;
192 }
193 }
194 }