diff options
author | Oszkar Semerath <Oszkar Semerath@DESKTOP-DNR7JQ7> | 2021-07-05 23:08:04 +0200 |
---|---|---|
committer | Oszkar Semerath <Oszkar Semerath@DESKTOP-DNR7JQ7> | 2021-07-05 23:08:04 +0200 |
commit | 51b544612ff088f6b772eaf2ca9fdd43f56450ec (patch) | |
tree | 13428b79589240f567a1a2a10d74894ea973825d /Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests | |
parent | First version of Cursor, Iterator and getSize() (diff) | |
download | VIATRA-Generator-51b544612ff088f6b772eaf2ca9fdd43f56450ec.tar.gz VIATRA-Generator-51b544612ff088f6b772eaf2ca9fdd43f56450ec.tar.zst VIATRA-Generator-51b544612ff088f6b772eaf2ca9fdd43f56450ec.zip |
iterator fix
Diffstat (limited to 'Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests')
-rw-r--r-- | Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapSmokeTest.java | 125 | ||||
-rw-r--r-- | Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java | 76 | ||||
-rw-r--r-- | Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapUnitTests.java (renamed from Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTests.java) | 2 |
3 files changed, 150 insertions, 53 deletions
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapSmokeTest.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapSmokeTest.java index e1a7a39b..35940256 100644 --- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapSmokeTest.java +++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapSmokeTest.java | |||
@@ -1,16 +1,36 @@ | |||
1 | package org.eclipse.viatra.solver.data.map; | 1 | package org.eclipse.viatra.solver.data.map; |
2 | 2 | ||
3 | import static org.junit.Assert.fail; | ||
4 | |||
3 | import java.util.Random; | 5 | import java.util.Random; |
4 | 6 | ||
5 | import org.junit.jupiter.api.Test; | 7 | import org.junit.jupiter.api.Test; |
6 | 8 | ||
7 | public class MapSmokeTest { | 9 | public class MapSmokeTest { |
8 | 10 | ||
9 | private void runTest(int seed, int steps, int maxKey, int maxValue) { | 11 | private void runSmokeTest(String scenario, int seed, int steps, int maxKey, int maxValue) { |
12 | String[] values = prepareValues(maxValue); | ||
13 | ContinousHashProvider<Integer> chp = prepareHashProvider(); | ||
14 | |||
15 | VersionedMap<Integer, String> sut = new VersionedMap<Integer, String>(chp, values[0]); | ||
16 | MapTestEnvironment<Integer, String> e = new MapTestEnvironment<Integer, String>(sut); | ||
17 | |||
18 | Random r = new Random(seed); | ||
19 | |||
20 | iterativeRandomPuts(scenario, steps, maxKey, values, e, r); | ||
21 | } | ||
22 | |||
23 | |||
24 | |||
25 | private String[] prepareValues(int maxValue) { | ||
10 | String[] values = new String[maxValue]; | 26 | String[] values = new String[maxValue]; |
11 | for(int i = 0; i<values.length; i++) { | 27 | values[0] = "DEFAULT"; |
12 | values[i] = "VALUE-"+i; | 28 | for(int i = 1; i<values.length; i++) { |
29 | values[i] = "VAL"+i; | ||
13 | } | 30 | } |
31 | return values; | ||
32 | } | ||
33 | private ContinousHashProvider<Integer> prepareHashProvider() { | ||
14 | ContinousHashProvider<Integer> chp = new ContinousHashProvider<Integer>() { | 34 | ContinousHashProvider<Integer> chp = new ContinousHashProvider<Integer>() { |
15 | 35 | ||
16 | @Override | 36 | @Override |
@@ -27,56 +47,87 @@ public class MapSmokeTest { | |||
27 | return key1.equals(key2); | 47 | return key1.equals(key2); |
28 | } | 48 | } |
29 | }; | 49 | }; |
30 | 50 | return chp; | |
31 | VersionedMap<Integer, String> sut = new VersionedMap<Integer, String>(chp, values[0]); | ||
32 | MapTestEnvironment<Integer, String> e = new MapTestEnvironment<Integer, String>(sut); | ||
33 | |||
34 | Random r = new Random(seed); | ||
35 | |||
36 | iterativeCall(steps, maxKey, maxValue, values, e, r); | ||
37 | } | 51 | } |
38 | 52 | ||
39 | void recursiveCall( | 53 | // void recursiveCall( |
40 | int steps, | 54 | // int steps, |
41 | int maxKey, | 55 | // int maxKey, |
42 | int maxValue, | 56 | // int maxValue, |
43 | String[] values, | 57 | // String[] values, |
44 | MapTestEnvironment<Integer, String> e, | 58 | // MapTestEnvironment<Integer, String> e, |
45 | Random r) | 59 | // Random r) |
46 | { | 60 | // { |
47 | if(steps<=0) { | 61 | // if(steps<=0) { |
48 | return; | 62 | // return; |
49 | } else { | 63 | // } else { |
50 | e.put(r.nextInt(maxKey), values[r.nextInt(maxValue)]); | 64 | // e.put(r.nextInt(maxKey), values[r.nextInt(maxValue)]); |
51 | e.checkEquivalence(); | 65 | // e.checkEquivalence(); |
52 | 66 | // | |
53 | recursiveCall(steps-1, maxKey, maxValue, values, e, r); | 67 | // recursiveCall(steps-1, maxKey, maxValue, values, e, r); |
54 | } | 68 | // } |
55 | } | 69 | // } |
56 | 70 | ||
57 | void iterativeCall(int steps, | 71 | void iterativeRandomPuts( |
72 | String scenario, | ||
73 | int steps, | ||
58 | int maxKey, | 74 | int maxKey, |
59 | int maxValue, | ||
60 | String[] values, | 75 | String[] values, |
61 | MapTestEnvironment<Integer, String> e, | 76 | MapTestEnvironment<Integer, String> e, |
62 | Random r) | 77 | Random r) |
63 | { | 78 | { |
79 | int stopAt = -1; | ||
64 | for(int i=0; i<steps; i++) { | 80 | for(int i=0; i<steps; i++) { |
65 | e.put(r.nextInt(maxKey), values[r.nextInt(maxValue)]); | 81 | int index = i+1; |
66 | e.checkEquivalence(); | 82 | int nextKey = r.nextInt(maxKey); |
83 | String nextValue = values[r.nextInt(values.length)]; | ||
84 | if(index == stopAt) { | ||
85 | System.out.println("issue!"); | ||
86 | System.out.println("State before:"); | ||
87 | e.printComparison(); | ||
88 | e.sut.prettyPrint(); | ||
89 | System.out.println("Next: put("+nextKey+","+nextValue+")"); | ||
90 | } | ||
91 | try { | ||
92 | e.put(nextKey, nextValue); | ||
93 | if(index == stopAt) { | ||
94 | e.sut.prettyPrint(); | ||
95 | } | ||
96 | e.checkEquivalence(scenario+":"+index); | ||
97 | } catch (Exception exception) { | ||
98 | exception.printStackTrace(); | ||
99 | fail(scenario+":"+index+": exception happened: "+exception); | ||
100 | } | ||
101 | if(index%10000==0) System.out.println(scenario+":"+index+" finished"); | ||
67 | } | 102 | } |
68 | } | 103 | } |
69 | 104 | ||
70 | @Test | 105 | @Test |
71 | void runTest1() { | 106 | void MiniSmokeK3V2v1() { |
72 | runTest(0, 100000, 3, 2); | 107 | runSmokeTest("MiniSmokeK3V2v1",0, 1000, 3, 2); |
108 | } | ||
109 | @Test | ||
110 | void MiniSmokeK3V2v2() { | ||
111 | runSmokeTest("MiniSmokeK3V2v2",1, 1000, 3, 2); | ||
112 | } | ||
113 | @Test | ||
114 | void MiniSmokeK3V2v3() { | ||
115 | runSmokeTest("MiniSmokeK3V2v3",3, 1000, 3, 2); | ||
116 | } | ||
117 | @Test | ||
118 | void MediumSmokeK3V2v1() { | ||
119 | runSmokeTest("MediumSmokeK3V2v1",1, 1000, 32, 2); | ||
120 | } | ||
121 | @Test | ||
122 | void MediumSmokeK3V2v2() { | ||
123 | runSmokeTest("MediumSmokeK3V2v2",2, 1000, 32, 2); | ||
73 | } | 124 | } |
74 | @Test | 125 | @Test |
75 | void runTest2() { | 126 | void MediumSmokeK3V2v3() { |
76 | runTest(1, 100000, 3, 2); | 127 | runSmokeTest("MediumSmokeK3V2v3",3, 1000, 32, 2); |
77 | } | 128 | } |
78 | @Test | 129 | @Test |
79 | void runTest3() { | 130 | void SmokeLarge() { |
80 | runTest(1, 32*32*32*32, 32*32-1, 2); | 131 | runSmokeTest("SmokeLarge",0, 32*32*32*32, 32*32-1, 2); |
81 | } | 132 | } |
82 | } | 133 | } |
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java index 5e9b2e5f..04ae6bd0 100644 --- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java +++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java | |||
@@ -1,13 +1,13 @@ | |||
1 | package org.eclipse.viatra.solver.data.map; | 1 | package org.eclipse.viatra.solver.data.map; |
2 | 2 | ||
3 | import static org.junit.Assert.fail; | 3 | import static org.junit.Assert.fail; |
4 | import static org.junit.jupiter.api.Assertions.assertEquals; | ||
5 | 4 | ||
6 | import java.util.HashMap; | 5 | import java.util.HashMap; |
6 | import java.util.Iterator; | ||
7 | import java.util.Map; | 7 | import java.util.Map; |
8 | import java.util.TreeMap; | ||
8 | import java.util.Map.Entry; | 9 | import java.util.Map.Entry; |
9 | 10 | import java.util.TreeSet; | |
10 | import junit.framework.AssertionFailedError; | ||
11 | 11 | ||
12 | public class MapTestEnvironment<KEY,VALUE> { | 12 | public class MapTestEnvironment<KEY,VALUE> { |
13 | VersionedMap<KEY, VALUE> sut; | 13 | VersionedMap<KEY, VALUE> sut; |
@@ -19,23 +19,69 @@ public class MapTestEnvironment<KEY,VALUE> { | |||
19 | 19 | ||
20 | public void put(KEY key, VALUE value) { | 20 | public void put(KEY key, VALUE value) { |
21 | sut.put(key, value); | 21 | sut.put(key, value); |
22 | oracle.put(key, value); | 22 | if(value != sut.defaultValue) { |
23 | oracle.put(key, value); | ||
24 | } else { | ||
25 | oracle.remove(key); | ||
26 | } | ||
23 | } | 27 | } |
24 | 28 | ||
25 | public void checkEquivalence() { | 29 | public void checkEquivalence(String title) { |
26 | int nonDefault = 0; | 30 | // 1. Checking: if Reference contains <key,value> pair, then SUT contains <key,value> pair. |
31 | // Tests get functions | ||
27 | for(Entry<KEY, VALUE> entry : oracle.entrySet()) { | 32 | for(Entry<KEY, VALUE> entry : oracle.entrySet()) { |
28 | VALUE sutAnswer = sut.get(entry.getKey()); | 33 | VALUE sutValue = sut.get(entry.getKey()); |
29 | VALUE oracleAnswer1 = entry.getValue(); | 34 | VALUE oracleValue = entry.getValue(); |
30 | VALUE oracleAnswer2 = (oracleAnswer1 == null)?sut.getDefaultValue():oracleAnswer1; | 35 | if(sutValue!=oracleValue) { |
31 | if(sutAnswer!=oracleAnswer2) { | 36 | printComparison(); |
32 | fail("Non-equivalent gets: " + sutAnswer + " != " + oracleAnswer2 + "<-[oracle]") ; | 37 | fail(title + ": Non-equivalent get("+entry.getKey()+") results: SUT=" + sutValue + ", Oracle=" + oracleValue + "!") ; |
33 | } | 38 | } |
34 | if(entry.getValue() != sut.getDefaultValue()) { | 39 | } |
35 | nonDefault++; | 40 | |
41 | // 2. Checking: if SUT contains <key,value> pair, then Reference contains <key,value> pair. | ||
42 | // Tests iterators | ||
43 | // TODO: Counts the number of elements in the entryset | ||
44 | int elementsInSutEntrySet = 0; | ||
45 | Iterator<Entry<KEY, VALUE>> iterator = sut.getIterator(); | ||
46 | while(iterator.hasNext()) { | ||
47 | elementsInSutEntrySet++; | ||
48 | Entry<KEY, VALUE> entry = iterator.next(); | ||
49 | KEY key = entry.getKey(); | ||
50 | VALUE sutValue = entry.getValue(); | ||
51 | //System.out.println(key + " -> " + sutValue); | ||
52 | VALUE oracleValue = oracle.get(key); | ||
53 | if(sutValue != oracleValue) { | ||
54 | printComparison(); | ||
55 | fail(title+": Non-equivalent entry in iterator: SUT=<"+key+","+sutValue+">, Oracle=<"+key+","+oracleValue+">!"); | ||
36 | } | 56 | } |
57 | |||
58 | } | ||
59 | |||
60 | // 3. Checking sizes | ||
61 | // Counting of non-default value pairs. | ||
62 | int oracleSize = oracle.entrySet().size(); | ||
63 | int sutSize = sut.getSize(); | ||
64 | if(oracleSize != sutSize || oracleSize != elementsInSutEntrySet) { | ||
65 | printComparison(); | ||
66 | fail(title + ": Non-eqivalent size() result: SUT.getSize()="+sutSize+", SUT.entryset.size="+elementsInSutEntrySet+", Oracle="+oracleSize+"!" ); | ||
67 | } | ||
68 | |||
69 | //assertEquals(sutNonDefault, sizeOfNondefaults); | ||
70 | } | ||
71 | public void printComparison() { | ||
72 | System.out.println("SUT:"); | ||
73 | printEntrySet(sut.getIterator()); | ||
74 | System.out.println("Oracle:"); | ||
75 | printEntrySet(oracle.entrySet().iterator()); | ||
76 | } | ||
77 | private void printEntrySet(Iterator<Entry<KEY, VALUE>> iterator) { | ||
78 | TreeMap<KEY, VALUE> treemap= new TreeMap<>(); | ||
79 | while(iterator.hasNext()) { | ||
80 | Entry<KEY, VALUE> entry = iterator.next(); | ||
81 | treemap.put(entry.getKey(),entry.getValue()); | ||
82 | } | ||
83 | for(Entry<KEY, VALUE> e : treemap.entrySet()) { | ||
84 | System.out.println("\t" + e.getKey() + " -> " + e.getValue()); | ||
37 | } | 85 | } |
38 | int sutNonDefault = sut.getSize(); | ||
39 | assertEquals(sutNonDefault, nonDefault); | ||
40 | } | 86 | } |
41 | } | 87 | } |
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTests.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapUnitTests.java index 28a49380..f4137375 100644 --- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTests.java +++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapUnitTests.java | |||
@@ -1,5 +1,5 @@ | |||
1 | package org.eclipse.viatra.solver.data.map; | 1 | package org.eclipse.viatra.solver.data.map; |
2 | 2 | ||
3 | public class MapTests { | 3 | public class MapUnitTests { |
4 | 4 | ||
5 | } | 5 | } |