aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests
diff options
context:
space:
mode:
authorLibravatar Oszkar Semerath <Oszkar Semerath@DESKTOP-DNR7JQ7>2021-07-05 23:08:04 +0200
committerLibravatar Oszkar Semerath <Oszkar Semerath@DESKTOP-DNR7JQ7>2021-07-05 23:08:04 +0200
commit51b544612ff088f6b772eaf2ca9fdd43f56450ec (patch)
tree13428b79589240f567a1a2a10d74894ea973825d /Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests
parentFirst version of Cursor, Iterator and getSize() (diff)
downloadVIATRA-Generator-51b544612ff088f6b772eaf2ca9fdd43f56450ec.tar.gz
VIATRA-Generator-51b544612ff088f6b772eaf2ca9fdd43f56450ec.tar.zst
VIATRA-Generator-51b544612ff088f6b772eaf2ca9fdd43f56450ec.zip
iterator fix
Diffstat (limited to 'Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests')
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapSmokeTest.java125
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java76
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapUnitTests.java (renamed from Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTests.java)2
3 files changed, 150 insertions, 53 deletions
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/MapSmokeTest.java
index e1a7a39b..35940256 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/MapSmokeTest.java
@@ -1,16 +1,36 @@
1package org.eclipse.viatra.solver.data.map; 1package org.eclipse.viatra.solver.data.map;
2 2
3import static org.junit.Assert.fail;
4
3import java.util.Random; 5import java.util.Random;
4 6
5import org.junit.jupiter.api.Test; 7import org.junit.jupiter.api.Test;
6 8
7public class MapSmokeTest { 9public class MapSmokeTest {
8 10
9 private void runTest(int seed, int steps, int maxKey, int maxValue) { 11 private void runSmokeTest(String scenario, int seed, int steps, int maxKey, int maxValue) {
12 String[] values = prepareValues(maxValue);
13 ContinousHashProvider<Integer> chp = prepareHashProvider();
14
15 VersionedMap<Integer, String> sut = new VersionedMap<Integer, String>(chp, values[0]);
16 MapTestEnvironment<Integer, String> e = new MapTestEnvironment<Integer, String>(sut);
17
18 Random r = new Random(seed);
19
20 iterativeRandomPuts(scenario, steps, maxKey, values, e, r);
21 }
22
23
24
25 private String[] prepareValues(int maxValue) {
10 String[] values = new String[maxValue]; 26 String[] values = new String[maxValue];
11 for(int i = 0; i<values.length; i++) { 27 values[0] = "DEFAULT";
12 values[i] = "VALUE-"+i; 28 for(int i = 1; i<values.length; i++) {
29 values[i] = "VAL"+i;
13 } 30 }
31 return values;
32 }
33 private ContinousHashProvider<Integer> prepareHashProvider() {
14 ContinousHashProvider<Integer> chp = new ContinousHashProvider<Integer>() { 34 ContinousHashProvider<Integer> chp = new ContinousHashProvider<Integer>() {
15 35
16 @Override 36 @Override
@@ -27,56 +47,87 @@ public class MapSmokeTest {
27 return key1.equals(key2); 47 return key1.equals(key2);
28 } 48 }
29 }; 49 };
30 50 return chp;
31 VersionedMap<Integer, String> sut = new VersionedMap<Integer, String>(chp, values[0]);
32 MapTestEnvironment<Integer, String> e = new MapTestEnvironment<Integer, String>(sut);
33
34 Random r = new Random(seed);
35
36 iterativeCall(steps, maxKey, maxValue, values, e, r);
37 } 51 }
38 52
39 void recursiveCall( 53// void recursiveCall(
40 int steps, 54// int steps,
41 int maxKey, 55// int maxKey,
42 int maxValue, 56// int maxValue,
43 String[] values, 57// String[] values,
44 MapTestEnvironment<Integer, String> e, 58// MapTestEnvironment<Integer, String> e,
45 Random r) 59// Random r)
46 { 60// {
47 if(steps<=0) { 61// if(steps<=0) {
48 return; 62// return;
49 } else { 63// } else {
50 e.put(r.nextInt(maxKey), values[r.nextInt(maxValue)]); 64// e.put(r.nextInt(maxKey), values[r.nextInt(maxValue)]);
51 e.checkEquivalence(); 65// e.checkEquivalence();
52 66//
53 recursiveCall(steps-1, maxKey, maxValue, values, e, r); 67// recursiveCall(steps-1, maxKey, maxValue, values, e, r);
54 } 68// }
55 } 69// }
56 70
57 void iterativeCall(int steps, 71 void iterativeRandomPuts(
72 String scenario,
73 int steps,
58 int maxKey, 74 int maxKey,
59 int maxValue,
60 String[] values, 75 String[] values,
61 MapTestEnvironment<Integer, String> e, 76 MapTestEnvironment<Integer, String> e,
62 Random r) 77 Random r)
63 { 78 {
79 int stopAt = -1;
64 for(int i=0; i<steps; i++) { 80 for(int i=0; i<steps; i++) {
65 e.put(r.nextInt(maxKey), values[r.nextInt(maxValue)]); 81 int index = i+1;
66 e.checkEquivalence(); 82 int nextKey = r.nextInt(maxKey);
83 String nextValue = values[r.nextInt(values.length)];
84 if(index == stopAt) {
85 System.out.println("issue!");
86 System.out.println("State before:");
87 e.printComparison();
88 e.sut.prettyPrint();
89 System.out.println("Next: put("+nextKey+","+nextValue+")");
90 }
91 try {
92 e.put(nextKey, nextValue);
93 if(index == stopAt) {
94 e.sut.prettyPrint();
95 }
96 e.checkEquivalence(scenario+":"+index);
97 } catch (Exception exception) {
98 exception.printStackTrace();
99 fail(scenario+":"+index+": exception happened: "+exception);
100 }
101 if(index%10000==0) System.out.println(scenario+":"+index+" finished");
67 } 102 }
68 } 103 }
69 104
70 @Test 105 @Test
71 void runTest1() { 106 void MiniSmokeK3V2v1() {
72 runTest(0, 100000, 3, 2); 107 runSmokeTest("MiniSmokeK3V2v1",0, 1000, 3, 2);
108 }
109 @Test
110 void MiniSmokeK3V2v2() {
111 runSmokeTest("MiniSmokeK3V2v2",1, 1000, 3, 2);
112 }
113 @Test
114 void MiniSmokeK3V2v3() {
115 runSmokeTest("MiniSmokeK3V2v3",3, 1000, 3, 2);
116 }
117 @Test
118 void MediumSmokeK3V2v1() {
119 runSmokeTest("MediumSmokeK3V2v1",1, 1000, 32, 2);
120 }
121 @Test
122 void MediumSmokeK3V2v2() {
123 runSmokeTest("MediumSmokeK3V2v2",2, 1000, 32, 2);
73 } 124 }
74 @Test 125 @Test
75 void runTest2() { 126 void MediumSmokeK3V2v3() {
76 runTest(1, 100000, 3, 2); 127 runSmokeTest("MediumSmokeK3V2v3",3, 1000, 32, 2);
77 } 128 }
78 @Test 129 @Test
79 void runTest3() { 130 void SmokeLarge() {
80 runTest(1, 32*32*32*32, 32*32-1, 2); 131 runSmokeTest("SmokeLarge",0, 32*32*32*32, 32*32-1, 2);
81 } 132 }
82} 133}
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 5e9b2e5f..04ae6bd0 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
@@ -1,13 +1,13 @@
1package org.eclipse.viatra.solver.data.map; 1package org.eclipse.viatra.solver.data.map;
2 2
3import static org.junit.Assert.fail; 3import static org.junit.Assert.fail;
4import static org.junit.jupiter.api.Assertions.assertEquals;
5 4
6import java.util.HashMap; 5import java.util.HashMap;
6import java.util.Iterator;
7import java.util.Map; 7import java.util.Map;
8import java.util.TreeMap;
8import java.util.Map.Entry; 9import java.util.Map.Entry;
9 10import java.util.TreeSet;
10import junit.framework.AssertionFailedError;
11 11
12public class MapTestEnvironment<KEY,VALUE> { 12public class MapTestEnvironment<KEY,VALUE> {
13 VersionedMap<KEY, VALUE> sut; 13 VersionedMap<KEY, VALUE> sut;
@@ -19,23 +19,69 @@ public class MapTestEnvironment<KEY,VALUE> {
19 19
20 public void put(KEY key, VALUE value) { 20 public void put(KEY key, VALUE value) {
21 sut.put(key, value); 21 sut.put(key, value);
22 oracle.put(key, value); 22 if(value != sut.defaultValue) {
23 oracle.put(key, value);
24 } else {
25 oracle.remove(key);
26 }
23 } 27 }
24 28
25 public void checkEquivalence() { 29 public void checkEquivalence(String title) {
26 int nonDefault = 0; 30 // 1. Checking: if Reference contains <key,value> pair, then SUT contains <key,value> pair.
31 // Tests get functions
27 for(Entry<KEY, VALUE> entry : oracle.entrySet()) { 32 for(Entry<KEY, VALUE> entry : oracle.entrySet()) {
28 VALUE sutAnswer = sut.get(entry.getKey()); 33 VALUE sutValue = sut.get(entry.getKey());
29 VALUE oracleAnswer1 = entry.getValue(); 34 VALUE oracleValue = entry.getValue();
30 VALUE oracleAnswer2 = (oracleAnswer1 == null)?sut.getDefaultValue():oracleAnswer1; 35 if(sutValue!=oracleValue) {
31 if(sutAnswer!=oracleAnswer2) { 36 printComparison();
32 fail("Non-equivalent gets: " + sutAnswer + " != " + oracleAnswer2 + "<-[oracle]") ; 37 fail(title + ": Non-equivalent get("+entry.getKey()+") results: SUT=" + sutValue + ", Oracle=" + oracleValue + "!") ;
33 } 38 }
34 if(entry.getValue() != sut.getDefaultValue()) { 39 }
35 nonDefault++; 40
41 // 2. Checking: if SUT contains <key,value> pair, then Reference contains <key,value> pair.
42 // Tests iterators
43 // TODO: Counts the number of elements in the entryset
44 int elementsInSutEntrySet = 0;
45 Iterator<Entry<KEY, VALUE>> iterator = sut.getIterator();
46 while(iterator.hasNext()) {
47 elementsInSutEntrySet++;
48 Entry<KEY, VALUE> entry = iterator.next();
49 KEY key = entry.getKey();
50 VALUE sutValue = entry.getValue();
51 //System.out.println(key + " -> " + sutValue);
52 VALUE oracleValue = oracle.get(key);
53 if(sutValue != oracleValue) {
54 printComparison();
55 fail(title+": Non-equivalent entry in iterator: SUT=<"+key+","+sutValue+">, Oracle=<"+key+","+oracleValue+">!");
36 } 56 }
57
58 }
59
60 // 3. Checking sizes
61 // Counting of non-default value pairs.
62 int oracleSize = oracle.entrySet().size();
63 int sutSize = sut.getSize();
64 if(oracleSize != sutSize || oracleSize != elementsInSutEntrySet) {
65 printComparison();
66 fail(title + ": Non-eqivalent size() result: SUT.getSize()="+sutSize+", SUT.entryset.size="+elementsInSutEntrySet+", Oracle="+oracleSize+"!" );
67 }
68
69 //assertEquals(sutNonDefault, sizeOfNondefaults);
70 }
71 public void printComparison() {
72 System.out.println("SUT:");
73 printEntrySet(sut.getIterator());
74 System.out.println("Oracle:");
75 printEntrySet(oracle.entrySet().iterator());
76 }
77 private void printEntrySet(Iterator<Entry<KEY, VALUE>> iterator) {
78 TreeMap<KEY, VALUE> treemap= new TreeMap<>();
79 while(iterator.hasNext()) {
80 Entry<KEY, VALUE> entry = iterator.next();
81 treemap.put(entry.getKey(),entry.getValue());
82 }
83 for(Entry<KEY, VALUE> e : treemap.entrySet()) {
84 System.out.println("\t" + e.getKey() + " -> " + e.getValue());
37 } 85 }
38 int sutNonDefault = sut.getSize();
39 assertEquals(sutNonDefault, nonDefault);
40 } 86 }
41} 87}
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTests.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapUnitTests.java
index 28a49380..f4137375 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTests.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapUnitTests.java
@@ -1,5 +1,5 @@
1package org.eclipse.viatra.solver.data.map; 1package org.eclipse.viatra.solver.data.map;
2 2
3public class MapTests { 3public class MapUnitTests {
4 4
5} 5}