You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2019/02/26 13:46:41 UTC
[commons-rng] 02/02: Fix test coverage of
DiscreteProbabilityCollectionSampler.
This is an automated email from the ASF dual-hosted git repository.
aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-rng.git
commit acda087dfb76cbc359c1fe74f3397aed52674562
Author: aherbert <ah...@apache.org>
AuthorDate: Tue Feb 26 13:46:07 2019 +0000
Fix test coverage of DiscreteProbabilityCollectionSampler.
---
.../DiscreteProbabilityCollectionSamplerTest.java | 56 ++++++++++++++++++++++
1 file changed, 56 insertions(+)
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/DiscreteProbabilityCollectionSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/DiscreteProbabilityCollectionSamplerTest.java
index 5fb7f77..0df63c6 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/DiscreteProbabilityCollectionSamplerTest.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/DiscreteProbabilityCollectionSamplerTest.java
@@ -18,9 +18,13 @@
package org.apache.commons.rng.sampling;
import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+
import org.junit.Assert;
import org.junit.Test;
import org.apache.commons.rng.UniformRandomProvider;
+import org.apache.commons.rng.core.source64.SplitMix64;
import org.apache.commons.rng.simple.RandomSource;
/**
@@ -60,6 +64,11 @@ public class DiscreteProbabilityCollectionSamplerTest {
Arrays.asList(new Double[] {1d, 2d}),
new double[] {0d, Double.POSITIVE_INFINITY});
}
+ @Test(expected=IllegalArgumentException.class)
+ public void testPrecondition6() {
+ new DiscreteProbabilityCollectionSampler<Double>(rng,
+ new HashMap<Double,Double>());
+ }
@Test
public void testSample() {
@@ -84,4 +93,51 @@ public class DiscreteProbabilityCollectionSamplerTest {
final double variance = sumOfSquares / n - mean * mean;
Assert.assertEquals(expectedVariance, variance, 2e-3);
}
+
+
+ /**
+ * Edge-case test:
+ * Create a sampler that will return 1 for nextDouble() forcing the binary search to
+ * identify the end item of the cumulative probability array.
+ */
+ @Test
+ public void testSampleWithProbabilityAtLastItem() {
+ final List<Double> list = Arrays.asList(new Double[] {1d, 2d});
+ UniformRandomProvider dummyRng = new SplitMix64(0L) {
+ @Override
+ public double nextDouble() {
+ return 1;
+ }
+ };
+
+ final DiscreteProbabilityCollectionSampler<Double> sampler =
+ new DiscreteProbabilityCollectionSampler<Double>(dummyRng,
+ list,
+ new double[] {0.5, 0.5});
+ final Double item = sampler.sample();
+ Assert.assertEquals(list.get(list.size() - 1), item);
+ }
+
+ /**
+ * Edge-case test:
+ * Create a sampler that will return over 1 for nextDouble() forcing the binary search to
+ * identify insertion at the end of the cumulative probability array
+ */
+ @Test
+ public void testSampleWithProbabilityPastLastItem() {
+ final List<Double> list = Arrays.asList(new Double[] {1d, 2d});
+ UniformRandomProvider dummyRng = new SplitMix64(0L) {
+ @Override
+ public double nextDouble() {
+ return 1.1;
+ }
+ };
+
+ final DiscreteProbabilityCollectionSampler<Double> sampler =
+ new DiscreteProbabilityCollectionSampler<Double>(dummyRng,
+ list,
+ new double[] {0.5, 0.5});
+ final Double item = sampler.sample();
+ Assert.assertEquals(list.get(list.size() - 1), item);
+ }
}