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 <aherb...@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);
+    }
 }

Reply via email to