aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra')
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/test/smoke/fast/SmokeTest5DiffCursor.java105
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/test/support/MapTestEnvironment.java20
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 @@
1package org.eclipse.viatra.solver.data.map.test.smoke.fast; 1package org.eclipse.viatra.solver.data.map.test.smoke.fast;
2 2
3public class SmokeTest5DiffCursor { 3import static org.junit.Assert.fail;
4
5import java.util.Random;
6import java.util.stream.Stream;
4 7
8import org.eclipse.viatra.solver.data.map.ContinousHashProvider;
9import org.eclipse.viatra.solver.data.map.DiffCursor;
10import org.eclipse.viatra.solver.data.map.VersionedMapStore;
11import org.eclipse.viatra.solver.data.map.VersionedMapStoreImpl;
12import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl;
13import org.eclipse.viatra.solver.data.map.test.smoke.TestPermuter;
14import org.eclipse.viatra.solver.data.map.test.support.MapTestEnvironment;
15import org.junit.jupiter.params.ParameterizedTest;
16import org.junit.jupiter.params.provider.Arguments;
17import org.junit.jupiter.params.provider.MethodSource;
18
19public 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}