1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.estimation.measurements.gnss;
18
19 import org.hipparchus.util.FastMath;
20 import org.junit.jupiter.api.Assertions;
21 import org.junit.jupiter.api.Test;
22
23 public class AlternatingSamplerTest {
24
25 @Test
26 public void testCanonicalA001057() {
27 check(new AlternatingSampler(0, 7.5),
28 0, 1, -1, 2, -2, 3, -3, 4, -4, 5, -5, 6, -6, 7, -7);
29 }
30
31 @Test
32 public void testNegatedA001057() {
33 check(new AlternatingSampler(-0.1, 7.5),
34 0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5, -6, 6, -7, 7);
35 }
36
37 @Test
38 public void testJavadocExample() {
39 check(new AlternatingSampler(17.3, 5.2),
40 17, 18, 16, 19, 15, 20, 14, 21, 13, 22);
41 }
42
43 @Test
44 public void testIntegerLimitsOdd() {
45 check(new AlternatingSampler(12.0, 3.0),
46 12, 13, 11, 14, 10, 15, 9);
47 }
48
49 @Test
50 public void testIntegerLimitsEven() {
51 check(new AlternatingSampler(12.0, 4.0),
52 12, 13, 11, 14, 10, 15, 9, 16, 8);
53 }
54
55 @Test
56 public void testNoIntegerInRange() {
57 Assertions.assertFalse(new AlternatingSampler(12.4, 0.25).inRange());
58 }
59
60 @Test
61 public void testLimits() {
62 for (double a = -5.5; a <= 5.5; a += 0.125) {
63 for (double r = 0.0; r <= 3.5; r += 0.125) {
64 final AlternatingSampler sampler = new AlternatingSampler(a, r);
65
66 while (sampler.inRange()) {
67 Assertions.assertTrue(sampler.getCurrent() >= a - r);
68 Assertions.assertTrue(sampler.getCurrent() <= a + r);
69 sampler.generateNext();
70 };
71
72
73
74 Assertions.assertFalse(sampler.inRange());
75 sampler.generateNext();
76 Assertions.assertFalse(sampler.inRange());
77 sampler.generateNext();
78 Assertions.assertFalse(sampler.inRange());
79 sampler.generateNext();
80 Assertions.assertFalse(sampler.inRange());
81
82 }
83 }
84 }
85
86 @Test
87 public void testNoMiss() {
88 for (double a = -5.5; a <= 5.5; a += 0.125) {
89 for (double r = 0.0; r <= 3.5; r += 0.125) {
90 final int min = (int) FastMath.ceil(a - r);
91 final int max = (int) FastMath.floor(a + r);
92 final boolean[] seen = new boolean[max - min + 1];
93 final AlternatingSampler sampler = new AlternatingSampler(a, r);
94
95 while (sampler.inRange()) {
96 final int k = (int) (sampler.getCurrent() - min);
97 Assertions.assertFalse(seen[k]);
98 seen[k] = true;
99 Assertions.assertTrue(sampler.getCurrent() >= a - r);
100 Assertions.assertTrue(sampler.getCurrent() <= a + r);
101 sampler.generateNext();
102 };
103
104
105
106 Assertions.assertFalse(sampler.inRange());
107 sampler.generateNext();
108 Assertions.assertFalse(sampler.inRange());
109 sampler.generateNext();
110 Assertions.assertFalse(sampler.inRange());
111 sampler.generateNext();
112 Assertions.assertFalse(sampler.inRange());
113
114
115
116 for (final boolean s : seen) {
117 Assertions.assertTrue(s);
118 }
119
120 }
121 }
122 }
123
124 private void check(final AlternatingSampler sampler, final int... expected) {
125
126 for (int i = 0; i < expected.length; ++i) {
127 Assertions.assertTrue(sampler.inRange());
128 Assertions.assertEquals(expected[i], sampler.getCurrent());
129 sampler.generateNext();
130 }
131
132
133
134 Assertions.assertFalse(sampler.inRange());
135 sampler.generateNext();
136 Assertions.assertFalse(sampler.inRange());
137 sampler.generateNext();
138 Assertions.assertFalse(sampler.inRange());
139 sampler.generateNext();
140 Assertions.assertFalse(sampler.inRange());
141
142 }
143
144 }
145