diff options
Diffstat (limited to 'Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org')
2 files changed, 118 insertions, 7 deletions
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/test/smoke/fast/SmokeTest5DiffCursor.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/test/smoke/fast/SmokeTest5DiffCursor.java index d25b6303..94324e96 100644 --- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/test/smoke/fast/SmokeTest5DiffCursor.java +++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/test/smoke/fast/SmokeTest5DiffCursor.java | |||
@@ -1,5 +1,108 @@ | |||
1 | package org.eclipse.viatra.solver.data.map.test.smoke.fast; | 1 | package org.eclipse.viatra.solver.data.map.test.smoke.fast; |
2 | 2 | ||
3 | public class SmokeTest5DiffCursor { | 3 | import static org.junit.Assert.fail; |
4 | |||
5 | import java.util.Random; | ||
6 | import java.util.stream.Stream; | ||
4 | 7 | ||
8 | import org.eclipse.viatra.solver.data.map.ContinousHashProvider; | ||
9 | import org.eclipse.viatra.solver.data.map.DiffCursor; | ||
10 | import org.eclipse.viatra.solver.data.map.VersionedMapStore; | ||
11 | import org.eclipse.viatra.solver.data.map.VersionedMapStoreImpl; | ||
12 | import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl; | ||
13 | import org.eclipse.viatra.solver.data.map.test.smoke.TestPermuter; | ||
14 | import org.eclipse.viatra.solver.data.map.test.support.MapTestEnvironment; | ||
15 | import org.junit.jupiter.params.ParameterizedTest; | ||
16 | import org.junit.jupiter.params.provider.Arguments; | ||
17 | import org.junit.jupiter.params.provider.MethodSource; | ||
18 | |||
19 | public class SmokeTest5DiffCursor { | ||
20 | public void runSmokeTest(String scenario, int seed, int steps, int maxKey, int maxValue, int commitFrequency, boolean evilHash) { | ||
21 | String[] values = MapTestEnvironment.prepareValues(maxValue); | ||
22 | ContinousHashProvider<Integer> chp = MapTestEnvironment.prepareHashProvider(evilHash); | ||
23 | |||
24 | VersionedMapStore<Integer, String> store = new VersionedMapStoreImpl<Integer, String>(chp, values[0]); | ||
25 | iterativeRandomPutsAndCommitsThenDiffcursor(scenario,store, steps, maxKey, values, seed, commitFrequency); | ||
26 | } | ||
27 | |||
28 | void iterativeRandomPutsAndCommitsThenDiffcursor( | ||
29 | String scenario, | ||
30 | VersionedMapStore<Integer, String> store, | ||
31 | int steps, | ||
32 | int maxKey, | ||
33 | String[] values, | ||
34 | int seed, | ||
35 | int commitFrequency) | ||
36 | { | ||
37 | // 1. build a map with versions | ||
38 | Random r = new Random(seed); | ||
39 | VersionedMapImpl<Integer, String> versioned = (VersionedMapImpl<Integer, String>) store.createMap(); | ||
40 | int largestCommit=-1; | ||
41 | |||
42 | for(int i=0; i<steps; i++) { | ||
43 | int index = i+1; | ||
44 | int nextKey = r.nextInt(maxKey); | ||
45 | String nextValue = values[r.nextInt(values.length)]; | ||
46 | try { | ||
47 | versioned.put(nextKey, nextValue); | ||
48 | } catch (Exception exception) { | ||
49 | exception.printStackTrace(); | ||
50 | fail(scenario+":"+index+": exception happened: "+exception); | ||
51 | } | ||
52 | if(index%commitFrequency == 0) { | ||
53 | long version = versioned.commit(); | ||
54 | largestCommit=(int) version; | ||
55 | } | ||
56 | if(index%10000==0) System.out.println(scenario+":"+index+"/"+steps+" building finished"); | ||
57 | } | ||
58 | // 2. create a non-versioned map, | ||
59 | VersionedMapImpl<Integer, String> moving = (VersionedMapImpl<Integer, String>) store.createMap(); | ||
60 | Random r2 = new Random(seed+1); | ||
61 | |||
62 | final int diffTravelFrequency = commitFrequency*2; | ||
63 | for(int i=0; i<steps; i++) { | ||
64 | int index = i+1; | ||
65 | if(index%diffTravelFrequency == 0) { | ||
66 | // difftravel | ||
67 | long travelToVersion = r2.nextInt(largestCommit+1); | ||
68 | DiffCursor<Integer, String> diffCursor = moving.getDiffCursor(travelToVersion); | ||
69 | moving.putAll(diffCursor); | ||
70 | |||
71 | } else { | ||
72 | // random puts | ||
73 | int nextKey = r2.nextInt(maxKey); | ||
74 | String nextValue = values[r2.nextInt(values.length)]; | ||
75 | try { | ||
76 | moving.put(nextKey, nextValue); | ||
77 | } catch (Exception exception) { | ||
78 | exception.printStackTrace(); | ||
79 | fail(scenario+":"+index+": exception happened: "+exception); | ||
80 | } | ||
81 | if(index%commitFrequency == 0) { | ||
82 | versioned.commit(); | ||
83 | } | ||
84 | if(index%10000==0) System.out.println(scenario+":"+index+"/"+steps+" building finished"); | ||
85 | } | ||
86 | } | ||
87 | |||
88 | |||
89 | |||
90 | } | ||
91 | |||
92 | @ParameterizedTest(name = "Mutable-Immutable Compare Smoke {index}/{0} Steps={1} Keys={2} Values={3} commit frequency={4} seed={5} evil-hash={6}") | ||
93 | @MethodSource | ||
94 | void parametrizedSmoke(int tests, int steps, int noKeys, int noValues, int commitFrequency, int seed, boolean evilHash) { | ||
95 | runSmokeTest("SmokeMutableImmutableCompareS"+steps+"K"+noKeys+"V"+noValues+"s"+seed,seed,steps,noKeys,noValues,commitFrequency,evilHash); | ||
96 | } | ||
97 | |||
98 | public static Stream<Arguments> parametrizedSmoke(){ | ||
99 | return TestPermuter.permutationWithSize( | ||
100 | new Object[] {1000}, | ||
101 | new Object[] {3,32, 32*32}, | ||
102 | new Object[] {2,3}, | ||
103 | new Object[] {1,10,100}, | ||
104 | new Object[] {1,2,3}, | ||
105 | new Object[] {false,true} | ||
106 | ); | ||
107 | } | ||
5 | } | 108 | } |
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/test/support/MapTestEnvironment.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/test/support/MapTestEnvironment.java index 1ff29d68..8c86eb4d 100644 --- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/test/support/MapTestEnvironment.java +++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/test/support/MapTestEnvironment.java | |||
@@ -114,12 +114,11 @@ public class MapTestEnvironment<KEY,VALUE> { | |||
114 | // Tests iterators | 114 | // Tests iterators |
115 | // TODO: Counts the number of elements in the entryset | 115 | // TODO: Counts the number of elements in the entryset |
116 | int elementsInSutEntrySet = 0; | 116 | int elementsInSutEntrySet = 0; |
117 | Iterator<Entry<KEY, VALUE>> iterator = sut.getIterator(); | 117 | Cursor<KEY, VALUE> cursor = sut.getCursor(); |
118 | while(iterator.hasNext()) { | 118 | while(cursor.move()) { |
119 | elementsInSutEntrySet++; | 119 | elementsInSutEntrySet++; |
120 | Entry<KEY, VALUE> entry = iterator.next(); | 120 | KEY key = cursor.getKey(); |
121 | KEY key = entry.getKey(); | 121 | VALUE sutValue = cursor.getValue(); |
122 | VALUE sutValue = entry.getValue(); | ||
123 | //System.out.println(key + " -> " + sutValue); | 122 | //System.out.println(key + " -> " + sutValue); |
124 | VALUE oracleValue = oracle.get(key); | 123 | VALUE oracleValue = oracle.get(key); |
125 | if(sutValue != oracleValue) { | 124 | if(sutValue != oracleValue) { |
@@ -142,7 +141,7 @@ public class MapTestEnvironment<KEY,VALUE> { | |||
142 | } | 141 | } |
143 | public void printComparison() { | 142 | public void printComparison() { |
144 | System.out.println("SUT:"); | 143 | System.out.println("SUT:"); |
145 | printEntrySet(sut.getIterator()); | 144 | printEntrySet(sut.getCursor()); |
146 | System.out.println("Oracle:"); | 145 | System.out.println("Oracle:"); |
147 | printEntrySet(oracle.entrySet().iterator()); | 146 | printEntrySet(oracle.entrySet().iterator()); |
148 | } | 147 | } |
@@ -156,4 +155,13 @@ public class MapTestEnvironment<KEY,VALUE> { | |||
156 | System.out.println("\t" + e.getKey() + " -> " + e.getValue()); | 155 | System.out.println("\t" + e.getKey() + " -> " + e.getValue()); |
157 | } | 156 | } |
158 | } | 157 | } |
158 | private void printEntrySet(Cursor<KEY, VALUE> cursor) { | ||
159 | TreeMap<KEY, VALUE> treemap= new TreeMap<>(); | ||
160 | while(cursor.move()) { | ||
161 | treemap.put(cursor.getKey(),cursor.getValue()); | ||
162 | } | ||
163 | for(Entry<KEY, VALUE> e : treemap.entrySet()) { | ||
164 | System.out.println("\t" + e.getKey() + " -> " + e.getValue()); | ||
165 | } | ||
166 | } | ||
159 | } | 167 | } |