Skip to content

Commit

Permalink
(v2.5.1) Don't err when sampling/shuffling empty collections
Browse files Browse the repository at this point in the history
Actually sampling will not throw only when number of elements to return
is 0. In all other cases it will still throw.
  • Loading branch information
ctapobep committed Aug 11, 2019
1 parent 2e790d4 commit 51007a6
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 10 deletions.
2 changes: 1 addition & 1 deletion datagen/pom.xml
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>qala-datagen-parent</artifactId>
<groupId>io.qala.datagen</groupId>
<version>2.5.0</version>
<version>2.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
10 changes: 8 additions & 2 deletions datagen/src/main/java/io/qala/datagen/RandomElements.java
Expand Up @@ -13,8 +13,6 @@ private RandomElements(T[] elements) {
}

private RandomElements(Collection<T> elements) {
if(elements == null || elements.isEmpty())
throw new IllegalArgumentException("Can't sample from zero elements: " + elements);
this.elements = new ArrayList<T>(elements);
}

Expand Down Expand Up @@ -42,6 +40,7 @@ private RandomElements(Collection<T> elements) {
* @return a random element from the collection
*/
public T sample() {
assertCollectionIsNotEmpty();
int index = integer(size() - 1);
return this.elements.get(index);
}
Expand Down Expand Up @@ -79,6 +78,8 @@ public List<T> sample(int nToReturn) {
* @return collection of random elements picked from the initial collection
*/
public List<T> sampleWithReplacement(int nToReturn) {
if(nToReturn > 0)
assertCollectionIsNotEmpty();
List<T> result = new ArrayList<T>(nToReturn);
for(int i = 0; i < nToReturn; i++) {
int index = integer(size() - 1);
Expand All @@ -101,4 +102,9 @@ public List<T> shuffled() {
private int size() {
return elements.size();
}

private void assertCollectionIsNotEmpty() {
if(elements.isEmpty())
throw new IllegalArgumentException("Can't sample from zero elements: " + elements);
}
}
14 changes: 11 additions & 3 deletions datagen/src/test/java/io/qala/datagen/RandomElementsTest.java
Expand Up @@ -9,7 +9,8 @@

import static io.qala.datagen.RandomElements.from;
import static io.qala.datagen.RandomShortApi.*;
import static io.qala.datagen.RandomValue.*;
import static io.qala.datagen.RandomValue.between;
import static io.qala.datagen.RandomValue.length;
import static java.util.Collections.emptyList;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
Expand Down Expand Up @@ -49,14 +50,18 @@ class RandomElementsTest {
assertThat(from("element1", "element2").sample(2), containsInAnyOrder("element1", "element2"));
assertThat(sampleMultiple(2, "element1", "element2"), containsInAnyOrder("element1", "element2"));
}
@Test void sampleMultiple_returnsEmptyList_ifSampling0elements() {
assertEquals(0, sampleMultiple(0).size());
assertEquals(0, from().sampleWithReplacement(0).size());
}

@Test void mustThrowIfSampleIsLargerThanPopulation() {
assertThrows(IllegalArgumentException.class, () -> from("el", "el2").sample(3));
assertThrows(IllegalArgumentException.class, () -> sampleMultiple(3, "el", "el2"));
}
@Test void throwsIfCollectionToSampleFromIsEmpty() {
assertThrows(IllegalArgumentException.class, () -> from().sample(3));
assertThrows(IllegalArgumentException.class, () -> sampleMultiple(0));
assertThrows(IllegalArgumentException.class, () -> from().sampleWithReplacement(1));
assertThrows(IllegalArgumentException.class, RandomShortApi::sample);
}
@Test void canSampleMultipleElementsFromList() {
Expand All @@ -67,7 +72,6 @@ class RandomElementsTest {
assertThat(population, hasItems(sample.toArray(new String[0])));
}
@Test void samplesDuplicateElements_ifSampleSizeLargerThanPopulation_andSamplingIsWithReplacement() {
System.out.println(from("A", "B", "C").shuffled());
List<String> population = between(0, 10).alphanumerics(2);
List<String> sample = from(population).sampleWithReplacement(5);

Expand Down Expand Up @@ -100,6 +104,10 @@ class RandomElementsTest {
assertTrue(original.containsAll(shuffled));
assertTrue(shuffled.containsAll(original));
}
@Test void shufflingEmptyCollection_returnsEmptyCollection() {
assertEquals(0, shuffled(emptyList()).size());
assertEquals(0, shuffled().size());
}

@Test void nullOrObj_returnsNull_sometimes() {
for(int i = 0; i < 100; i++) if (nullOr("str") == null) return;
Expand Down
2 changes: 1 addition & 1 deletion examples/pom.xml
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>qala-datagen-parent</artifactId>
<groupId>io.qala.datagen</groupId>
<version>2.5.0</version>
<version>2.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
2 changes: 1 addition & 1 deletion java8types/pom.xml
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>qala-datagen-parent</artifactId>
<groupId>io.qala.datagen</groupId>
<version>2.5.0</version>
<version>2.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
2 changes: 1 addition & 1 deletion junit5/pom.xml
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>qala-datagen-parent</artifactId>
<groupId>io.qala.datagen</groupId>
<version>2.5.0</version>
<version>2.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -7,7 +7,7 @@
<groupId>io.qala.datagen</groupId>
<artifactId>qala-datagen-parent</artifactId>
<packaging>pom</packaging>
<version>2.5.0</version>
<version>2.5.1</version>

<licenses>
<license>
Expand Down

0 comments on commit 51007a6

Please sign in to comment.