diff options
author | OszkarSemerath <semerath@mit.bme.hu> | 2021-08-01 22:00:08 +0200 |
---|---|---|
committer | OszkarSemerath <semerath@mit.bme.hu> | 2021-08-01 22:00:08 +0200 |
commit | de4fb07e3a4ff333c72904759462055e9c90e01f (patch) | |
tree | bb7af092d77ef6bb784790a604617658909e0bee | |
parent | Hashprovide + Node update to make better equals/hashcodes services (diff) | |
download | refinery-de4fb07e3a4ff333c72904759462055e9c90e01f.tar.gz refinery-de4fb07e3a4ff333c72904759462055e9c90e01f.tar.zst refinery-de4fb07e3a4ff333c72904759462055e9c90e01f.zip |
ContentEquals test + typo fix
-rw-r--r-- | model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/ContentEqualsSmokeTest.java | 143 | ||||
-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.java | 16 |
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 @@ | |||
1 | package org.eclipse.viatra.solver.data.map.tests.smoke; | ||
2 | |||
3 | import static org.junit.jupiter.api.Assertions.assertEquals; | ||
4 | import static org.junit.jupiter.api.Assertions.assertTrue; | ||
5 | import static org.junit.jupiter.api.Assertions.fail; | ||
6 | |||
7 | import java.util.AbstractMap.SimpleEntry; | ||
8 | import java.util.Collections; | ||
9 | import java.util.LinkedList; | ||
10 | import java.util.List; | ||
11 | import java.util.Random; | ||
12 | import java.util.stream.Stream; | ||
13 | |||
14 | import org.eclipse.viatra.solver.data.map.ContinousHashProvider; | ||
15 | import org.eclipse.viatra.solver.data.map.Cursor; | ||
16 | import org.eclipse.viatra.solver.data.map.VersionedMap; | ||
17 | import org.eclipse.viatra.solver.data.map.VersionedMapStore; | ||
18 | import org.eclipse.viatra.solver.data.map.VersionedMapStoreImpl; | ||
19 | import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl; | ||
20 | import org.eclipse.viatra.solver.data.map.tests.smoke.utils.SmokeTestUtils; | ||
21 | import org.eclipse.viatra.solver.data.map.tests.utils.MapTestEnvironment; | ||
22 | import org.junit.jupiter.api.Tag; | ||
23 | import org.junit.jupiter.api.Timeout; | ||
24 | import org.junit.jupiter.params.ParameterizedTest; | ||
25 | import org.junit.jupiter.params.provider.Arguments; | ||
26 | import org.junit.jupiter.params.provider.MethodSource; | ||
27 | |||
28 | class 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 | ||
7 | import org.junit.jupiter.api.Test; | 7 | import org.junit.jupiter.api.Test; |
8 | 8 | ||
9 | class SmoteTestUtilsTest { | 9 | class 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 @@ | |||
1 | package org.eclipse.viatra.solver.data.map.tests.utils; | 1 | package org.eclipse.viatra.solver.data.map.tests.utils; |
2 | 2 | ||
3 | import static org.junit.jupiter.api.Assertions.assertEquals; | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; |
4 | import static org.junit.jupiter.api.Assertions.assertTrue; | ||
4 | import static org.junit.jupiter.api.Assertions.fail; | 5 | import static org.junit.jupiter.api.Assertions.fail; |
5 | 6 | ||
6 | import java.util.HashMap; | 7 | import java.util.HashMap; |
@@ -11,6 +12,7 @@ import java.util.TreeMap; | |||
11 | 12 | ||
12 | import org.eclipse.viatra.solver.data.map.ContinousHashProvider; | 13 | import org.eclipse.viatra.solver.data.map.ContinousHashProvider; |
13 | import org.eclipse.viatra.solver.data.map.Cursor; | 14 | import org.eclipse.viatra.solver.data.map.Cursor; |
15 | import org.eclipse.viatra.solver.data.map.VersionedMap; | ||
14 | import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl; | 16 | import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl; |
15 | 17 | ||
16 | public class MapTestEnvironment<KEY, VALUE> { | 18 | public 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()); |