summaryrefslogtreecommitdiff
path: root/src/main/java/au/id/zancanaro
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/au/id/zancanaro')
-rw-r--r--src/main/java/au/id/zancanaro/javacheck/Generator.java4
-rw-r--r--src/main/java/au/id/zancanaro/javacheck/Generators.java8
-rw-r--r--src/main/java/au/id/zancanaro/javacheck/Iterators.java17
-rw-r--r--src/main/java/au/id/zancanaro/javacheck/RoseTree.java11
-rw-r--r--src/main/java/au/id/zancanaro/javacheck/ShrinkResult.java4
-rw-r--r--src/main/java/au/id/zancanaro/javacheck/junit/Properties.java24
-rw-r--r--src/main/java/au/id/zancanaro/javacheck/junit/PropertyError.java25
7 files changed, 44 insertions, 49 deletions
diff --git a/src/main/java/au/id/zancanaro/javacheck/Generator.java b/src/main/java/au/id/zancanaro/javacheck/Generator.java
index 076f7c2..2d2e556 100644
--- a/src/main/java/au/id/zancanaro/javacheck/Generator.java
+++ b/src/main/java/au/id/zancanaro/javacheck/Generator.java
@@ -40,8 +40,6 @@ public interface Generator<T> {
}
default <R> Generator<R> flatMap(Function<T, Generator<R>> action) {
- return (random, size) -> {
- return RoseTree.join(this.generate(random, size).map(action).map(g -> g.generate(random, size)));
- };
+ return (random, size) -> RoseTree.join(this.generate(random, size).map(action).map(g -> g.generate(random, size)));
}
}
diff --git a/src/main/java/au/id/zancanaro/javacheck/Generators.java b/src/main/java/au/id/zancanaro/javacheck/Generators.java
index 08b9989..bf1b1b3 100644
--- a/src/main/java/au/id/zancanaro/javacheck/Generators.java
+++ b/src/main/java/au/id/zancanaro/javacheck/Generators.java
@@ -15,13 +15,13 @@ public final class Generators {
return (random, size) -> makeGenerator.apply(size).generate(random, size);
}
- public static <T> Generator<T> suchThat(Generator<T> gen, Predicate<T> pred) {
+ public static <T> Generator<T> suchThat(Generator<T> gen, Predicate<T> predicate) {
return (random, size) -> {
RoseTree<T> result = gen.generate(random, size);
- if (pred.test(result.getValue())) {
- return result.filter(pred);
+ if (predicate.test(result.getValue())) {
+ return result.filter(predicate);
} else {
- return suchThat(gen, pred).generate(random, size);
+ return suchThat(gen, predicate).generate(random, size);
}
};
}
diff --git a/src/main/java/au/id/zancanaro/javacheck/Iterators.java b/src/main/java/au/id/zancanaro/javacheck/Iterators.java
index 347a927..33652b2 100644
--- a/src/main/java/au/id/zancanaro/javacheck/Iterators.java
+++ b/src/main/java/au/id/zancanaro/javacheck/Iterators.java
@@ -3,6 +3,7 @@ package au.id.zancanaro.javacheck;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.NoSuchElementException;
import java.util.function.Function;
import java.util.function.Predicate;
@@ -11,7 +12,7 @@ public final class Iterators {
}
public static <T> RangeIterator<T> rangeIterator(int countTo, Function<Integer,T> fn) {
- return new RangeIterator<T>(countTo, fn);
+ return new RangeIterator<>(countTo, fn);
}
private static class RangeIterator<T> implements Iterator<T> {
@@ -39,9 +40,9 @@ public final class Iterators {
return new FlattenIterator<>(iterators);
}
public static class FlattenIterator<T> implements Iterator<T> {
- private Iterator<T> current;
+ private final Iterator<Iterator<T>> iterators;
- private Iterator<Iterator<T>> iterators;
+ private Iterator<T> current;
public FlattenIterator(Iterator<Iterator<T>> iterators) {
this.current = Iterators.emptyIterator();
@@ -105,7 +106,7 @@ public final class Iterators {
}
@Override
public T next() {
- return null;
+ throw new NoSuchElementException("Empty iterators contain no elements");
}
}
@@ -134,8 +135,8 @@ public final class Iterators {
}
- public static <T> FilteringIterator<T> filteringIterator(Predicate<T> pred, Iterator<T> iterator) {
- return new FilteringIterator<>(pred, iterator);
+ public static <T> FilteringIterator<T> filteringIterator(Predicate<T> predicate, Iterator<T> iterator) {
+ return new FilteringIterator<>(predicate, iterator);
}
private static class FilteringIterator<T> implements Iterator<T> {
@@ -143,8 +144,8 @@ public final class Iterators {
private final Iterator<T> iterator;
private List<T> nextValue;
- public FilteringIterator(Predicate<T> pred, Iterator<T> iterator) {
- this.predicate = pred;
+ public FilteringIterator(Predicate<T> predicate, Iterator<T> iterator) {
+ this.predicate = predicate;
this.iterator = iterator;
this.nextValue = null;
}
diff --git a/src/main/java/au/id/zancanaro/javacheck/RoseTree.java b/src/main/java/au/id/zancanaro/javacheck/RoseTree.java
index 86952da..5a54d6f 100644
--- a/src/main/java/au/id/zancanaro/javacheck/RoseTree.java
+++ b/src/main/java/au/id/zancanaro/javacheck/RoseTree.java
@@ -36,8 +36,9 @@ public class RoseTree<T> {
}
private static <T> Iterator<RoseTree<T>[]> permutations(RoseTree<T>[] trees) {
- return Iterators.flatten(Iterators.rangeIterator(trees.length, index ->
- Iterators.mappingIterator(child -> {
+ return Iterators.flatten(
+ Iterators.rangeIterator(trees.length,
+ index -> Iterators.mappingIterator(child -> {
@SuppressWarnings("unchecked")
RoseTree<T>[] result = (RoseTree<T>[]) new RoseTree[trees.length];
for (int i = 0; i < trees.length; ++i) {
@@ -45,14 +46,14 @@ public class RoseTree<T> {
}
return result;
}, trees[index].getChildren())
- ));
+ ));
}
public static <T, R> RoseTree<R> zip(Function<List<T>, R> fn, RoseTree<T>[] trees) {
@SuppressWarnings("unchecked")
List<T> heads = new ArrayList(trees.length);
- for (int i = 0; i < trees.length; ++i) {
- heads.add(trees[i].getValue());
+ for (RoseTree<T> tree : trees) {
+ heads.add(tree.getValue());
}
return new RoseTree<>(
fn.apply(heads),
diff --git a/src/main/java/au/id/zancanaro/javacheck/ShrinkResult.java b/src/main/java/au/id/zancanaro/javacheck/ShrinkResult.java
index e1463f0..8776f4e 100644
--- a/src/main/java/au/id/zancanaro/javacheck/ShrinkResult.java
+++ b/src/main/java/au/id/zancanaro/javacheck/ShrinkResult.java
@@ -1,11 +1,13 @@
package au.id.zancanaro.javacheck;
+import java.util.Arrays;
+
public class ShrinkResult {
public final Object[] args;
public final Throwable thrown;
public ShrinkResult(Object[] args, Throwable thrown) {
- this.args = args;
+ this.args = Arrays.copyOf(args, args.length);
this.thrown = thrown;
}
}
diff --git a/src/main/java/au/id/zancanaro/javacheck/junit/Properties.java b/src/main/java/au/id/zancanaro/javacheck/junit/Properties.java
index 0507413..64bd9ab 100644
--- a/src/main/java/au/id/zancanaro/javacheck/junit/Properties.java
+++ b/src/main/java/au/id/zancanaro/javacheck/junit/Properties.java
@@ -16,12 +16,11 @@ import org.junit.runners.model.TestClass;
import java.lang.reflect.*;
import java.util.*;
-
public class Properties extends BlockJUnit4ClassRunner {
private final Map<Type, Generator<?>> generators = new HashMap<>();
- public Properties(Class<?> klass) throws InitializationError {
- super(klass);
+ public Properties(Class<?> classObject) throws InitializationError {
+ super(classObject);
}
@Override
@@ -43,11 +42,11 @@ public class Properties extends BlockJUnit4ClassRunner {
if (!(type instanceof ParameterizedType)) {
continue;
}
- ParameterizedType ptype = (ParameterizedType) type;
- if (!(ptype.getRawType() instanceof Class)) {
+ ParameterizedType parameterizedType = (ParameterizedType) type;
+ if (!(parameterizedType.getRawType() instanceof Class)) {
continue;
}
- Class<?> c = (Class) ptype.getRawType();
+ Class<?> c = (Class) parameterizedType.getRawType();
if (c != Generator.class) {
continue;
}
@@ -61,7 +60,7 @@ public class Properties extends BlockJUnit4ClassRunner {
error = true;
}
if (!error) {
- result.add(ptype.getActualTypeArguments()[0]);
+ result.add(parameterizedType.getActualTypeArguments()[0]);
}
}
return result;
@@ -105,16 +104,16 @@ public class Properties extends BlockJUnit4ClassRunner {
if (!(type instanceof ParameterizedType)) {
continue;
}
- ParameterizedType ptype = (ParameterizedType) type;
- if (!(ptype.getRawType() instanceof Class)) {
+ ParameterizedType parameterizedType = (ParameterizedType) type;
+ if (!(parameterizedType.getRawType() instanceof Class)) {
continue;
}
- Class<?> c = (Class) ptype.getRawType();
+ Class<?> c = (Class) parameterizedType.getRawType();
if (c != Generator.class) {
continue;
}
try {
- Type target = ptype.getActualTypeArguments()[0];
+ Type target = parameterizedType.getActualTypeArguments()[0];
@SuppressWarnings("unchecked")
Generator<Object> generator = (Generator<Object>) field.get(null);
generators.put(target, generator);
@@ -122,7 +121,7 @@ public class Properties extends BlockJUnit4ClassRunner {
generators.put(rawTypes.get(target), generator);
}
} catch (IllegalAccessException ex) {
-
+ throw new RuntimeException(ex);
}
}
}
@@ -213,7 +212,6 @@ public class Properties extends BlockJUnit4ClassRunner {
if (assumptionsViolated++ == 50) {
throw new Error("Violated 50 assumptions in a row: failing test");
}
- ;
} catch (Throwable ex) {
// tree.print(new OutputStreamWriter(System.out), Arrays::toString);
throw new PropertyError(method.getName(), seed, shrink(tree, ex));
diff --git a/src/main/java/au/id/zancanaro/javacheck/junit/PropertyError.java b/src/main/java/au/id/zancanaro/javacheck/junit/PropertyError.java
index 138c47f..2cd1325 100644
--- a/src/main/java/au/id/zancanaro/javacheck/junit/PropertyError.java
+++ b/src/main/java/au/id/zancanaro/javacheck/junit/PropertyError.java
@@ -3,35 +3,30 @@ package au.id.zancanaro.javacheck.junit;
import au.id.zancanaro.javacheck.ShrinkResult;
import java.util.Arrays;
-import java.util.Collection;
import java.util.Iterator;
public class PropertyError extends AssertionError {
public PropertyError(String methodName, long seed, ShrinkResult shrunk) {
super(shrunk.thrown.getMessage() == null ?
- String.format("%s(%s)\n\tSeed: %s",
- methodName, join(", ", shrunk.args),
+ String.format("%s(%s)%n\tSeed: %s",
+ methodName, joinArgs(shrunk.args),
seed):
- String.format("%s(%s)\n\tSeed: %s\n%s",
- methodName, join(", ", shrunk.args),
+ String.format("%s(%s)%n\tSeed: %s%n%s",
+ methodName, joinArgs(shrunk.args),
seed,
shrunk.thrown.getMessage()));
initCause(shrunk.thrown);
}
- public static String join(String delimiter, Object... params) {
- return join(delimiter, Arrays.asList(params));
- }
-
- public static String join(String delimiter, Collection<Object> values) {
+ public static String joinArgs(Object... params) {
StringBuilder sb = new StringBuilder();
- Iterator<Object> iter = values.iterator();
- while (iter.hasNext()) {
- Object next = iter.next();
+ Iterator<Object> iterator = Arrays.asList(params).iterator();
+ while (iterator.hasNext()) {
+ Object next = iterator.next();
sb.append(stringValueOf(next));
- if (iter.hasNext()) {
- sb.append(delimiter);
+ if (iterator.hasNext()) {
+ sb.append(", ");
}
}
return sb.toString();