diff --git a/bin/nl/jssl/autounit/MethodcallExecutor.class b/bin/nl/jssl/autounit/MethodcallExecutor.class index b986e88..fa13f86 100644 Binary files a/bin/nl/jssl/autounit/MethodcallExecutor.class and b/bin/nl/jssl/autounit/MethodcallExecutor.class differ diff --git a/bin/nl/jssl/autounit/Recorder.class b/bin/nl/jssl/autounit/Recorder.class index 3d9c4e9..30d934a 100644 Binary files a/bin/nl/jssl/autounit/Recorder.class and b/bin/nl/jssl/autounit/Recorder.class differ diff --git a/bin/nl/jssl/autounit/inputs/CombinedInputSetFactory.class b/bin/nl/jssl/autounit/inputs/CombinedInputSetFactory.class index dfa38c5..06c8dcb 100644 Binary files a/bin/nl/jssl/autounit/inputs/CombinedInputSetFactory.class and b/bin/nl/jssl/autounit/inputs/CombinedInputSetFactory.class differ diff --git a/bin/nl/jssl/autounit/utils/Permutator.class b/bin/nl/jssl/autounit/utils/Permutator.class deleted file mode 100644 index 701023f..0000000 Binary files a/bin/nl/jssl/autounit/utils/Permutator.class and /dev/null differ diff --git a/nl.jssl.autounit.testclasses.BooleanArguments.xml b/nl.jssl.autounit.testclasses.BooleanArguments.xml index 0b71359..c6ed3ef 100644 --- a/nl.jssl.autounit.testclasses.BooleanArguments.xml +++ b/nl.jssl.autounit.testclasses.BooleanArguments.xml @@ -4,9 +4,9 @@ - - false - false + + false + false falsefalse diff --git a/nl.jssl.autounit.testclasses.ByteArguments.xml b/nl.jssl.autounit.testclasses.ByteArguments.xml index 8d8158b..8499087 100644 --- a/nl.jssl.autounit.testclasses.ByteArguments.xml +++ b/nl.jssl.autounit.testclasses.ByteArguments.xml @@ -4,14 +4,14 @@ - - -128 + + -128 -256 - - 0 + + 0 11 diff --git a/nl.jssl.autounit.testclasses.FloatArguments.xml b/nl.jssl.autounit.testclasses.FloatArguments.xml index 397f4cc..979b8f4 100644 --- a/nl.jssl.autounit.testclasses.FloatArguments.xml +++ b/nl.jssl.autounit.testclasses.FloatArguments.xml @@ -4,8 +4,8 @@ - - -Infinity + + -2.006128E38 -2147483648 diff --git a/nl.jssl.autounit.testclasses.IntArguments.xml b/nl.jssl.autounit.testclasses.IntArguments.xml index 3d74d3e..85818e6 100644 --- a/nl.jssl.autounit.testclasses.IntArguments.xml +++ b/nl.jssl.autounit.testclasses.IntArguments.xml @@ -1,36 +1,36 @@ - - public int randomOther(int arg1) - - - - - -2147483648 - - 0 - - - - public java.lang.String evenOrUneven(int arg1,int arg2) - - -2147483648 - -2147483648 + + -2147483648 + -2147483648 even - - -1 - -1 + + -2147483648 + -1 uneven + + public int randomOther(int arg1) + + + + + -2147483648 + + 0 + + + + \ No newline at end of file diff --git a/src/nl/jssl/autounit/MethodcallExecutor.java b/src/nl/jssl/autounit/MethodcallExecutor.java index 5613502..6af41b7 100644 --- a/src/nl/jssl/autounit/MethodcallExecutor.java +++ b/src/nl/jssl/autounit/MethodcallExecutor.java @@ -4,6 +4,7 @@ import java.lang.reflect.Method; import java.util.List; import nl.jssl.autounit.inputs.ArgumentsForSingleCall; +import nl.jssl.autounit.utils.Permuter.Tuple; /** * voert 1 methode uit met wisselende input parameters en bewaart het resultaat. @@ -22,10 +23,10 @@ public class MethodcallExecutor { this.result = new MethodCallResults(instrumentedTestTarget, m); } - public MethodCallResults execute(List inputs) { + public MethodCallResults execute(List inputs) { int missedLines = Integer.MAX_VALUE; InvocationResult lastInvocationResult = null, previous = null; - for (ArgumentsForSingleCall input : inputs) { + for (Tuple input : inputs) { previous = lastInvocationResult; lastInvocationResult = analyseMethodCall(m, input); int missedCount = lastInvocationResult.coverage.getLineCounter().getMissedCount(); @@ -46,7 +47,7 @@ public class MethodcallExecutor { return result; } - private InvocationResult analyseMethodCall(Method m, ArgumentsForSingleCall input) { + private InvocationResult analyseMethodCall(Method m, Tuple input) { return coverageAnalyser.analyse(instrumentedTestTarget, m, input.toArray()); } diff --git a/src/nl/jssl/autounit/Recorder.java b/src/nl/jssl/autounit/Recorder.java index 4159a9c..648317c 100644 --- a/src/nl/jssl/autounit/Recorder.java +++ b/src/nl/jssl/autounit/Recorder.java @@ -9,6 +9,7 @@ import java.util.Map; import nl.jssl.autounit.inputs.ArgumentsForSingleCall; import nl.jssl.autounit.inputs.CombinedInputSetFactory; +import nl.jssl.autounit.utils.Permuter.Tuple; public class Recorder { private Class testTarget; @@ -42,7 +43,7 @@ public class Recorder { } private MethodCallResults recordMethod(Method m) { - List inputSet = new CombinedInputSetFactory().getInputs(testTarget, m); + List inputSet = new CombinedInputSetFactory().getInputs(testTarget, m); MethodcallExecutor methodcallExecutor = new MethodcallExecutor(testTarget, m); methodcallExecutor.execute(inputSet); return methodcallExecutor.getResult(); diff --git a/src/nl/jssl/autounit/inputs/CombinedInputSetFactory.java b/src/nl/jssl/autounit/inputs/CombinedInputSetFactory.java index de733d4..58a7f8c 100644 --- a/src/nl/jssl/autounit/inputs/CombinedInputSetFactory.java +++ b/src/nl/jssl/autounit/inputs/CombinedInputSetFactory.java @@ -6,7 +6,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import nl.jssl.autounit.utils.Permutator; +import nl.jssl.autounit.utils.Permuter; +import nl.jssl.autounit.utils.Permuter.Tuple; public class CombinedInputSetFactory { private final Map, InputsFactory> primitivesFactories; @@ -16,60 +17,37 @@ public class CombinedInputSetFactory { populateFactories(); } - public List getInputs(Class testTarget, Method m) { + public List getInputs(Class testTarget, Method m) { return combine(getInputSetsForAllArguments(testTarget, m)); } - private List combine(List> inputSetsForAllArguments) { + private List combine(List> inputSetsForAllArguments) { int nrOfParameters = inputSetsForAllArguments.size(); if (nrOfParameters == 1) { // simple case return makeArgumentsForSingleParameterCall(inputSetsForAllArguments); } else { - List allPossibleArguments = new ArrayList<>(); - -// for (SingleTypeInputs inputs : inputSetsForAllArguments) { -// // make list of all permutations of first argument values -// List permutatedInputs = Permutator.permute(inputs); -// int index = 0; -// for (Object variable : permutatedInputs) { -// // all lists ("columns") are combined into "rows" -// if (index >= allPossibleArguments.size()) { -// ArgumentsForSingleCall a = new ArgumentsForSingleCall(); -// a.add(variable); -// allPossibleArguments.add(a); -// } else { -// ArgumentsForSingleCall argumentsForSingleCall = allPossibleArguments.get(index); -// argumentsForSingleCall.add(variable); -// } -// index++; -// } -// } - // the row view - - return allPossibleArguments; + return Permuter.permute(inputSetsForAllArguments); } - } - private List makeArgumentsForSingleParameterCall( - List> generatedInputSetsForAllArguments) { - List allPossibleArguments = new ArrayList(); + private List makeArgumentsForSingleParameterCall( + List> generatedInputSetsForAllArguments) { + List allPossibleArguments = new ArrayList(); - SingleTypeInputs generatedInputs = generatedInputSetsForAllArguments.iterator().next(); + List generatedInputs = generatedInputSetsForAllArguments.iterator().next(); for (Object variable : generatedInputs) { - ArgumentsForSingleCall argument = new ArgumentsForSingleCall(); - argument.add(variable); + Tuple argument = new Tuple(variable); allPossibleArguments.add(argument); } return allPossibleArguments; } - private List> getInputSetsForAllArguments(Class testTarget, Method m) { - List> singleInputSets = new ArrayList<>(); + private List> getInputSetsForAllArguments(Class testTarget, Method m) { + List> singleInputSets = new ArrayList<>(); for (Class parametertype : m.getParameterTypes()) { - SingleTypeInputs inputs = tryPrimitives(testTarget, parametertype); + List inputs = tryPrimitives(testTarget, parametertype); if (inputs == null) { inputs = new MocksFactory().getMockInputs(testTarget, parametertype); diff --git a/src/nl/jssl/autounit/utils/Permutator.java b/src/nl/jssl/autounit/utils/Permutator.java deleted file mode 100644 index 97c1d9a..0000000 --- a/src/nl/jssl/autounit/utils/Permutator.java +++ /dev/null @@ -1,25 +0,0 @@ -package nl.jssl.autounit.utils; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class Permutator { - public static List permute(List arr) { - List all = new ArrayList<>(); - permute(new ArrayList(arr), 0, all); - return all; - } - - private static void permute(List arr, int k, List all) { - for (int i = k; i < arr.size(); i++) { - Collections.swap(arr, i, k); - permute(arr, k + 1, all); - Collections.swap(arr, k, i); - } - if (k == arr.size() - 1) { - all.addAll(arr); - } - } - -} \ No newline at end of file diff --git a/src/nl/jssl/autounit/utils/Permuter.java b/src/nl/jssl/autounit/utils/Permuter.java index b8aed9b..9b2f137 100644 --- a/src/nl/jssl/autounit/utils/Permuter.java +++ b/src/nl/jssl/autounit/utils/Permuter.java @@ -34,10 +34,15 @@ public class Permuter { return pairs; } - public static class Tuple implements Iterable { + public static class Tuple implements Iterable { public final Object element1; public final Object element2; + public Tuple(Object element1) { + this.element1 = element1; + this.element2 = null; + } + public Tuple(Object element1, Object element2) { super(); this.element1 = element1; @@ -46,10 +51,18 @@ public class Permuter { @Override public Iterator iterator() { + return asList().iterator(); + } + + private List asList() { List list = new ArrayList<>(); - add(element1, list); - add(element2, list); - return list.iterator(); + if (element1 != null) { + add(element1, list); + } + if (element2 != null) { + add(element2, list); + } + return list; } private void add(Object element, List list) { @@ -70,5 +83,9 @@ public class Permuter { } return string; } + + public Object[] toArray() { + return asList().toArray(); + } } }