aboutsummaryrefslogtreecommitdiffstats
path: root/model-data/src/test/java/org
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <semerath@mit.bme.hu>2021-08-01 22:00:08 +0200
committerLibravatar OszkarSemerath <semerath@mit.bme.hu>2021-08-01 22:00:08 +0200
commitde4fb07e3a4ff333c72904759462055e9c90e01f (patch)
treebb7af092d77ef6bb784790a604617658909e0bee /model-data/src/test/java/org
parentHashprovide + Node update to make better equals/hashcodes services (diff)
downloadrefinery-de4fb07e3a4ff333c72904759462055e9c90e01f.tar.gz
refinery-de4fb07e3a4ff333c72904759462055e9c90e01f.tar.zst
refinery-de4fb07e3a4ff333c72904759462055e9c90e01f.zip
ContentEquals test + typo fix
Diffstat (limited to 'model-data/src/test/java/org')
-rw-r--r--model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/ContentEqualsSmokeTest.java143
-rw-r--r--model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/utils/SmokeTestUtilsTest.java (renamed from model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/utils/SmoteTestUtilsTest.java)2
-rw-r--r--model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/utils/MapTestEnvironment.java16
3 files changed, 160 insertions, 1 deletions
diff --git a/model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/ContentEqualsSmokeTest.java b/model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/ContentEqualsSmokeTest.java
new file mode 100644
index 00000000..a8202b97
--- /dev/null
+++ b/model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/ContentEqualsSmokeTest.java
@@ -0,0 +1,143 @@
1package org.eclipse.viatra.solver.data.map.tests.smoke;
2
3import static org.junit.jupiter.api.Assertions.assertEquals;
4import static org.junit.jupiter.api.Assertions.assertTrue;
5import static org.junit.jupiter.api.Assertions.fail;
6
7import java.util.AbstractMap.SimpleEntry;
8import java.util.Collections;
9import java.util.LinkedList;
10import java.util.List;
11import java.util.Random;
12import java.util.stream.Stream;
13
14import org.eclipse.viatra.solver.data.map.ContinousHashProvider;
15import org.eclipse.viatra.solver.data.map.Cursor;
16import org.eclipse.viatra.solver.data.map.VersionedMap;
17import org.eclipse.viatra.solver.data.map.VersionedMapStore;
18import org.eclipse.viatra.solver.data.map.VersionedMapStoreImpl;
19import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl;
20import org.eclipse.viatra.solver.data.map.tests.smoke.utils.SmokeTestUtils;
21import org.eclipse.viatra.solver.data.map.tests.utils.MapTestEnvironment;
22import org.junit.jupiter.api.Tag;
23import org.junit.jupiter.api.Timeout;
24import org.junit.jupiter.params.ParameterizedTest;
25import org.junit.jupiter.params.provider.Arguments;
26import org.junit.jupiter.params.provider.MethodSource;
27
28class ContentEqualsSmokeTest {
29 private void runSmokeTest(String scenario, int seed, int steps, int maxKey, int maxValue, int commitFrequency,
30 boolean evilHash) {
31 String[] values = MapTestEnvironment.prepareValues(maxValue);
32 ContinousHashProvider<Integer> chp = MapTestEnvironment.prepareHashProvider(evilHash);
33
34 Random r = new Random(seed);
35
36 iterativeRandomPutsAndCommitsThenCompare(scenario, chp, steps, maxKey, values, r, commitFrequency);
37 }
38
39 private void iterativeRandomPutsAndCommitsThenCompare(String scenario, ContinousHashProvider<Integer> chp, int steps, int maxKey, String[] values, Random r, int commitFrequency) {
40
41 VersionedMapStore<Integer, String> store1 = new VersionedMapStoreImpl<Integer, String>(chp, values[0]);
42 VersionedMap<Integer, String> sut1 = store1.createMap();
43
44 // Fill one map
45 for (int i = 0; i < steps; i++) {
46 int index1 = i + 1;
47 int nextKey = r.nextInt(maxKey);
48 String nextValue = values[r.nextInt(values.length)];
49 try {
50 sut1.put(nextKey, nextValue);
51 } catch (Exception exception) {
52 exception.printStackTrace();
53 fail(scenario + ":" + index1 + ": exception happened: " + exception);
54 }
55 MapTestEnvironment.printStatus(scenario, index1, steps, "Fill");
56 if (index1 % commitFrequency == 0) {
57 sut1.commit();
58 }
59 }
60
61 // Get the content of the first map
62 List<SimpleEntry<Integer, String>> content = new LinkedList<>();
63 Cursor<Integer, String> cursor = sut1.getCursor();
64 while (cursor.move()) {
65 content.add(new SimpleEntry<>(cursor.getKey(), cursor.getValue()));
66 }
67
68 // Randomize the order of the content
69 Collections.shuffle(content, r);
70
71 VersionedMapStore<Integer, String> store2 = new VersionedMapStoreImpl<Integer, String>(chp, values[0]);
72 VersionedMap<Integer, String> sut2 = store2.createMap();
73 int index2 = 1;
74 for (SimpleEntry<Integer, String> entry : content) {
75 sut2.put(entry.getKey(), entry.getValue());
76 if(index2++%commitFrequency == 0)
77 sut2.commit();
78 }
79
80 // Check the integrity of the maps
81 ((VersionedMapImpl<Integer,String>) sut1).checkIntegrity();
82 ((VersionedMapImpl<Integer,String>) sut2).checkIntegrity();
83
84// // Compare the two maps
85 // By size
86 assertEquals(sut1.getSize(), content.size());
87 assertEquals(sut2.getSize(), content.size());
88
89
90
91 // By cursors
92 Cursor<Integer, String> cursor1 = sut1.getCursor();
93 Cursor<Integer, String> cursor2 = sut2.getCursor();
94 int index3 = 1;
95 boolean canMove = true;
96 do{
97 boolean canMove1 = cursor1.move();
98 boolean canMove2 = cursor2.move();
99 assertEquals(canMove1, canMove2, scenario + ":" + index3 +" Cursors stopped at different times!");
100 assertEquals(cursor1.getKey(), cursor2.getKey(), scenario + ":" + index3 +" Cursors have different keys!");
101 assertEquals(cursor1.getValue(), cursor2.getValue(), scenario + ":" + index3 +" Cursors have different values!");
102
103 canMove = canMove1;
104 MapTestEnvironment.printStatus(scenario, index3++, content.size(), "Compare");
105 } while (canMove);
106
107 // By hashcode
108 assertEquals(sut1.hashCode(), sut2.hashCode(), "Hash codes are not equal!");
109
110 // By equals
111 assertEquals(sut1, sut2, "Maps are not equals");
112 }
113
114 @ParameterizedTest(name = "Compare Smoke {index}/{0} Steps={1} Keys={2} Values={3} commit frequency={4} seed={5} evil-hash={6}")
115 @MethodSource
116 @Timeout(value = 10)
117 @Tag("smoke")
118 void parametrizedFastSmoke(int tests, int steps, int noKeys, int noValues, int commitFrequency, int seed,
119 boolean evilHash) {
120 runSmokeTest("SmokeCommitS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues,
121 commitFrequency, evilHash);
122 }
123
124 static Stream<Arguments> parametrizedFastSmoke() {
125 return SmokeTestUtils.permutationWithSize(new Object[] { 1000 }, new Object[] { 3, 32, 32 * 32 },
126 new Object[] { 2, 3 }, new Object[] { 1, 10, 100 }, new Object[] { 1, 2, 3 },
127 new Object[] { false, true });
128 }
129
130 @ParameterizedTest(name = "Immutable Smoke {index}/{0} Steps={1} Keys={2} Values={3} commit frequency={4} seed={5} evil-hash={6}")
131 @MethodSource
132 @Tag("smoke")
133 @Tag("slow")
134 void parametrizedSlowSmoke(int tests, int steps, int noKeys, int noValues, int commitFrequency, int seed,
135 boolean evilHash) {
136 runSmokeTest("SmokeCommitS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues,
137 commitFrequency, evilHash);
138 }
139
140 static Stream<Arguments> parametrizedSlowSmoke() {
141 return SmokeTestUtils.changeStepCount(parametrizedFastSmoke(), 1);
142 }
143}
diff --git a/model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/utils/SmoteTestUtilsTest.java b/model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/utils/SmokeTestUtilsTest.java
index 376b3e50..80a53a20 100644
--- a/model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/utils/SmoteTestUtilsTest.java
+++ b/model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/utils/SmokeTestUtilsTest.java
@@ -6,7 +6,7 @@ import java.util.List;
6 6
7import org.junit.jupiter.api.Test; 7import org.junit.jupiter.api.Test;
8 8
9class SmoteTestUtilsTest { 9class SmokeTestUtilsTest {
10 @Test 10 @Test
11 void permutationInternalTest() { 11 void permutationInternalTest() {
12 List<List<Object>> res = SmokeTestUtils.permutationInternal(0, new Object[] { 1, 2, 3 }, 12 List<List<Object>> res = SmokeTestUtils.permutationInternal(0, new Object[] { 1, 2, 3 },
diff --git a/model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/utils/MapTestEnvironment.java b/model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/utils/MapTestEnvironment.java
index 6a0e2ab1..8b1760e1 100644
--- a/model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/utils/MapTestEnvironment.java
+++ b/model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/utils/MapTestEnvironment.java
@@ -1,6 +1,7 @@
1package org.eclipse.viatra.solver.data.map.tests.utils; 1package org.eclipse.viatra.solver.data.map.tests.utils;
2 2
3import static org.junit.jupiter.api.Assertions.assertEquals; 3import static org.junit.jupiter.api.Assertions.assertEquals;
4import static org.junit.jupiter.api.Assertions.assertTrue;
4import static org.junit.jupiter.api.Assertions.fail; 5import static org.junit.jupiter.api.Assertions.fail;
5 6
6import java.util.HashMap; 7import java.util.HashMap;
@@ -11,6 +12,7 @@ import java.util.TreeMap;
11 12
12import org.eclipse.viatra.solver.data.map.ContinousHashProvider; 13import org.eclipse.viatra.solver.data.map.ContinousHashProvider;
13import org.eclipse.viatra.solver.data.map.Cursor; 14import org.eclipse.viatra.solver.data.map.Cursor;
15import org.eclipse.viatra.solver.data.map.VersionedMap;
14import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl; 16import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl;
15 17
16public class MapTestEnvironment<KEY, VALUE> { 18public class MapTestEnvironment<KEY, VALUE> {
@@ -143,6 +145,20 @@ public class MapTestEnvironment<KEY, VALUE> {
143 } 145 }
144 } 146 }
145 147
148 public static <K,V> void checkOrder(String scenario, VersionedMap<K,V> versionedMap) {
149 K previous = null;
150 Cursor<K, V> cursor = versionedMap.getCursor();
151 while(cursor.move()) {
152 System.out.println(cursor.getKey() + " " + ((VersionedMapImpl<K, V>) versionedMap).getHashProvider().getHash(cursor.getKey(), 0));
153 if(previous != null) {
154 int comparisonResult = ((VersionedMapImpl<K, V>) versionedMap).getHashProvider().compare(previous, cursor.getKey());
155 assertTrue(comparisonResult<0,scenario+" Cursor order is not incremental!");
156 }
157 previous = cursor.getKey();
158 }
159 System.out.println();
160 }
161
146 public void printComparison() { 162 public void printComparison() {
147 System.out.println("SUT:"); 163 System.out.println("SUT:");
148 printEntrySet(sut.getCursor()); 164 printEntrySet(sut.getCursor());