aboutsummaryrefslogtreecommitdiffstats
path: root/model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/fast/RestoreSmokeTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/fast/RestoreSmokeTest.java')
-rw-r--r--model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/fast/RestoreSmokeTest.java92
1 files changed, 92 insertions, 0 deletions
diff --git a/model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/fast/RestoreSmokeTest.java b/model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/fast/RestoreSmokeTest.java
new file mode 100644
index 00000000..4ca9b088
--- /dev/null
+++ b/model-data/src/test/java/org/eclipse/viatra/solver/data/map/tests/smoke/fast/RestoreSmokeTest.java
@@ -0,0 +1,92 @@
1package org.eclipse.viatra.solver.data.map.tests.smoke.fast;
2
3import static org.junit.jupiter.api.Assertions.fail;
4
5import java.util.HashMap;
6import java.util.Map;
7import java.util.Random;
8import java.util.stream.Stream;
9
10import org.eclipse.viatra.solver.data.map.ContinousHashProvider;
11import org.eclipse.viatra.solver.data.map.VersionedMapStore;
12import org.eclipse.viatra.solver.data.map.VersionedMapStoreImpl;
13import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl;
14import org.eclipse.viatra.solver.data.map.tests.smoke.utils.TestPermuter;
15import org.eclipse.viatra.solver.data.map.tests.support.MapTestEnvironment;
16import org.junit.jupiter.api.Timeout;
17import org.junit.jupiter.params.ParameterizedTest;
18import org.junit.jupiter.params.provider.Arguments;
19import org.junit.jupiter.params.provider.MethodSource;
20
21public class RestoreSmokeTest {
22 public void runSmokeTest(String scenario, int seed, int steps, int maxKey, int maxValue, int commitFrequency,
23 boolean evilHash) {
24 String[] values = MapTestEnvironment.prepareValues(maxValue);
25 ContinousHashProvider<Integer> chp = MapTestEnvironment.prepareHashProvider(evilHash);
26
27 VersionedMapStore<Integer, String> store = new VersionedMapStoreImpl<Integer, String>(chp, values[0]);
28
29 iterativeRandomPutsAndCommitsThenRestore(scenario, store, steps, maxKey, values, seed, commitFrequency);
30 }
31
32 void iterativeRandomPutsAndCommitsThenRestore(String scenario, VersionedMapStore<Integer, String> store, int steps,
33 int maxKey, String[] values, int seed, int commitFrequency) {
34 // 1. build a map with versions
35 Random r = new Random(seed);
36 VersionedMapImpl<Integer, String> versioned = (VersionedMapImpl<Integer, String>) store.createMap();
37 Map<Integer, Long> index2Version = new HashMap<>();
38
39 for (int i = 0; i < steps; i++) {
40 int index = i + 1;
41 int nextKey = r.nextInt(maxKey);
42 String nextValue = values[r.nextInt(values.length)];
43 try {
44 versioned.put(nextKey, nextValue);
45 } catch (Exception exception) {
46 exception.printStackTrace();
47 fail(scenario + ":" + index + ": exception happened: " + exception);
48 }
49 if (index % commitFrequency == 0) {
50 long version = versioned.commit();
51 index2Version.put(i, version);
52 }
53 MapTestEnvironment.printStatus(scenario, index, steps, "building");
54 }
55 // 2. create a non-versioned and
56 VersionedMapImpl<Integer, String> reference = (VersionedMapImpl<Integer, String>) store.createMap();
57 r = new Random(seed);
58
59 for (int i = 0; i < steps; i++) {
60 int index = i + 1;
61 int nextKey = r.nextInt(maxKey);
62 String nextValue = values[r.nextInt(values.length)];
63 try {
64 reference.put(nextKey, nextValue);
65 } catch (Exception exception) {
66 exception.printStackTrace();
67 fail(scenario + ":" + index + ": exception happened: " + exception);
68 }
69 if (index % commitFrequency == 0) {
70 versioned.restore(index2Version.get(i));
71 MapTestEnvironment.compareTwoMaps(scenario + ":" + index, reference, versioned);
72 }
73 MapTestEnvironment.printStatus(scenario, index, steps, "comparison");
74 }
75
76 }
77
78 @ParameterizedTest(name = "Mutable-Immutable Compare Smoke {index}/{0} Steps={1} Keys={2} Values={3} commit frequency={4} seed={5} evil-hash={6}")
79 @MethodSource
80 @Timeout(value = 10)
81 void parametrizedSmoke(int tests, int steps, int noKeys, int noValues, int commitFrequency, int seed,
82 boolean evilHash) {
83 runSmokeTest("SmokeMutableImmutableCompareS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps,
84 noKeys, noValues, commitFrequency, evilHash);
85 }
86
87 public static Stream<Arguments> parametrizedSmoke() {
88 return TestPermuter.permutationWithSize(new Object[] { 1000 }, new Object[] { 3, 32, 32 * 32 },
89 new Object[] { 2, 3 }, new Object[] { 1, 10, 100 }, new Object[] { 1, 2, 3 },
90 new Object[] { false, true });
91 }
92}