aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers
diff options
context:
space:
mode:
authorLibravatar Oszkar Semerath <Oszkar Semerath@DESKTOP-DNR7JQ7>2021-07-07 01:59:08 +0200
committerLibravatar Oszkar Semerath <Oszkar Semerath@DESKTOP-DNR7JQ7>2021-07-07 01:59:08 +0200
commit2cf31725acfa94b332de5d4722a85b2281b79401 (patch)
tree8318f371f8bb0b73fad6b5c523956581d96ec9ac /Solvers
parentno separate node iterators (diff)
downloadVIATRA-Generator-2cf31725acfa94b332de5d4722a85b2281b79401.tar.gz
VIATRA-Generator-2cf31725acfa94b332de5d4722a85b2281b79401.tar.zst
VIATRA-Generator-2cf31725acfa94b332de5d4722a85b2281b79401.zip
Tests and iterators
Diffstat (limited to 'Solvers')
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMap.java2
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java12
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/debug/VersionedMapDebug.java53
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/debug/VersionedMapStoreDebug.java20
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/ImmutableNode.java4
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MapCursor.java17
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MutableNode.java2
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/Node.java2
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/VersionedMapImpl.java17
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java2
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/SmokeTest1Mutable.java (renamed from Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapSmokeTest.java)2
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/SmokeTest2Commit.java133
12 files changed, 247 insertions, 19 deletions
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMap.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMap.java
index 3d691407..28264f2f 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMap.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMap.java
@@ -6,7 +6,7 @@ import java.util.Map;
6public interface VersionedMap<KEY,VALUE> extends Versioned{ 6public interface VersionedMap<KEY,VALUE> extends Versioned{
7 public void put(KEY key, VALUE value); 7 public void put(KEY key, VALUE value);
8 public VALUE get(KEY key); 8 public VALUE get(KEY key);
9 public int getSize(); 9 public long getSize();
10 public Iterator<Map.Entry<KEY,VALUE>> getIterator(); 10 public Iterator<Map.Entry<KEY,VALUE>> getIterator();
11 public Cursor<KEY,VALUE> getCursor(); 11 public Cursor<KEY,VALUE> getCursor();
12} 12}
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java
index 1e1352ab..c5516cda 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java
@@ -43,15 +43,9 @@ public class VersionedMapStoreImpl<KEY,VALUE> implements VersionedMapStore<KEY,
43 } 43 }
44 44
45 public long addState(ImmutableNode<KEY,VALUE> data) { 45 public long addState(ImmutableNode<KEY,VALUE> data) {
46 if(data != null) { 46 long id = nextID++;
47 ImmutableNode<KEY, VALUE> immutable = data.toImmutable(); 47 states.put(id,data);
48 long id = nextID++; 48 return id;
49 states.put(id,immutable);
50 return id;
51 } else {
52 throw new NullPointerException("data is null!");
53 }
54
55 } 49 }
56// public void removeState(long state) { 50// public void removeState(long state) {
57// if(states.containsKey(state)) { 51// if(states.containsKey(state)) {
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/debug/VersionedMapDebug.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/debug/VersionedMapDebug.java
new file mode 100644
index 00000000..0f5332d2
--- /dev/null
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/debug/VersionedMapDebug.java
@@ -0,0 +1,53 @@
1package org.eclipse.viatra.solver.data.map.debug;
2
3import java.util.Iterator;
4import java.util.Map.Entry;
5
6import org.eclipse.viatra.solver.data.map.Cursor;
7import org.eclipse.viatra.solver.data.map.VersionedMap;
8
9public class VersionedMapDebug<KEY, VALUE> implements VersionedMap<KEY, VALUE> {
10
11 @Override
12 public long commit() {
13 // TODO Auto-generated method stub
14 return 0;
15 }
16
17 @Override
18 public void restore(long state) {
19 // TODO Auto-generated method stub
20
21 }
22
23 @Override
24 public void put(KEY key, VALUE value) {
25 // TODO Auto-generated method stub
26
27 }
28
29 @Override
30 public VALUE get(KEY key) {
31 // TODO Auto-generated method stub
32 return null;
33 }
34
35 @Override
36 public long getSize() {
37 // TODO Auto-generated method stub
38 return 0;
39 }
40
41 @Override
42 public Iterator<Entry<KEY, VALUE>> getIterator() {
43 // TODO Auto-generated method stub
44 return null;
45 }
46
47 @Override
48 public Cursor<KEY, VALUE> getCursor() {
49 // TODO Auto-generated method stub
50 return null;
51 }
52
53}
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/debug/VersionedMapStoreDebug.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/debug/VersionedMapStoreDebug.java
new file mode 100644
index 00000000..f7c13416
--- /dev/null
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/debug/VersionedMapStoreDebug.java
@@ -0,0 +1,20 @@
1package org.eclipse.viatra.solver.data.map.debug;
2
3import org.eclipse.viatra.solver.data.map.VersionedMap;
4import org.eclipse.viatra.solver.data.map.VersionedMapStore;
5
6public class VersionedMapStoreDebug<KEY, VALUE> implements VersionedMapStore<KEY, VALUE> {
7
8 @Override
9 public VersionedMap<KEY, VALUE> createMap() {
10 // TODO Auto-generated method stub
11 return null;
12 }
13
14 @Override
15 public VersionedMap<KEY, VALUE> createMap(long state) throws IllegalAccessException {
16 // TODO Auto-generated method stub
17 return null;
18 }
19
20}
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/ImmutableNode.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/ImmutableNode.java
index 860c258a..1765a54e 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/ImmutableNode.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/ImmutableNode.java
@@ -32,7 +32,7 @@ public class ImmutableNode<KEY, VALUE> extends Node<KEY, VALUE> {
32 @SuppressWarnings("unchecked") 32 @SuppressWarnings("unchecked")
33 protected ImmutableNode(MutableNode<KEY,VALUE> node) { 33 protected ImmutableNode(MutableNode<KEY,VALUE> node) {
34 int size = 0; 34 int size = 0;
35 for(int i = 0; i<factor; i++) { 35 for(int i = 0; i<node.content.length; i++) {
36 if(node.content[i]!=null) { 36 if(node.content[i]!=null) {
37 size++; 37 size++;
38 } 38 }
@@ -160,7 +160,7 @@ public class ImmutableNode<KEY, VALUE> extends Node<KEY, VALUE> {
160 160
161 @SuppressWarnings("unchecked") 161 @SuppressWarnings("unchecked")
162 @Override 162 @Override
163 public int getSize() { 163 public long getSize() {
164 int result = Integer.bitCount(this.dataMap); 164 int result = Integer.bitCount(this.dataMap);
165 for(int subnodeIndex = 0; subnodeIndex < Integer.bitCount(this.nodeMap); subnodeIndex++) { 165 for(int subnodeIndex = 0; subnodeIndex < Integer.bitCount(this.nodeMap); subnodeIndex++) {
166 ImmutableNode<KEY,VALUE> subnode = (ImmutableNode<KEY, VALUE>) this.content[this.content.length-1-subnodeIndex]; 166 ImmutableNode<KEY,VALUE> subnode = (ImmutableNode<KEY, VALUE>) this.content[this.content.length-1-subnodeIndex];
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MapCursor.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MapCursor.java
index 9489d110..d658e9d8 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MapCursor.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MapCursor.java
@@ -1,6 +1,7 @@
1package org.eclipse.viatra.solver.data.map.internal; 1package org.eclipse.viatra.solver.data.map.internal;
2 2
3import java.util.ArrayDeque; 3import java.util.ArrayDeque;
4import java.util.ConcurrentModificationException;
4import java.util.Deque; 5import java.util.Deque;
5 6
6import org.eclipse.viatra.solver.data.map.Cursor; 7import org.eclipse.viatra.solver.data.map.Cursor;
@@ -19,6 +20,12 @@ public class MapCursor<KEY,VALUE> implements Cursor<KEY,VALUE> {
19 KEY key; 20 KEY key;
20 VALUE value; 21 VALUE value;
21 22
23 // State
24 /**
25 * Dirty bit for Conc
26 */
27 boolean dirty;
28
22 public MapCursor(Node<KEY, VALUE> root) { 29 public MapCursor(Node<KEY, VALUE> root) {
23 // Initializing tree stack 30 // Initializing tree stack
24 super(); 31 super();
@@ -34,6 +41,9 @@ public class MapCursor<KEY,VALUE> implements Cursor<KEY,VALUE> {
34 this.key = null; 41 this.key = null;
35 this.value = null; 42 this.value = null;
36 43
44 // Initializing state
45 this.dirty = false;
46
37 // move to first 47 // move to first
38 move(); 48 move();
39 } 49 }
@@ -51,10 +61,17 @@ public class MapCursor<KEY,VALUE> implements Cursor<KEY,VALUE> {
51 } 61 }
52 62
53 public boolean move() { 63 public boolean move() {
64 if(dirty) {
65 throw new ConcurrentModificationException();
66 }
54 if(!isTerminated()) { 67 if(!isTerminated()) {
55 return this.nodeStack.peek().moveToNext(this); 68 return this.nodeStack.peek().moveToNext(this);
56 } else { 69 } else {
57 return false; 70 return false;
58 } 71 }
59 } 72 }
73
74 public void setDirty() {
75 this.dirty = true;
76 }
60} 77}
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MutableNode.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MutableNode.java
index b22c7b14..0a6386a5 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MutableNode.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MutableNode.java
@@ -187,7 +187,7 @@ public class MutableNode<KEY,VALUE> extends Node<KEY,VALUE> {
187 187
188 @SuppressWarnings("unchecked") 188 @SuppressWarnings("unchecked")
189 @Override 189 @Override
190 public int getSize() { 190 public long getSize() {
191 int size = 0; 191 int size = 0;
192 for(int i=0; i<factor; i++) { 192 for(int i=0; i<factor; i++) {
193 if(content[i*2]!=null) { 193 if(content[i*2]!=null) {
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/Node.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/Node.java
index ee81493f..e7be5684 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/Node.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/Node.java
@@ -50,7 +50,7 @@ public abstract class Node<KEY,VALUE>{
50 50
51 abstract public VALUE getValue(KEY key, ContinousHashProvider<? super KEY> hashProvider, VALUE defaultValue, int hash, int depth); 51 abstract public VALUE getValue(KEY key, ContinousHashProvider<? super KEY> hashProvider, VALUE defaultValue, int hash, int depth);
52 abstract public Node<KEY,VALUE> putValue(KEY key, VALUE value, ContinousHashProvider<? super KEY> hashProvider, VALUE defaultValue, int hash, int depth); 52 abstract public Node<KEY,VALUE> putValue(KEY key, VALUE value, ContinousHashProvider<? super KEY> hashProvider, VALUE defaultValue, int hash, int depth);
53 abstract public int getSize(); 53 abstract public long getSize();
54 54
55 abstract MutableNode<KEY, VALUE> toMutable(); 55 abstract MutableNode<KEY, VALUE> toMutable();
56 public abstract ImmutableNode<KEY, VALUE> toImmutable(); 56 public abstract ImmutableNode<KEY, VALUE> toImmutable();
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/VersionedMapImpl.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/VersionedMapImpl.java
index 92ba17ab..537da4e1 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/VersionedMapImpl.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/VersionedMapImpl.java
@@ -2,6 +2,7 @@ package org.eclipse.viatra.solver.data.map.internal;
2 2
3import java.util.Iterator; 3import java.util.Iterator;
4import java.util.Map; 4import java.util.Map;
5import java.util.WeakHashMap;
5 6
6import org.eclipse.viatra.solver.data.map.ContinousHashProvider; 7import org.eclipse.viatra.solver.data.map.ContinousHashProvider;
7import org.eclipse.viatra.solver.data.map.Cursor; 8import org.eclipse.viatra.solver.data.map.Cursor;
@@ -21,6 +22,7 @@ public class VersionedMapImpl<KEY,VALUE> implements VersionedMap<KEY,VALUE>{
21 protected final ContinousHashProvider<? super KEY> hashProvider; 22 protected final ContinousHashProvider<? super KEY> hashProvider;
22 protected final VALUE defaultValue; 23 protected final VALUE defaultValue;
23 protected Node<KEY,VALUE> root; 24 protected Node<KEY,VALUE> root;
25 WeakHashMap<MapCursor<KEY, VALUE>, Boolean> iterators;
24 //TODO: protected final iterators 26 //TODO: protected final iterators
25 27
26 public VersionedMapImpl( 28 public VersionedMapImpl(
@@ -32,6 +34,7 @@ public class VersionedMapImpl<KEY,VALUE> implements VersionedMap<KEY,VALUE>{
32 this.hashProvider = hashProvider; 34 this.hashProvider = hashProvider;
33 this.defaultValue = defaultValue; 35 this.defaultValue = defaultValue;
34 this.root = null; 36 this.root = null;
37 iterators = new WeakHashMap<>();
35 } 38 }
36 public VersionedMapImpl( 39 public VersionedMapImpl(
37 VersionedMapStoreImpl<KEY,VALUE> store, 40 VersionedMapStoreImpl<KEY,VALUE> store,
@@ -42,6 +45,7 @@ public class VersionedMapImpl<KEY,VALUE> implements VersionedMap<KEY,VALUE>{
42 this.hashProvider = hashProvider; 45 this.hashProvider = hashProvider;
43 this.defaultValue = defaultValue; 46 this.defaultValue = defaultValue;
44 this.root = data; 47 this.root = data;
48 iterators = new WeakHashMap<>();
45 } 49 }
46 50
47 public VALUE getDefaultValue() { 51 public VALUE getDefaultValue() {
@@ -52,6 +56,9 @@ public class VersionedMapImpl<KEY,VALUE> implements VersionedMap<KEY,VALUE>{
52 } 56 }
53 @Override 57 @Override
54 public void put(KEY key, VALUE value) { 58 public void put(KEY key, VALUE value) {
59 for(MapCursor<KEY, VALUE> iterator : iterators.keySet()) {
60 iterator.setDirty();
61 }
55 if(root!=null) { 62 if(root!=null) {
56 root = root.putValue(key, value, hashProvider, defaultValue, hashProvider.getHash(key, 0), 0); 63 root = root.putValue(key, value, hashProvider, defaultValue, hashProvider.getHash(key, 0), 0);
57 } else { 64 } else {
@@ -67,7 +74,7 @@ public class VersionedMapImpl<KEY,VALUE> implements VersionedMap<KEY,VALUE>{
67 } 74 }
68 } 75 }
69 @Override 76 @Override
70 public int getSize() { 77 public long getSize() {
71 if(root == null) { 78 if(root == null) {
72 return 0; 79 return 0;
73 } else { 80 } else {
@@ -77,11 +84,15 @@ public class VersionedMapImpl<KEY,VALUE> implements VersionedMap<KEY,VALUE>{
77 @Override 84 @Override
78 public 85 public
79 Iterator<Map.Entry<KEY,VALUE>> getIterator() { 86 Iterator<Map.Entry<KEY,VALUE>> getIterator() {
80 return new MapEntryIterator<>(this.root); 87 MapEntryIterator<KEY,VALUE> iterator = new MapEntryIterator<>(this.root);
88 iterators.put(iterator, null);
89 return iterator;
81 } 90 }
82 @Override 91 @Override
83 public Cursor<KEY, VALUE> getCursor() { 92 public Cursor<KEY, VALUE> getCursor() {
84 return new MapEntryIterator<>(this.root); 93 MapEntryIterator<KEY,VALUE> cursor = new MapEntryIterator<>(this.root);
94 iterators.put(cursor, null);
95 return cursor;
85 } 96 }
86 97
87 @Override 98 @Override
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java
index 507e8dc2..1dcf7a63 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java
@@ -61,7 +61,7 @@ public class MapTestEnvironment<KEY,VALUE> {
61 // 3. Checking sizes 61 // 3. Checking sizes
62 // Counting of non-default value pairs. 62 // Counting of non-default value pairs.
63 int oracleSize = oracle.entrySet().size(); 63 int oracleSize = oracle.entrySet().size();
64 int sutSize = sut.getSize(); 64 long sutSize = sut.getSize();
65 if(oracleSize != sutSize || oracleSize != elementsInSutEntrySet) { 65 if(oracleSize != sutSize || oracleSize != elementsInSutEntrySet) {
66 printComparison(); 66 printComparison();
67 fail(title + ": Non-eqivalent size() result: SUT.getSize()="+sutSize+", SUT.entryset.size="+elementsInSutEntrySet+", Oracle="+oracleSize+"!" ); 67 fail(title + ": Non-eqivalent size() result: SUT.getSize()="+sutSize+", SUT.entryset.size="+elementsInSutEntrySet+", Oracle="+oracleSize+"!" );
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapSmokeTest.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/SmokeTest1Mutable.java
index 8532da63..9b08a7bc 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapSmokeTest.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/SmokeTest1Mutable.java
@@ -7,7 +7,7 @@ import java.util.Random;
7import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl; 7import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl;
8import org.junit.jupiter.api.Test; 8import org.junit.jupiter.api.Test;
9 9
10public class MapSmokeTest { 10public class SmokeTest1Mutable {
11 11
12 private void runSmokeTest(String scenario, int seed, int steps, int maxKey, int maxValue) { 12 private void runSmokeTest(String scenario, int seed, int steps, int maxKey, int maxValue) {
13 String[] values = prepareValues(maxValue); 13 String[] values = prepareValues(maxValue);
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/SmokeTest2Commit.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/SmokeTest2Commit.java
new file mode 100644
index 00000000..8be9adb6
--- /dev/null
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/SmokeTest2Commit.java
@@ -0,0 +1,133 @@
1package org.eclipse.viatra.solver.data.map;
2
3import static org.junit.Assert.fail;
4
5import java.util.Random;
6
7import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl;
8import org.junit.jupiter.api.Test;
9
10public class SmokeTest2Commit {
11 private void runSmokeTest(String scenario, int seed, int steps, int maxKey, int maxValue, int commitFrequency) {
12 String[] values = prepareValues(maxValue);
13 ContinousHashProvider<Integer> chp = prepareHashProvider();
14
15 VersionedMapStore<Integer, String> store = new VersionedMapStoreImpl<Integer, String>(chp, values[0]);
16 VersionedMapImpl<Integer, String> sut = (VersionedMapImpl<Integer, String>) store.createMap();
17 MapTestEnvironment<Integer, String> e = new MapTestEnvironment<Integer, String>(sut);
18
19 Random r = new Random(seed);
20
21 iterativeRandomPutsAndCommits(scenario, steps, maxKey, values, e, r, commitFrequency);
22 }
23
24
25
26 private String[] prepareValues(int maxValue) {
27 String[] values = new String[maxValue];
28 values[0] = "DEFAULT";
29 for(int i = 1; i<values.length; i++) {
30 values[i] = "VAL"+i;
31 }
32 return values;
33 }
34 private ContinousHashProvider<Integer> prepareHashProvider() {
35 ContinousHashProvider<Integer> chp = new ContinousHashProvider<Integer>() {
36
37 @Override
38 public int getHash(Integer key, int index) {
39 int result = 1;
40 final int prime = 31;
41 result = prime*result + key;
42 result = prime*result + index;
43 return result;
44 }
45
46 @Override
47 public boolean equals(Integer key1, Integer key2) {
48 return key1.equals(key2);
49 }
50 };
51 return chp;
52 }
53
54 void iterativeRandomPutsAndCommits(
55 String scenario,
56 int steps,
57 int maxKey,
58 String[] values,
59 MapTestEnvironment<Integer, String> e,
60 Random r,
61 int commitFrequency)
62 {
63 int stopAt = -1;
64 for(int i=0; i<steps; i++) {
65 int index = i+1;
66 int nextKey = r.nextInt(maxKey);
67 String nextValue = values[r.nextInt(values.length)];
68 if(index == stopAt) {
69 System.out.println("issue!");
70 System.out.println("State before:");
71 e.printComparison();
72 e.sut.prettyPrint();
73 System.out.println("Next: put("+nextKey+","+nextValue+")");
74 }
75 try {
76 e.put(nextKey, nextValue);
77 if(index == stopAt) {
78 e.sut.prettyPrint();
79 }
80 e.checkEquivalence(scenario+":"+index);
81 } catch (Exception exception) {
82 exception.printStackTrace();
83 fail(scenario+":"+index+": exception happened: "+exception);
84 }
85 if(index%10000==0) System.out.println(scenario+":"+index+" finished");
86 if(index%commitFrequency == 0) {
87 long version = e.sut.commit();
88 System.out.println(scenario+":"+index+": Commit! " + version);
89 }
90 }
91 }
92
93 @Test
94 void MiniSmokeK3V2v1() {
95 runSmokeTest("MiniSmokeK3V2v1",0, 1000, 3, 2, 10);
96 }
97 @Test
98 void MiniSmokeK3V2v2() {
99 runSmokeTest("MiniSmokeK3V2v2",1, 1000, 3, 2, 10);
100 }
101 @Test
102 void MiniSmokeK3V2v3() {
103 runSmokeTest("MiniSmokeK3V2v3",3, 1000, 3, 2, 10);
104 }
105 @Test
106 void MiniSmokeK3V3v1() {
107 runSmokeTest("MiniSmokeK3V2v1",0, 1000, 3, 3, 10);
108 }
109 @Test
110 void MiniSmokeK3V3v2() {
111 runSmokeTest("MiniSmokeK3V2v2",1, 1000, 3, 3, 10);
112 }
113 @Test
114 void MiniSmokeK3V3v3() {
115 runSmokeTest("MiniSmokeK3V2v3",3, 1000, 3, 3, 10);
116 }
117 @Test
118 void MediumSmokeK3V2v1() {
119 runSmokeTest("MediumSmokeK3V2v1",1, 1000, 32, 2, 10);
120 }
121 @Test
122 void MediumSmokeK3V2v2() {
123 runSmokeTest("MediumSmokeK3V2v2",2, 1000, 32, 2, 10);
124 }
125 @Test
126 void MediumSmokeK3V2v3() {
127 runSmokeTest("MediumSmokeK3V2v3",3, 1000, 32, 2, 10);
128 }
129// @Test
130// void SmokeLarge() {
131// runSmokeTest("SmokeLarge",0, 32*32*32*32, 32*32-1, 2);
132// }
133}