From e92315c29221235a13fad873cb9cc9f9b342fc80 Mon Sep 17 00:00:00 2001 From: shautvast Date: Mon, 30 Jun 2014 22:34:02 +0200 Subject: [PATCH] added correct permuter --- bin/nl/jssl/autounit/ManualTest.class | Bin 756 -> 0 bytes bin/nl/jssl/autounit/PrimtiveTypeTests.class | Bin 3719 -> 3728 bytes .../inputs/CombinedInputSetFactory.class | Bin 5469 -> 4886 bytes .../inputs/IntegerInputsFactory.class | Bin 1397 -> 1206 bytes .../autounit/testclasses/IntArguments.class | Bin 649 -> 674 bytes ...sl.autounit.testclasses.FloatArguments.xml | 2 +- nl.jssl.autounit.testclasses.IntArguments.xml | 42 +++++----- .../inputs/CombinedInputSetFactory.java | 35 ++++----- .../autounit/inputs/IntegerInputsFactory.java | 8 +- src/nl/jssl/autounit/utils/Permuter.java | 72 ++++++++++++++++++ .../autounit/testclasses/IntArguments.java | 4 +- tst/nl/jssl/autounit/ManualTest.java | 19 ----- tst/nl/jssl/autounit/PrimtiveTypeTests.java | 2 +- tst/nl/jssl/autounit/util/PermuterTests.java | 31 ++++++++ 14 files changed, 150 insertions(+), 65 deletions(-) delete mode 100644 bin/nl/jssl/autounit/ManualTest.class create mode 100644 src/nl/jssl/autounit/utils/Permuter.java delete mode 100644 tst/nl/jssl/autounit/ManualTest.java create mode 100644 tst/nl/jssl/autounit/util/PermuterTests.java diff --git a/bin/nl/jssl/autounit/ManualTest.class b/bin/nl/jssl/autounit/ManualTest.class deleted file mode 100644 index 6dcf979b02543cd14bfdf875d055bf1842b971dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 756 zcmaix&u$Yj5XQerlk9d`$R?$QQVNtmBH@4!9D_g+DpI9|O0-1k(FrCvY`ntumgnL^ z5lB1$4}};v5jmuS%gl~F{>``Z{rdg=Cx9n-5TQocF@=~qR|r}8vNGC>SJG6nI9AR_ zs1vfOJe8u5W+DzpQ#JO4=2Oj$&j@SX-jGm#QNB|N*07$UfhM7qYolIQvyrmLa#Scn zCojjc7)q-{y*RA<584rS^M6R_6JpO&_D_`|Y`>|D*E2QLPBUjX{NWgJB{&o3#-lUDU-+Yj zgk!h{VqD^w&Ko#i=8ABIZ)<2Rx-!lI^!ywQv^(t|*f=@EX5%ZizTw6an(#9)GGo*d b-2Mx`^B?fu0^Gb9oH4k4A^0ATt>OM3lwhGe diff --git a/bin/nl/jssl/autounit/PrimtiveTypeTests.class b/bin/nl/jssl/autounit/PrimtiveTypeTests.class index bf336c037282fd4632990b1e016c6d3f6abc35c6..c9498b46db324e1096a471d42968e621fdd28c3e 100644 GIT binary patch delta 28 jcmZpdogllRftk^KawD@Yr%q;Gi9%vgy3yu!%s06Jfu9Lf delta 18 ZcmbOr+b+AIftgWnawD_u=IzWkxd1xT21oz^ diff --git a/bin/nl/jssl/autounit/inputs/CombinedInputSetFactory.class b/bin/nl/jssl/autounit/inputs/CombinedInputSetFactory.class index 3ea4ca2f6f36617e27e03d0e480d0dae6a8c81b1..dfa38c5912a95327834f5d5885b963a83718e5df 100644 GIT binary patch delta 1745 zcmZux?Nd}`6#qTDckkVodkGd6_W}kY@36B56X6yw0-~$1P>_g~u;99^ATP_VrM+wx zrKZ`-qf|tshLM%2)ZpMw4l~W@OkeO*-}=y>(1*S>6`gwt7KdhM@7(8{-#O>^JLlZz z*OG~X-bf(qj|_)p?80t7F60P%7>X#rlP?N( z(Th3>Ej-Cop)^CWq8V*6p2joWXUY}YY-r?DCY8@gmE0-1c#oJPoBiQn^k`rx!my41 zCaQc|RGEw3T>N(_BKG2tgg!oC-fRruFh6T{i~TY}IKmgreZn9^o?g4wlB5i11qU!J zV}#rXEah7m#L&=4G%_Y3%J7J;V$eSnbT3OqS{8cUf+lPp?N5Y|@poH&MiM1;ZcK!R1Qpl{Bf&l_8UKXEB%80pc(yM@U zdZxofPbVa(kdX;HHdFV?v5BlDDx(%O4R7F*o zM{8%9DlVX%7o|KJ+YU1o-GpisQ|fZm5|uhM(76TmI`JAR2ehscZ^eF{xS75Ujjn-E zRp`P2B3DdApTqMcwHzsU0S75o6O%(eEysRnVpbxnwMeTT+O6s0ODXA2FZH7l$R%Gk zHPApu(6fjCoubD4T^{LfrD&`qbyce5FqM0Rl2TQ;jiAS@n(xCN#{elkO160nX|{Wi zU8;2Oh@+!9HFGyRgADhfm^| zBG~jg*yIM&96pcZ3c+R;;9IMDY0b7~x*EqU!LB8;&Ee|}Hv2bmTqoEKf^p_Zbsa<+ rx>1N8`ZWAB{$Bd^A&Nsdg8*F|hj9Zz{Dgk|f)L-~a7bFy4Y>6$cC}#q delta 2331 zcmZuxTXR!Y7+pI_bCQ#!w50`3xs{#w*&SS(Pm&D>=MlZi+)*q8|S zn2C6g7fY~Iz!3}YP6!lM%2Llnr-tPMm1LVDTikiebgV#whLr-Pv1o8xZ*MecCKK^w zERwLudV_7@p6+B~m~R!z1+*QOC9I)QV6L2Rn>#_rYWUQn$%|&RNVl_WQj<#bK`$P{ zS^;}km?;!hHmV%#9@NU9(~t`tkLb=wY)3NDD^MkmJLXJVB#<}EZzjT<8%KOOk=W+& zZh6{SmLp7od4wABy3?>tGUY$cB6-AdNCapM_ys05WjoOn=}pvD)sfVm)X;m><-76U0hxl9c)UWUbjfcPV{Q%kptRvdjd&$O$$1o@?tmk zNT;jQ@wC8Qs)tjX#FOlkh7$sQODx@0ksDyRdQ&@6ZVb3V+ z*8;g&;^li1q&+9Ed*;qO3!jGbx23;49*>62n1*ju%8G2AchX%K6xpC6OW&5|+C)zz z)}1su?XB5D^nHk3N2qFS#90_T{O1C#h{!9+f%K!X7qC< zTNq)Ow`+`d>lkk;LgH6CV30%Z>C6tO0p@bZxvv(R!!=Ywht<=&g|H_?_ zs$oAuYz)boSN0j3oJ=w)-CqHBz-AcFWZZT{_#Ex{9tz!>|n^#6~2^D7JC-{u3 zyCELsIXA!8WpEGGy|AVFB6i4MCm3bBLN3GgGYT@;OUE;QRrj;Xb`{=$;ZoIm@@AB- zWEBl0Ud1dMDaJLdyNNNI`PP7Tw8=Gj{>l3+t(8!)&r{3}V#}23WM7_<+Q*9QWKh02 zW4^8ARRyhuV~CA&S*qBtVW$#{pkxjxxs=0wt3$(n%cY8@*LUY*HdfC)KGKOs8(y;3 z#0eUdmZw!+Kz?-^FRR3aeKuNi z@jBj+@8=uSRaK)FIWi^}#7$6=eezoVwA7m!yvH8DpT-AvtXJU+-Wq2b#3vbiM%d@K zz>beI4dP@5rwRM=7Fho{(;&Xe;4EPSX{5%Yo*A=^nFcesK-k4B+aSIjXDj$FgG+>c zKMWhN6sGpu0&X>M)P)rHY_63>Tr4e?z&CM^b>a{O?*D-Miy!$>q$~>ls!vFflL#O|jg~AQHKq zLCjZ2NPGu_#5M-Ga2+NXgBiwPfiZ-XV5|*5&CCouKvIr@9Z0ej1z)PSy02a1aUX`q{cavE?s UO`sSPgBDPni9s7^0f^QC0HC`oTmS$7 delta 494 zcmYLGOD_Xa6#nj9oih4X#H->_?bJ|jN+N`fqzwroEE>0ul$Lr;Y*|>_%rCIAv0zgT ziCEiPSc#oKU`d^}Chp>#?|kPwk9%*S?n_Z#ejc6xjAHsud1c%390ld0pcU;_v@tlc z;#7q9L_QOa34O@)D7x+u@TmrAAQa#c5at>|HJ|5q*L^>ikEY=a+t zhD8dfK^s(rs8pm<42{9)zjis1O(*pkb&H?V62^)Ym)R}@TQY7W-C^*x(WzvTyWOm=AT!k56#p6 z$7!w~6G3>k&2a33oGno{p7>+91+xGfpSq|*Wo}MPGsQ1 z5!}Q8q3Z6GaZ*ILzyJops6&qGhagc8KZdD4r#}Lkh^eZ^Dk`-s8z*vtXa&+Y>{fVL OD>0MANSK1B;v>Jkj9l^n diff --git a/bin/nl/jssl/autounit/testclasses/IntArguments.class b/bin/nl/jssl/autounit/testclasses/IntArguments.class index ab7bc5aff51cfd0f36faefb49b098197c5ebc7f5..d3b23ca05f7c7f10775ecf50a45e8c6edcf3a6c1 100644 GIT binary patch delta 199 zcmeBVUBoJI>ff$?3=9m$49e^bOpFYg6BlYuv|P+Arr|m9o+Sr+UTJPpYLU@oQATwc zX$Dz#1{p>MzO2NuME#t^ymWov#F7ji1~~@#$q|fQeDMrS49q~o1f*pWSaT-7VU+Rb zVqjz7W#C}o1_~=cBpG;sA|N2ZAi^NZzzAlE0a;88;y^Yt10yd`P=Y}cNU{S3Y=II? aK$>$0gVbbSCS867ur5XhMW7%PgAxEkj~tW$ delta 175 zcmZ3)+Q}+#>ff$?3=9m$3`*<_OpFYg6BlYuv|P+2sxk4tv2^m>C#3flP4*2_VT16tIPw!?}Y&a&j7zF26ijEhB>hP?Cv3 F5dd8r7)JmA diff --git a/nl.jssl.autounit.testclasses.FloatArguments.xml b/nl.jssl.autounit.testclasses.FloatArguments.xml index 7cd0e0b..397f4cc 100644 --- a/nl.jssl.autounit.testclasses.FloatArguments.xml +++ b/nl.jssl.autounit.testclasses.FloatArguments.xml @@ -5,7 +5,7 @@ - -7.5912475E37 + -Infinity -2147483648 diff --git a/nl.jssl.autounit.testclasses.IntArguments.xml b/nl.jssl.autounit.testclasses.IntArguments.xml index 35f1a54..3d74d3e 100644 --- a/nl.jssl.autounit.testclasses.IntArguments.xml +++ b/nl.jssl.autounit.testclasses.IntArguments.xml @@ -1,34 +1,36 @@ - - public java.lang.String evenOrUneven(int arg1) - - - - - -819817314 - - even - - - - -916902647 - - uneven - - - - public int randomOther(int arg1) - -1762850486 + -2147483648 0 + + public java.lang.String evenOrUneven(int arg1,int arg2) + + + + + -2147483648 + -2147483648 + + even + + + + -1 + -1 + + uneven + + + + \ No newline at end of file diff --git a/src/nl/jssl/autounit/inputs/CombinedInputSetFactory.java b/src/nl/jssl/autounit/inputs/CombinedInputSetFactory.java index b007ccf..de733d4 100644 --- a/src/nl/jssl/autounit/inputs/CombinedInputSetFactory.java +++ b/src/nl/jssl/autounit/inputs/CombinedInputSetFactory.java @@ -28,24 +28,25 @@ public class CombinedInputSetFactory { } 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++; - } - } +// 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; } diff --git a/src/nl/jssl/autounit/inputs/IntegerInputsFactory.java b/src/nl/jssl/autounit/inputs/IntegerInputsFactory.java index 9b282bd..2014b1d 100644 --- a/src/nl/jssl/autounit/inputs/IntegerInputsFactory.java +++ b/src/nl/jssl/autounit/inputs/IntegerInputsFactory.java @@ -4,15 +4,13 @@ public class IntegerInputsFactory implements InputsFactory { public SingleTypeInputs getInputs(Class testTarget) { SingleTypeInputs inputs = new SingleTypeInputs(); - for (int i = 0; i < 1000; i++) { - inputs.add((int) ((2 * Math.random() - 2) * Integer.MAX_VALUE)); - } +// for (int i = 0; i < 2; i++) { +// inputs.add((int) ((2 * Math.random() - 2) * Integer.MAX_VALUE)); +// } inputs.add(Integer.MIN_VALUE); - inputs.add(-2); inputs.add(-1); inputs.add(0); inputs.add(1); - inputs.add(2); inputs.add(Integer.MAX_VALUE); return inputs; } diff --git a/src/nl/jssl/autounit/utils/Permuter.java b/src/nl/jssl/autounit/utils/Permuter.java new file mode 100644 index 0000000..03c65dc --- /dev/null +++ b/src/nl/jssl/autounit/utils/Permuter.java @@ -0,0 +1,72 @@ +package nl.jssl.autounit.utils; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class Permuter { + + public static List permute(List> elements) { + if (elements.size() > 2) { + return permute(elements.get(0), elements.subList(1, elements.size() - 1)); + } else if (elements.size() == 2) { + return permutePairs(elements.get(0), elements.get(1)); + } else + throw new IllegalArgumentException("need at least 2"); + } + + private static List permute(List list, List> elements) { + if (elements.size() > 2) { + return permute(elements.get(0), elements.subList(1, elements.size() - 1)); + } else { + return permutePairs(elements.get(0), elements.get(1)); + } + } + + private static List permutePairs(List list1, List list2) { + List pairs = new ArrayList<>(); + for (Object element1 : list1) { + for (Object element2 : list2) { + pairs.add(new Tuple(element1, element2)); + } + } + return pairs; + } + + public static class Tuple implements Iterable { + public final Object element1; + public final Object element2; + + public Tuple(Object element1, Object element2) { + super(); + this.element1 = element1; + this.element2 = element2; + } + + @Override + public Iterator iterator() { + List list = new ArrayList<>(); + add(element1, list); + add(element2, list); + return list.iterator(); + } + + private void add(Object element, List list) { + if (!(element instanceof Tuple)) { + list.add(element); + } else { + Tuple pair = (Tuple) element; + add(pair.element1, list); + add(pair.element2, list); + } + } + @Override + public String toString() { + String string=""; + for (Object o:this){ + string+=o.toString()+","; + } + return string; + } + } +} diff --git a/testclasses/nl/jssl/autounit/testclasses/IntArguments.java b/testclasses/nl/jssl/autounit/testclasses/IntArguments.java index 7d27a35..522f65a 100644 --- a/testclasses/nl/jssl/autounit/testclasses/IntArguments.java +++ b/testclasses/nl/jssl/autounit/testclasses/IntArguments.java @@ -1,8 +1,8 @@ package nl.jssl.autounit.testclasses; public class IntArguments { - public String evenOrUneven(int number) { - if (number % 2 == 0) + public String evenOrUneven(int number, int number2) { + if ((number+number2)/2 % 2 == 0) return "even"; else return "uneven"; diff --git a/tst/nl/jssl/autounit/ManualTest.java b/tst/nl/jssl/autounit/ManualTest.java deleted file mode 100644 index 69c396b..0000000 --- a/tst/nl/jssl/autounit/ManualTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package nl.jssl.autounit; -import junit.framework.Assert; - -import nl.jssl.autounit.testclasses.IntArguments; - -import org.junit.Test; - -public class ManualTest { - @Test - public void testEven() { - Assert.assertEquals("even", new IntArguments().evenOrUneven(2)); - } - - @Test - public void testUneven() { - Assert.assertEquals("uneven", new IntArguments().evenOrUneven(3)); - } - -} diff --git a/tst/nl/jssl/autounit/PrimtiveTypeTests.java b/tst/nl/jssl/autounit/PrimtiveTypeTests.java index e0e89d0..acfb9bb 100644 --- a/tst/nl/jssl/autounit/PrimtiveTypeTests.java +++ b/tst/nl/jssl/autounit/PrimtiveTypeTests.java @@ -27,7 +27,7 @@ public class PrimtiveTypeTests { public void testIntegerArgument() { Map results = new AutoTester().record(IntArguments.class); Set keys = results.keySet(); - assertTrue(keys.contains("public java.lang.String evenOrUneven(int arg1)")); + assertTrue(keys.contains("public java.lang.String evenOrUneven(int arg1,int arg2)")); MethodCallResults mcr = results.values().iterator().next(); System.out.println(mcr.getCoverageResult().getLineCounter().getMissedCount() + " missed lines"); System.out.println(mcr.getReport()); diff --git a/tst/nl/jssl/autounit/util/PermuterTests.java b/tst/nl/jssl/autounit/util/PermuterTests.java new file mode 100644 index 0000000..2b68f43 --- /dev/null +++ b/tst/nl/jssl/autounit/util/PermuterTests.java @@ -0,0 +1,31 @@ +package nl.jssl.autounit.util; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.List; + +import nl.jssl.autounit.utils.Permuter; +import nl.jssl.autounit.utils.Permuter.Tuple; + +import org.junit.Test; + +public class PermuterTests { + @Test + public void test(){ + List integers=new ArrayList<>(); + integers.add(1); + integers.add(2); + List strings=new ArrayList<>(); + strings.add("A"); + strings.add("B"); + List> outer=new ArrayList<>(); + outer.add(integers); + outer.add(strings); + List permuted = Permuter.permute(outer); + assertEquals("1,A,",permuted.get(0).toString()); + assertEquals("1,B,",permuted.get(1).toString()); + assertEquals("2,A,",permuted.get(2).toString()); + assertEquals("2,B,",permuted.get(3).toString()); + } +}