diff options
author | Oszkar Semerath <Oszkar Semerath@DESKTOP-DNR7JQ7> | 2021-07-07 01:59:08 +0200 |
---|---|---|
committer | Oszkar Semerath <Oszkar Semerath@DESKTOP-DNR7JQ7> | 2021-07-07 01:59:08 +0200 |
commit | 2cf31725acfa94b332de5d4722a85b2281b79401 (patch) | |
tree | 8318f371f8bb0b73fad6b5c523956581d96ec9ac /Solvers | |
parent | no separate node iterators (diff) | |
download | VIATRA-Generator-2cf31725acfa94b332de5d4722a85b2281b79401.tar.gz VIATRA-Generator-2cf31725acfa94b332de5d4722a85b2281b79401.tar.zst VIATRA-Generator-2cf31725acfa94b332de5d4722a85b2281b79401.zip |
Tests and iterators
Diffstat (limited to 'Solvers')
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; | |||
6 | public interface VersionedMap<KEY,VALUE> extends Versioned{ | 6 | public 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 @@ | |||
1 | package org.eclipse.viatra.solver.data.map.debug; | ||
2 | |||
3 | import java.util.Iterator; | ||
4 | import java.util.Map.Entry; | ||
5 | |||
6 | import org.eclipse.viatra.solver.data.map.Cursor; | ||
7 | import org.eclipse.viatra.solver.data.map.VersionedMap; | ||
8 | |||
9 | public 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 @@ | |||
1 | package org.eclipse.viatra.solver.data.map.debug; | ||
2 | |||
3 | import org.eclipse.viatra.solver.data.map.VersionedMap; | ||
4 | import org.eclipse.viatra.solver.data.map.VersionedMapStore; | ||
5 | |||
6 | public 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 @@ | |||
1 | package org.eclipse.viatra.solver.data.map.internal; | 1 | package org.eclipse.viatra.solver.data.map.internal; |
2 | 2 | ||
3 | import java.util.ArrayDeque; | 3 | import java.util.ArrayDeque; |
4 | import java.util.ConcurrentModificationException; | ||
4 | import java.util.Deque; | 5 | import java.util.Deque; |
5 | 6 | ||
6 | import org.eclipse.viatra.solver.data.map.Cursor; | 7 | import 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 | ||
3 | import java.util.Iterator; | 3 | import java.util.Iterator; |
4 | import java.util.Map; | 4 | import java.util.Map; |
5 | import java.util.WeakHashMap; | ||
5 | 6 | ||
6 | import org.eclipse.viatra.solver.data.map.ContinousHashProvider; | 7 | import org.eclipse.viatra.solver.data.map.ContinousHashProvider; |
7 | import org.eclipse.viatra.solver.data.map.Cursor; | 8 | import 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; | |||
7 | import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl; | 7 | import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl; |
8 | import org.junit.jupiter.api.Test; | 8 | import org.junit.jupiter.api.Test; |
9 | 9 | ||
10 | public class MapSmokeTest { | 10 | public 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 @@ | |||
1 | package org.eclipse.viatra.solver.data.map; | ||
2 | |||
3 | import static org.junit.Assert.fail; | ||
4 | |||
5 | import java.util.Random; | ||
6 | |||
7 | import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl; | ||
8 | import org.junit.jupiter.api.Test; | ||
9 | |||
10 | public 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 | } | ||