aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store/src
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <semerath@mit.bme.hu>2023-07-21 20:27:30 +0200
committerLibravatar OszkarSemerath <semerath@mit.bme.hu>2023-07-21 20:27:30 +0200
commita6dcff6293e960b420e26c57374a281467821556 (patch)
tree76fe949d03cc2603febb3057261ef365d476e52c /subprojects/store/src
parentFixing long-standing bug with state based diff cursor. (diff)
downloadrefinery-a6dcff6293e960b420e26c57374a281467821556.tar.gz
refinery-a6dcff6293e960b420e26c57374a281467821556.tar.zst
refinery-a6dcff6293e960b420e26c57374a281467821556.zip
VersionedMapStoreFactoryBuilder.java is introduced, all tests are updated.
VersionedMapStoreBuilder.java is removed.
Diffstat (limited to 'subprojects/store/src')
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStore.java20
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreBuilder.java130
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreFactory.java19
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreFactoryBuilder.java24
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/DeltaBasedVersionedMapStoreFactory.java34
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/StateBasedVersionedMapStoreFactory.java33
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/VersionedMapStoreFactoryBuilderImpl.java132
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/map/tests/InOrderCursorTest.java18
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/map/tests/MapUnitTests.java9
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/CommitFuzzTest.java21
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/ContentEqualsFuzzTest.java20
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/DiffCursorFuzzTest.java10
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/MultiThreadFuzzTest.java29
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/MutableFuzzTest.java8
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/RestoreFuzzTest.java30
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/SingleThreadFuzzTest.java10
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/utils/FuzzTestCollections.java52
17 files changed, 357 insertions, 242 deletions
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStore.java b/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStore.java
index a8d7fb1a..7768287a 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStore.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStore.java
@@ -1,14 +1,20 @@
1package tools.refinery.store.map; 1package tools.refinery.store.map;
2 2
3import tools.refinery.store.map.internal.VersionedMapStoreFactoryBuilderImpl;
4
3import java.util.Set; 5import java.util.Set;
4 6
5public interface VersionedMapStore<K, V> { 7public interface VersionedMapStore<K, V> {
6
7 public VersionedMap<K, V> createMap();
8 8
9 public VersionedMap<K, V> createMap(long state); 9 VersionedMap<K, V> createMap();
10 10
11 public Set<Long> getStates(); 11 VersionedMap<K, V> createMap(long state);
12
13 Set<Long> getStates();
14
15 DiffCursor<K,V> getDiffCursor(long fromState, long toState);
12 16
13 public DiffCursor<K,V> getDiffCursor(long fromState, long toState); 17 static <K,V> VersionedMapStoreFactoryBuilder<K,V> builder() {
14} \ No newline at end of file 18 return new VersionedMapStoreFactoryBuilderImpl<>();
19 }
20}
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreBuilder.java b/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreBuilder.java
deleted file mode 100644
index 1a9aa0b3..00000000
--- a/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreBuilder.java
+++ /dev/null
@@ -1,130 +0,0 @@
1package tools.refinery.store.map;
2
3import java.util.ArrayList;
4import java.util.List;
5
6public class VersionedMapStoreBuilder<K, V> {
7 public enum StoreStrategy {
8 STATE, DELTA
9 }
10
11 public enum DeltaStorageStrategy {
12 LIST, SET
13 }
14
15 public enum StateStorageStrategy {
16 NO_NODE_CACHE, SHARED_NODE_CACHE, SHARED_NODE_CACHE_IN_GROUP
17 }
18
19 public static <K, V> VersionedMapStoreBuilder<K, V> builder() {
20 return new VersionedMapStoreBuilder<>();
21 }
22 protected VersionedMapStoreBuilder() {
23 }
24 protected VersionedMapStoreBuilder(VersionedMapStoreBuilder<K, V> other) {
25 this.defaultValue = other.defaultValue;
26 this.defaultSet = other.defaultSet;
27 this.strategy = other.strategy;
28 this.stateBasedImmutableWhenCommitting = other.stateBasedImmutableWhenCommitting;
29 this.stateBasedNodeSharingStrategy = other.stateBasedNodeSharingStrategy;
30 this.hashProvider = other.hashProvider;
31 this.deltaStorageStrategy = other.deltaStorageStrategy;
32 }
33 protected boolean defaultSet = false;
34 protected V defaultValue = null;
35 protected StoreStrategy strategy = StoreStrategy.DELTA;
36 protected Boolean stateBasedImmutableWhenCommitting = false;
37 protected StateStorageStrategy stateBasedNodeSharingStrategy = StateStorageStrategy.SHARED_NODE_CACHE_IN_GROUP;
38 protected ContinousHashProvider<K> hashProvider = null;
39 protected DeltaStorageStrategy deltaStorageStrategy = DeltaStorageStrategy.LIST;
40
41 public VersionedMapStoreBuilder<K, V> setDefaultValue(V defaultValue) {
42 var result = new VersionedMapStoreBuilder<>(this);
43 result.defaultValue = defaultValue;
44 result.defaultSet = true;
45 return result;
46 }
47
48 public VersionedMapStoreBuilder<K, V> setStrategy(StoreStrategy strategy) {
49 var result = new VersionedMapStoreBuilder<>(this);
50 result.strategy = strategy;
51 return result;
52 }
53
54 public VersionedMapStoreBuilder<K, V> setHashProvider(ContinousHashProvider<K> hashProvider) {
55 var result = new VersionedMapStoreBuilder<>(this);
56 result.hashProvider = hashProvider;
57 return result;
58 }
59
60 public VersionedMapStoreBuilder<K, V> setStateBasedImmutableWhenCommitting(boolean toImmutableWhenCommitting) {
61 var result = new VersionedMapStoreBuilder<>(this);
62 result.stateBasedImmutableWhenCommitting = toImmutableWhenCommitting;
63 return result;
64 }
65
66 public VersionedMapStoreBuilder<K, V> setStateBasedNodeSharingStrategy(StateStorageStrategy strategy) {
67 var result = new VersionedMapStoreBuilder<>(this);
68 result.stateBasedNodeSharingStrategy = strategy;
69 return result;
70 }
71
72 public VersionedMapStoreBuilder<K, V> setDeltaStorageStrategy(DeltaStorageStrategy deltaStorageStrategy) {
73 var result = new VersionedMapStoreBuilder<>(this);
74 result.deltaStorageStrategy = deltaStorageStrategy;
75 return result;
76 }
77
78 public VersionedMapStore<K, V> buildOne() {
79 if(!defaultSet) {
80 throw new IllegalStateException("Default value is missing!");
81 }
82 return switch (strategy) {
83 case DELTA -> new VersionedMapStoreDeltaImpl<>(
84 this.deltaStorageStrategy == DeltaStorageStrategy.SET,
85 this.defaultValue);
86 case STATE -> new VersionedMapStoreImpl<>(
87 this.hashProvider,
88 this.defaultValue,
89 new VersionedMapStoreConfiguration(
90 this.stateBasedImmutableWhenCommitting,
91 this.stateBasedNodeSharingStrategy != StateStorageStrategy.NO_NODE_CACHE,
92 this.stateBasedNodeSharingStrategy == StateStorageStrategy.SHARED_NODE_CACHE_IN_GROUP));
93 };
94 }
95
96 public List<VersionedMapStore<K, V>> buildGroup(int amount) {
97 if(!defaultSet) {
98 throw new IllegalStateException("Default value is missing!");
99 }
100 if (this.strategy == StoreStrategy.STATE &&
101 this.stateBasedNodeSharingStrategy == StateStorageStrategy.SHARED_NODE_CACHE_IN_GROUP) {
102 return VersionedMapStoreImpl.createSharedVersionedMapStores(
103 amount,
104 this.hashProvider,
105 this.defaultValue,
106 new VersionedMapStoreConfiguration(
107 this.stateBasedImmutableWhenCommitting,
108 true,
109 true));
110 } else {
111 List<VersionedMapStore<K, V>> result = new ArrayList<>(amount);
112 for (int i = 0; i < amount; i++) {
113 result.add(buildOne());
114 }
115 return result;
116 }
117 }
118
119 @Override
120 public String toString() {
121 return "VersionedMapStoreBuilder{" +
122 "defaultValue=" + defaultValue +
123 ", strategy=" + strategy +
124 ", stateBasedImmutableWhenCommitting=" + stateBasedImmutableWhenCommitting +
125 ", stateBasedNodeSharingStrategy=" + stateBasedNodeSharingStrategy +
126 ", hashProvider=" + hashProvider +
127 ", deltaStorageStrategy=" + deltaStorageStrategy +
128 '}';
129 }
130}
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreFactory.java b/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreFactory.java
new file mode 100644
index 00000000..5f882a3a
--- /dev/null
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreFactory.java
@@ -0,0 +1,19 @@
1package tools.refinery.store.map;
2
3import java.util.List;
4
5public interface VersionedMapStoreFactory<K,V> {
6 /**
7 * Constructs a new instance of {@link VersionedMap}.
8 * @return The new instance.
9 */
10 VersionedMapStore<K,V> createOne();
11
12 /**
13 * Constructs a group of {@link VersionedMap}s with the same configuration. If possible, the stores share
14 * resources with each other.
15 * @param amount The amount of new instances to be created.
16 * @return A list of new stores with the given number of elements.
17 */
18 List<VersionedMapStore<K, V>> createGroup(int amount);
19}
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreFactoryBuilder.java b/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreFactoryBuilder.java
new file mode 100644
index 00000000..9cf17b49
--- /dev/null
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreFactoryBuilder.java
@@ -0,0 +1,24 @@
1package tools.refinery.store.map;
2
3public interface VersionedMapStoreFactoryBuilder<K,V> {
4 enum StoreStrategy {
5 STATE, DELTA
6 }
7
8 enum DeltaTransactionStrategy {
9 LIST, SET
10 }
11
12 enum SharingStrategy {
13 NO_NODE_CACHE, SHARED_NODE_CACHE, SHARED_NODE_CACHE_IN_GROUP
14 }
15
16 VersionedMapStoreFactoryBuilder<K,V> defaultValue(V defaultValue);
17 VersionedMapStoreFactoryBuilder<K,V> strategy(StoreStrategy strategy);
18 VersionedMapStoreFactoryBuilder<K,V> stateBasedImmutableWhenCommitting(boolean transformToImmutable);
19 VersionedMapStoreFactoryBuilder<K,V> stateBasedSharingStrategy(SharingStrategy sharingStrategy);
20 VersionedMapStoreFactoryBuilder<K,V> stateBasedHashProvider(ContinousHashProvider<K> hashProvider);
21 VersionedMapStoreFactoryBuilder<K,V> deltaTransactionStrategy(DeltaTransactionStrategy deltaStrategy);
22
23 VersionedMapStoreFactory<K,V> build();
24}
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/DeltaBasedVersionedMapStoreFactory.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/DeltaBasedVersionedMapStoreFactory.java
new file mode 100644
index 00000000..29ec0da1
--- /dev/null
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/DeltaBasedVersionedMapStoreFactory.java
@@ -0,0 +1,34 @@
1package tools.refinery.store.map.internal;
2
3import tools.refinery.store.map.VersionedMapStore;
4import tools.refinery.store.map.VersionedMapStoreDeltaImpl;
5import tools.refinery.store.map.VersionedMapStoreFactory;
6import tools.refinery.store.map.VersionedMapStoreFactoryBuilder;
7
8import java.util.ArrayList;
9import java.util.List;
10
11public class DeltaBasedVersionedMapStoreFactory<K, V> implements VersionedMapStoreFactory<K, V> {
12 private final V defaultValue;
13 private final boolean summarizeChanges;
14
15 public DeltaBasedVersionedMapStoreFactory(V defaultValue,
16 VersionedMapStoreFactoryBuilder.DeltaTransactionStrategy deltaTransactionStrategy) {
17 this.defaultValue = defaultValue;
18 this.summarizeChanges = deltaTransactionStrategy == VersionedMapStoreFactoryBuilder.DeltaTransactionStrategy.SET;
19 }
20
21 @Override
22 public VersionedMapStore<K, V> createOne() {
23 return new VersionedMapStoreDeltaImpl<>(summarizeChanges, defaultValue);
24 }
25
26 @Override
27 public List<VersionedMapStore<K, V>> createGroup(int amount) {
28 List<VersionedMapStore<K, V>> result = new ArrayList<>(amount);
29 for(int i=0; i<amount; i++) {
30 result.add(new VersionedMapStoreDeltaImpl<>(summarizeChanges,defaultValue));
31 }
32 return result;
33 }
34}
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/StateBasedVersionedMapStoreFactory.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/StateBasedVersionedMapStoreFactory.java
new file mode 100644
index 00000000..80dc347f
--- /dev/null
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/StateBasedVersionedMapStoreFactory.java
@@ -0,0 +1,33 @@
1package tools.refinery.store.map.internal;
2
3import tools.refinery.store.map.*;
4
5import java.util.List;
6
7public class StateBasedVersionedMapStoreFactory<K, V> implements VersionedMapStoreFactory<K, V> {
8 private final V defaultValue;
9 private final ContinousHashProvider<K> continousHashProvider;
10 private final VersionedMapStoreConfiguration config;
11
12 public StateBasedVersionedMapStoreFactory(V defaultValue, Boolean transformToImmutable, VersionedMapStoreFactoryBuilder.SharingStrategy sharingStrategy, ContinousHashProvider<K> continousHashProvider) {
13 this.defaultValue = defaultValue;
14 this.continousHashProvider = continousHashProvider;
15
16 this.config = new VersionedMapStoreConfiguration(
17 transformToImmutable,
18 sharingStrategy == VersionedMapStoreFactoryBuilder.SharingStrategy.SHARED_NODE_CACHE || sharingStrategy == VersionedMapStoreFactoryBuilder.SharingStrategy.SHARED_NODE_CACHE_IN_GROUP,
19 sharingStrategy == VersionedMapStoreFactoryBuilder.SharingStrategy.SHARED_NODE_CACHE_IN_GROUP);
20 }
21
22 @Override
23 public VersionedMapStore<K, V> createOne() {
24 return new VersionedMapStoreImpl<>(continousHashProvider, defaultValue, config);
25
26 }
27
28 @Override
29 public List<VersionedMapStore<K, V>> createGroup(int amount) {
30 return VersionedMapStoreImpl.createSharedVersionedMapStores(amount, continousHashProvider, defaultValue,
31 config);
32 }
33}
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/VersionedMapStoreFactoryBuilderImpl.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/VersionedMapStoreFactoryBuilderImpl.java
new file mode 100644
index 00000000..3719eef5
--- /dev/null
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/VersionedMapStoreFactoryBuilderImpl.java
@@ -0,0 +1,132 @@
1package tools.refinery.store.map.internal;
2
3import tools.refinery.store.map.ContinousHashProvider;
4import tools.refinery.store.map.VersionedMapStoreFactory;
5import tools.refinery.store.map.VersionedMapStoreFactoryBuilder;
6
7public class VersionedMapStoreFactoryBuilderImpl<K, V> implements VersionedMapStoreFactoryBuilder<K, V> {
8
9 private boolean defaultSet = false;
10 private V defaultValue;
11 private StoreStrategy strategy = null;
12 private Boolean transformToImmutable = null;
13 private SharingStrategy sharingStrategy = null;
14 private ContinousHashProvider<K> continousHashProvider = null;
15 private DeltaTransactionStrategy deltaTransactionStrategy = null;
16
17 private StoreStrategy checkStrategy() {
18 StoreStrategy currentStrategy = strategy;
19 currentStrategy = mergeStrategies(currentStrategy, transformToImmutable, StoreStrategy.STATE);
20 currentStrategy = mergeStrategies(currentStrategy, sharingStrategy, StoreStrategy.STATE);
21 currentStrategy = mergeStrategies(currentStrategy, continousHashProvider, StoreStrategy.STATE);
22 currentStrategy = mergeStrategies(currentStrategy, deltaTransactionStrategy, StoreStrategy.DELTA);
23 return currentStrategy;
24 }
25
26 private StoreStrategy mergeStrategies(StoreStrategy old, StoreStrategy newStrategy) {
27 if (old != null && newStrategy != null && old != newStrategy) {
28 throw new IllegalArgumentException("Mixed strategy parametrization in VersionedMap builder!");
29 }
30
31 if (old != null) {
32 return old;
33 } else {
34 return newStrategy;
35 }
36 }
37
38 private StoreStrategy mergeStrategies(StoreStrategy old, Object parameter, StoreStrategy newStrategy) {
39 if (parameter != null) {
40 return mergeStrategies(old, newStrategy);
41 } else {
42 return old;
43 }
44 }
45
46 @Override
47 public VersionedMapStoreFactoryBuilder<K, V> defaultValue(V defaultValue) {
48 this.defaultSet = true;
49 this.defaultValue = defaultValue;
50 return this;
51 }
52
53 @Override
54 public VersionedMapStoreFactoryBuilder<K, V> strategy(StoreStrategy strategy) {
55 this.strategy = strategy;
56 checkStrategy();
57 return this;
58 }
59
60 @Override
61 public VersionedMapStoreFactoryBuilder<K, V> stateBasedImmutableWhenCommitting(boolean transformToImmutable) {
62 this.transformToImmutable = transformToImmutable;
63 checkStrategy();
64 return this;
65 }
66
67 @Override
68 public VersionedMapStoreFactoryBuilder<K, V> stateBasedSharingStrategy(SharingStrategy sharingStrategy) {
69 this.sharingStrategy = sharingStrategy;
70 checkStrategy();
71 return this;
72 }
73
74 @Override
75 public VersionedMapStoreFactoryBuilder<K, V> stateBasedHashProvider(ContinousHashProvider<K> hashProvider) {
76 this.continousHashProvider = hashProvider;
77 checkStrategy();
78 return this;
79 }
80
81 @Override
82 public VersionedMapStoreFactoryBuilder<K, V> deltaTransactionStrategy(DeltaTransactionStrategy deltaTransactionStrategy) {
83 this.deltaTransactionStrategy = deltaTransactionStrategy;
84 checkStrategy();
85 return this;
86 }
87
88 private <T> T getOrDefault(T value, T defaultValue) {
89 if(value != null) {
90 return value;
91 } else {
92 return defaultValue;
93 }
94 }
95
96 @Override
97 public VersionedMapStoreFactory<K, V> build() {
98 if (!defaultSet) {
99 throw new IllegalArgumentException("Default value is missing!");
100 }
101 var strategyToUse = checkStrategy();
102 if (strategyToUse == null) {
103 return new DeltaBasedVersionedMapStoreFactory<>(defaultValue,
104 getOrDefault(deltaTransactionStrategy, DeltaTransactionStrategy.LIST));
105 }
106 return switch (strategyToUse) {
107 case STATE -> {
108 if(continousHashProvider == null) {
109 throw new IllegalArgumentException("Continuous hash provider is missing!");
110 }
111 yield new StateBasedVersionedMapStoreFactory<>(defaultValue,
112 getOrDefault(transformToImmutable,true),
113 getOrDefault(sharingStrategy, SharingStrategy.SHARED_NODE_CACHE_IN_GROUP),
114 continousHashProvider);
115 }
116 case DELTA -> new DeltaBasedVersionedMapStoreFactory<>(defaultValue,
117 getOrDefault(deltaTransactionStrategy, DeltaTransactionStrategy.LIST));
118 };
119 }
120
121 @Override
122 public String toString() {
123 return "VersionedMapStoreBuilder{" +
124 "defaultValue=" + defaultValue +
125 ", strategy=" + strategy +
126 ", stateBasedImmutableWhenCommitting=" + transformToImmutable +
127 ", stateBasedNodeSharingStrategy=" + sharingStrategy +
128 ", hashProvider=" + continousHashProvider +
129 ", deltaStorageStrategy=" + deltaTransactionStrategy +
130 '}';
131 }
132}
diff --git a/subprojects/store/src/test/java/tools/refinery/store/map/tests/InOrderCursorTest.java b/subprojects/store/src/test/java/tools/refinery/store/map/tests/InOrderCursorTest.java
index 05cf5a74..993e5531 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/map/tests/InOrderCursorTest.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/map/tests/InOrderCursorTest.java
@@ -1,7 +1,8 @@
1package tools.refinery.store.map.tests; 1package tools.refinery.store.map.tests;
2 2
3import org.junit.jupiter.api.Test; 3import org.junit.jupiter.api.Test;
4import tools.refinery.store.map.VersionedMapStoreBuilder; 4import tools.refinery.store.map.VersionedMapStore;
5import tools.refinery.store.map.VersionedMapStoreFactoryBuilder;
5import tools.refinery.store.map.internal.InOrderMapCursor; 6import tools.refinery.store.map.internal.InOrderMapCursor;
6import tools.refinery.store.map.internal.VersionedMapImpl; 7import tools.refinery.store.map.internal.VersionedMapImpl;
7import tools.refinery.store.map.tests.utils.MapTestEnvironment; 8import tools.refinery.store.map.tests.utils.MapTestEnvironment;
@@ -11,13 +12,14 @@ import static org.junit.jupiter.api.Assertions.*;
11class InOrderCursorTest { 12class InOrderCursorTest {
12 @Test 13 @Test
13 void testCursor() { 14 void testCursor() {
14 var store = VersionedMapStoreBuilder.<Integer,String>builder() 15 var store = VersionedMapStore.<Integer,String>builder()
15 .setStrategy(VersionedMapStoreBuilder.StoreStrategy.STATE) 16 .strategy(VersionedMapStoreFactoryBuilder.StoreStrategy.STATE)
16 .setStateBasedImmutableWhenCommitting(true) 17 .stateBasedImmutableWhenCommitting(true)
17 .setHashProvider(MapTestEnvironment.prepareHashProvider(false)) 18 .stateBasedHashProvider(MapTestEnvironment.prepareHashProvider(false))
18 .setStateBasedNodeSharingStrategy(VersionedMapStoreBuilder.StateStorageStrategy.SHARED_NODE_CACHE) 19 .stateBasedSharingStrategy(VersionedMapStoreFactoryBuilder.SharingStrategy.SHARED_NODE_CACHE)
19 .setDefaultValue("x") 20 .defaultValue("x")
20 .buildOne(); 21 .build()
22 .createOne();
21 23
22 VersionedMapImpl<Integer,String> map = (VersionedMapImpl<Integer,String>) store.createMap(); 24 VersionedMapImpl<Integer,String> map = (VersionedMapImpl<Integer,String>) store.createMap();
23 checkMove(map,0); 25 checkMove(map,0);
diff --git a/subprojects/store/src/test/java/tools/refinery/store/map/tests/MapUnitTests.java b/subprojects/store/src/test/java/tools/refinery/store/map/tests/MapUnitTests.java
index 2216db76..6889fd07 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/map/tests/MapUnitTests.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/map/tests/MapUnitTests.java
@@ -2,7 +2,6 @@ package tools.refinery.store.map.tests;
2 2
3import org.junit.jupiter.api.Test; 3import org.junit.jupiter.api.Test;
4import tools.refinery.store.map.VersionedMapStore; 4import tools.refinery.store.map.VersionedMapStore;
5import tools.refinery.store.map.VersionedMapStoreBuilder;
6import tools.refinery.store.map.VersionedMapStoreImpl; 5import tools.refinery.store.map.VersionedMapStoreImpl;
7import tools.refinery.store.model.TupleHashProvider; 6import tools.refinery.store.model.TupleHashProvider;
8import tools.refinery.store.tuple.Tuple; 7import tools.refinery.store.tuple.Tuple;
@@ -23,7 +22,7 @@ class MapUnitTests {
23 @Test 22 @Test
24 void deltaRestoreTest() { 23 void deltaRestoreTest() {
25 VersionedMapStore<Integer,String> store = 24 VersionedMapStore<Integer,String> store =
26 VersionedMapStoreBuilder.<Integer,String>builder().setDefaultValue("x").buildOne(); 25 VersionedMapStore.<Integer,String>builder().defaultValue("x").build().createOne();
27 var map = store.createMap(); 26 var map = store.createMap();
28 map.put(1,"val"); 27 map.put(1,"val");
29 var version1 = map.commit(); 28 var version1 = map.commit();
@@ -36,7 +35,7 @@ class MapUnitTests {
36 @Test 35 @Test
37 void deltaRestoreTest2() { 36 void deltaRestoreTest2() {
38 VersionedMapStore<Integer,String> store = 37 VersionedMapStore<Integer,String> store =
39 VersionedMapStoreBuilder.<Integer,String>builder().setDefaultValue("x").buildOne(); 38 VersionedMapStore.<Integer,String>builder().defaultValue("x").build().createOne();
40 var map = store.createMap(); 39 var map = store.createMap();
41 map.put(1,"x"); 40 map.put(1,"x");
42 var version1 = map.commit(); 41 var version1 = map.commit();
@@ -48,7 +47,7 @@ class MapUnitTests {
48 @Test 47 @Test
49 void deltaRestoreTest3() { 48 void deltaRestoreTest3() {
50 VersionedMapStore<Integer,String> store = 49 VersionedMapStore<Integer,String> store =
51 VersionedMapStoreBuilder.<Integer,String>builder().setDefaultValue("x").buildOne(); 50 VersionedMapStore.<Integer,String>builder().defaultValue("x").build().createOne();
52 var map = store.createMap(); 51 var map = store.createMap();
53 map.commit(); 52 map.commit();
54 map.put(1,"1"); 53 map.put(1,"1");
@@ -71,7 +70,7 @@ class MapUnitTests {
71 @Test 70 @Test
72 void deltaRestoreTest4() { 71 void deltaRestoreTest4() {
73 VersionedMapStore<Integer,String> store = 72 VersionedMapStore<Integer,String> store =
74 VersionedMapStoreBuilder.<Integer,String>builder().setDefaultValue("x").buildOne(); 73 VersionedMapStore.<Integer,String>builder().defaultValue("x").build().createOne();
75 var map = store.createMap(); 74 var map = store.createMap();
76 map.commit(); 75 map.commit();
77 map.put(1,"1"); 76 map.put(1,"1");
diff --git a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/CommitFuzzTest.java b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/CommitFuzzTest.java
index 14a9e2e0..7977f772 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/CommitFuzzTest.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/CommitFuzzTest.java
@@ -1,30 +1,29 @@
1package tools.refinery.store.map.tests.fuzz; 1package tools.refinery.store.map.tests.fuzz;
2 2
3import static org.junit.jupiter.api.Assertions.fail;
4
5import java.util.Random;
6import java.util.stream.Stream;
7
8import org.junit.jupiter.api.Tag; 3import org.junit.jupiter.api.Tag;
9import org.junit.jupiter.api.Timeout; 4import org.junit.jupiter.api.Timeout;
10import org.junit.jupiter.params.ParameterizedTest; 5import org.junit.jupiter.params.ParameterizedTest;
11import org.junit.jupiter.params.provider.Arguments; 6import org.junit.jupiter.params.provider.Arguments;
12import org.junit.jupiter.params.provider.MethodSource; 7import org.junit.jupiter.params.provider.MethodSource;
13
14import tools.refinery.store.map.VersionedMapStore; 8import tools.refinery.store.map.VersionedMapStore;
15import tools.refinery.store.map.VersionedMapStoreBuilder; 9import tools.refinery.store.map.VersionedMapStoreFactoryBuilder;
16import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils; 10import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils;
17import tools.refinery.store.map.tests.utils.MapTestEnvironment; 11import tools.refinery.store.map.tests.utils.MapTestEnvironment;
18 12
13import java.util.Random;
14import java.util.stream.Stream;
15
16import static org.junit.jupiter.api.Assertions.fail;
19import static tools.refinery.store.map.tests.fuzz.utils.FuzzTestCollections.*; 17import static tools.refinery.store.map.tests.fuzz.utils.FuzzTestCollections.*;
20 18
21class CommitFuzzTest { 19class CommitFuzzTest {
22 20
23 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue, 21 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue,
24 boolean nullDefault, int commitFrequency, VersionedMapStoreBuilder<Integer, String> builder) { 22 boolean nullDefault, int commitFrequency,
23 VersionedMapStoreFactoryBuilder<Integer, String> builder) {
25 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault); 24 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault);
26 25
27 VersionedMapStore<Integer, String> store = builder.setDefaultValue(values[0]).buildOne(); 26 VersionedMapStore<Integer, String> store = builder.defaultValue(values[0]).build().createOne();
28 var sut = store.createMap(); 27 var sut = store.createMap();
29 MapTestEnvironment<Integer, String> e = new MapTestEnvironment<>(sut); 28 MapTestEnvironment<Integer, String> e = new MapTestEnvironment<>(sut);
30 29
@@ -61,7 +60,7 @@ class CommitFuzzTest {
61 @Timeout(value = 10) 60 @Timeout(value = 10)
62 @Tag("fuzz") 61 @Tag("fuzz")
63 void parametrizedFastFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, int commitFrequency, 62 void parametrizedFastFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, int commitFrequency,
64 int seed, VersionedMapStoreBuilder<Integer, String> builder) { 63 int seed, VersionedMapStoreFactoryBuilder<Integer, String> builder) {
65 runFuzzTest("CommitS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues, 64 runFuzzTest("CommitS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues,
66 nullDefault, commitFrequency, builder); 65 nullDefault, commitFrequency, builder);
67 } 66 }
@@ -76,7 +75,7 @@ class CommitFuzzTest {
76 @Tag("fuzz") 75 @Tag("fuzz")
77 @Tag("slow") 76 @Tag("slow")
78 void parametrizedSlowFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, int commitFrequency, 77 void parametrizedSlowFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, int commitFrequency,
79 int seed, VersionedMapStoreBuilder<Integer, String> builder) { 78 int seed, VersionedMapStoreFactoryBuilder<Integer, String> builder) {
80 runFuzzTest("CommitS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues, 79 runFuzzTest("CommitS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues,
81 nullDefault, commitFrequency, builder); 80 nullDefault, commitFrequency, builder);
82 } 81 }
diff --git a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/ContentEqualsFuzzTest.java b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/ContentEqualsFuzzTest.java
index b462ed40..99e76649 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/ContentEqualsFuzzTest.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/ContentEqualsFuzzTest.java
@@ -5,7 +5,10 @@ import org.junit.jupiter.api.Timeout;
5import org.junit.jupiter.params.ParameterizedTest; 5import org.junit.jupiter.params.ParameterizedTest;
6import org.junit.jupiter.params.provider.Arguments; 6import org.junit.jupiter.params.provider.Arguments;
7import org.junit.jupiter.params.provider.MethodSource; 7import org.junit.jupiter.params.provider.MethodSource;
8import tools.refinery.store.map.*; 8import tools.refinery.store.map.Cursor;
9import tools.refinery.store.map.VersionedMap;
10import tools.refinery.store.map.VersionedMapStore;
11import tools.refinery.store.map.VersionedMapStoreFactoryBuilder;
9import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils; 12import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils;
10import tools.refinery.store.map.tests.utils.MapTestEnvironment; 13import tools.refinery.store.map.tests.utils.MapTestEnvironment;
11 14
@@ -16,12 +19,13 @@ import java.util.List;
16import java.util.Random; 19import java.util.Random;
17import java.util.stream.Stream; 20import java.util.stream.Stream;
18 21
19import static org.junit.jupiter.api.Assertions.*; 22import static org.junit.jupiter.api.Assertions.fail;
20import static tools.refinery.store.map.tests.fuzz.utils.FuzzTestCollections.*; 23import static tools.refinery.store.map.tests.fuzz.utils.FuzzTestCollections.*;
21 24
22class ContentEqualsFuzzTest { 25class ContentEqualsFuzzTest {
23 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue, 26 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue,
24 boolean nullDefault, int commitFrequency, VersionedMapStoreBuilder<Integer, String> builder) { 27 boolean nullDefault, int commitFrequency,
28 VersionedMapStoreFactoryBuilder<Integer, String> builder) {
25 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault); 29 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault);
26 30
27 31
@@ -30,10 +34,10 @@ class ContentEqualsFuzzTest {
30 iterativeRandomPutsAndCommitsThenCompare(scenario, builder, steps, maxKey, values, r, commitFrequency); 34 iterativeRandomPutsAndCommitsThenCompare(scenario, builder, steps, maxKey, values, r, commitFrequency);
31 } 35 }
32 36
33 private void iterativeRandomPutsAndCommitsThenCompare(String scenario, VersionedMapStoreBuilder<Integer, String> builder, 37 private void iterativeRandomPutsAndCommitsThenCompare(String scenario, VersionedMapStoreFactoryBuilder<Integer, String> builder,
34 int steps, int maxKey, String[] values, Random r, 38 int steps, int maxKey, String[] values, Random r,
35 int commitFrequency) { 39 int commitFrequency) {
36 VersionedMapStore<Integer, String> store1 = builder.setDefaultValue(values[0]).buildOne(); 40 VersionedMapStore<Integer, String> store1 = builder.defaultValue(values[0]).build().createOne();
37 VersionedMap<Integer, String> sut1 = store1.createMap(); 41 VersionedMap<Integer, String> sut1 = store1.createMap();
38 42
39 // Fill one map 43 // Fill one map
@@ -63,7 +67,7 @@ class ContentEqualsFuzzTest {
63 // Randomize the order of the content 67 // Randomize the order of the content
64 Collections.shuffle(content, r); 68 Collections.shuffle(content, r);
65 69
66 VersionedMapStore<Integer, String> store2 = builder.setDefaultValue(values[0]).buildOne(); 70 VersionedMapStore<Integer, String> store2 = builder.defaultValue(values[0]).build().createOne();
67 VersionedMap<Integer, String> sut2 = store2.createMap(); 71 VersionedMap<Integer, String> sut2 = store2.createMap();
68 int index2 = 1; 72 int index2 = 1;
69 for (SimpleEntry<Integer, String> entry : content) { 73 for (SimpleEntry<Integer, String> entry : content) {
@@ -88,7 +92,7 @@ class ContentEqualsFuzzTest {
88 @Timeout(value = 10) 92 @Timeout(value = 10)
89 @Tag("fuzz") 93 @Tag("fuzz")
90 void parametrizedFastFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, int commitFrequency, 94 void parametrizedFastFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, int commitFrequency,
91 int seed, VersionedMapStoreBuilder<Integer, String> builder) { 95 int seed, VersionedMapStoreFactoryBuilder<Integer, String> builder) {
92 runFuzzTest("CompareS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues, 96 runFuzzTest("CompareS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues,
93 nullDefault, commitFrequency, builder); 97 nullDefault, commitFrequency, builder);
94 } 98 }
@@ -103,7 +107,7 @@ class ContentEqualsFuzzTest {
103 @Tag("fuzz") 107 @Tag("fuzz")
104 @Tag("slow") 108 @Tag("slow")
105 void parametrizedSlowFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean defaultNull, int commitFrequency, 109 void parametrizedSlowFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean defaultNull, int commitFrequency,
106 int seed, VersionedMapStoreBuilder<Integer, String> builder) { 110 int seed, VersionedMapStoreFactoryBuilder<Integer, String> builder) {
107 runFuzzTest("CompareS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues, 111 runFuzzTest("CompareS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues,
108 defaultNull, commitFrequency, builder); 112 defaultNull, commitFrequency, builder);
109 } 113 }
diff --git a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/DiffCursorFuzzTest.java b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/DiffCursorFuzzTest.java
index b087906d..3a8852a9 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/DiffCursorFuzzTest.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/DiffCursorFuzzTest.java
@@ -8,7 +8,7 @@ import org.junit.jupiter.params.provider.MethodSource;
8import tools.refinery.store.map.DiffCursor; 8import tools.refinery.store.map.DiffCursor;
9import tools.refinery.store.map.VersionedMap; 9import tools.refinery.store.map.VersionedMap;
10import tools.refinery.store.map.VersionedMapStore; 10import tools.refinery.store.map.VersionedMapStore;
11import tools.refinery.store.map.VersionedMapStoreBuilder; 11import tools.refinery.store.map.VersionedMapStoreFactoryBuilder;
12import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils; 12import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils;
13import tools.refinery.store.map.tests.utils.MapTestEnvironment; 13import tools.refinery.store.map.tests.utils.MapTestEnvironment;
14 14
@@ -21,10 +21,10 @@ import static tools.refinery.store.map.tests.fuzz.utils.FuzzTestCollections.*;
21class DiffCursorFuzzTest { 21class DiffCursorFuzzTest {
22 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue, boolean nullDefault, 22 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue, boolean nullDefault,
23 int commitFrequency, boolean commitBeforeDiffCursor, 23 int commitFrequency, boolean commitBeforeDiffCursor,
24 VersionedMapStoreBuilder<Integer, String> builder) { 24 VersionedMapStoreFactoryBuilder<Integer, String> builder) {
25 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault); 25 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault);
26 26
27 VersionedMapStore<Integer, String> store = builder.setDefaultValue(values[0]).buildOne(); 27 VersionedMapStore<Integer, String> store = builder.defaultValue(values[0]).build().createOne();
28 iterativeRandomPutsAndCommitsThenDiffCursor(scenario, store, steps, maxKey, values, seed, commitFrequency, 28 iterativeRandomPutsAndCommitsThenDiffCursor(scenario, store, steps, maxKey, values, seed, commitFrequency,
29 commitBeforeDiffCursor); 29 commitBeforeDiffCursor);
30 } 30 }
@@ -109,7 +109,7 @@ class DiffCursorFuzzTest {
109 @Tag("fuzz") 109 @Tag("fuzz")
110 void parametrizedFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, 110 void parametrizedFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault,
111 int commitFrequency, int seed, boolean commitBeforeDiffCursor, 111 int commitFrequency, int seed, boolean commitBeforeDiffCursor,
112 VersionedMapStoreBuilder<Integer, String> builder) { 112 VersionedMapStoreFactoryBuilder<Integer, String> builder) {
113 runFuzzTest("DiffCursorS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, 113 runFuzzTest("DiffCursorS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps,
114 noKeys, noValues, nullDefault, commitFrequency, commitBeforeDiffCursor, builder); 114 noKeys, noValues, nullDefault, commitFrequency, commitBeforeDiffCursor, builder);
115 } 115 }
@@ -124,7 +124,7 @@ class DiffCursorFuzzTest {
124 @Tag("fuzz") 124 @Tag("fuzz")
125 @Tag("slow") 125 @Tag("slow")
126 void parametrizedSlowFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, int commitFrequency, 126 void parametrizedSlowFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, int commitFrequency,
127 int seed, boolean commitBeforeDiffCursor, VersionedMapStoreBuilder<Integer, String> builder) { 127 int seed, boolean commitBeforeDiffCursor, VersionedMapStoreFactoryBuilder<Integer, String> builder) {
128 runFuzzTest("DiffCursorS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues, 128 runFuzzTest("DiffCursorS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues,
129 nullDefault, commitFrequency, commitBeforeDiffCursor, builder); 129 nullDefault, commitFrequency, commitBeforeDiffCursor, builder);
130 } 130 }
diff --git a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/MultiThreadFuzzTest.java b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/MultiThreadFuzzTest.java
index ec2224b4..ea58e1b7 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/MultiThreadFuzzTest.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/MultiThreadFuzzTest.java
@@ -1,32 +1,31 @@
1package tools.refinery.store.map.tests.fuzz; 1package tools.refinery.store.map.tests.fuzz;
2 2
3import static org.junit.jupiter.api.Assertions.assertEquals;
4import static org.junit.jupiter.api.Assertions.fail;
5import static tools.refinery.store.map.tests.fuzz.utils.FuzzTestCollections.*;
6
7import java.util.Collections;
8import java.util.LinkedList;
9import java.util.List;
10import java.util.stream.Stream;
11
12import org.junit.jupiter.api.Tag; 3import org.junit.jupiter.api.Tag;
13import org.junit.jupiter.api.Timeout; 4import org.junit.jupiter.api.Timeout;
14import org.junit.jupiter.params.ParameterizedTest; 5import org.junit.jupiter.params.ParameterizedTest;
15import org.junit.jupiter.params.provider.Arguments; 6import org.junit.jupiter.params.provider.Arguments;
16import org.junit.jupiter.params.provider.MethodSource; 7import org.junit.jupiter.params.provider.MethodSource;
17
18import tools.refinery.store.map.VersionedMapStore; 8import tools.refinery.store.map.VersionedMapStore;
19import tools.refinery.store.map.VersionedMapStoreBuilder; 9import tools.refinery.store.map.VersionedMapStoreFactoryBuilder;
20import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils; 10import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils;
21import tools.refinery.store.map.tests.utils.MapTestEnvironment; 11import tools.refinery.store.map.tests.utils.MapTestEnvironment;
22 12
13import java.util.Collections;
14import java.util.LinkedList;
15import java.util.List;
16import java.util.stream.Stream;
17
18import static org.junit.jupiter.api.Assertions.assertEquals;
19import static org.junit.jupiter.api.Assertions.fail;
20import static tools.refinery.store.map.tests.fuzz.utils.FuzzTestCollections.*;
21
23class MultiThreadFuzzTest { 22class MultiThreadFuzzTest {
24 public static final int noThreads = 10; 23 public static final int noThreads = 10;
25 24
26 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue, boolean nullDefault, int commitFrequency, VersionedMapStoreBuilder<Integer, String> builder) { 25 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue, boolean nullDefault, int commitFrequency, VersionedMapStoreFactoryBuilder<Integer, String> builder) {
27 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault); 26 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault);
28 27
29 VersionedMapStore<Integer, String> store = builder.setDefaultValue(values[0]).buildOne(); 28 VersionedMapStore<Integer, String> store = builder.defaultValue(values[0]).build().createOne();
30 29
31 // initialize runnables 30 // initialize runnables
32 MultiThreadTestRunnable[] runnables = new MultiThreadTestRunnable[noThreads]; 31 MultiThreadTestRunnable[] runnables = new MultiThreadTestRunnable[noThreads];
@@ -73,7 +72,7 @@ class MultiThreadFuzzTest {
73 @Timeout(value = 10) 72 @Timeout(value = 10)
74 @Tag("fuzz") 73 @Tag("fuzz")
75 void parametrizedFastFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean defaultNull, 74 void parametrizedFastFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean defaultNull,
76 int commitFrequency, int seed, VersionedMapStoreBuilder<Integer, String> builder) { 75 int commitFrequency, int seed, VersionedMapStoreFactoryBuilder<Integer, String> builder) {
77 runFuzzTest("MultiThreadS" + steps + "K" + noKeys + "V" + noValues + defaultNull + "CF" + commitFrequency + 76 runFuzzTest("MultiThreadS" + steps + "K" + noKeys + "V" + noValues + defaultNull + "CF" + commitFrequency +
78 "s" + seed, seed, steps, noKeys, noValues, defaultNull, commitFrequency, builder); 77 "s" + seed, seed, steps, noKeys, noValues, defaultNull, commitFrequency, builder);
79 } 78 }
@@ -88,7 +87,7 @@ class MultiThreadFuzzTest {
88 @Tag("fuzz") 87 @Tag("fuzz")
89 @Tag("slow") 88 @Tag("slow")
90 void parametrizedSlowFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, 89 void parametrizedSlowFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault,
91 int commitFrequency, int seed, VersionedMapStoreBuilder<Integer, String> builder) { 90 int commitFrequency, int seed, VersionedMapStoreFactoryBuilder<Integer, String> builder) {
92 runFuzzTest("RestoreS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues, 91 runFuzzTest("RestoreS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues,
93 nullDefault, commitFrequency, builder); 92 nullDefault, commitFrequency, builder);
94 } 93 }
diff --git a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/MutableFuzzTest.java b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/MutableFuzzTest.java
index bdf72ce4..61b17362 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/MutableFuzzTest.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/MutableFuzzTest.java
@@ -18,10 +18,10 @@ import tools.refinery.store.map.tests.utils.MapTestEnvironment;
18 18
19class MutableFuzzTest { 19class MutableFuzzTest {
20 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue, 20 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue,
21 boolean nullDefault, VersionedMapStoreBuilder<Integer, String> builder) { 21 boolean nullDefault, VersionedMapStoreFactoryBuilder<Integer, String> builder) {
22 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault); 22 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault);
23 23
24 VersionedMapStore<Integer, String> store = builder.setDefaultValue(values[0]).buildOne(); 24 VersionedMapStore<Integer, String> store = builder.defaultValue(values[0]).build().createOne();
25 VersionedMap<Integer, String> sut = store.createMap(); 25 VersionedMap<Integer, String> sut = store.createMap();
26 MapTestEnvironment<Integer, String> e = new MapTestEnvironment<>(sut); 26 MapTestEnvironment<Integer, String> e = new MapTestEnvironment<>(sut);
27 27
@@ -56,7 +56,7 @@ class MutableFuzzTest {
56 @Timeout(value = 10) 56 @Timeout(value = 10)
57 @Tag("fuzz") 57 @Tag("fuzz")
58 void parametrizedFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean defaultNull, int seed, 58 void parametrizedFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean defaultNull, int seed,
59 VersionedMapStoreBuilder<Integer, String> builder) { 59 VersionedMapStoreFactoryBuilder<Integer, String> builder) {
60 runFuzzTest( 60 runFuzzTest(
61 "MutableS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, 61 "MutableS" + steps + "K" + noKeys + "V" + noValues + "s" + seed,
62 seed, steps, noKeys, noValues, defaultNull, builder); 62 seed, steps, noKeys, noValues, defaultNull, builder);
@@ -72,7 +72,7 @@ class MutableFuzzTest {
72 @Tag("fuzz") 72 @Tag("fuzz")
73 @Tag("slow") 73 @Tag("slow")
74 void parametrizedSlowFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, int seed, 74 void parametrizedSlowFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, int seed,
75 VersionedMapStoreBuilder<Integer, String> builder) { 75 VersionedMapStoreFactoryBuilder<Integer, String> builder) {
76 runFuzzTest( 76 runFuzzTest(
77 "MutableS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, 77 "MutableS" + steps + "K" + noKeys + "V" + noValues + "s" + seed,
78 seed, steps, noKeys, noValues, nullDefault, builder); 78 seed, steps, noKeys, noValues, nullDefault, builder);
diff --git a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/RestoreFuzzTest.java b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/RestoreFuzzTest.java
index 568aaac9..1661cccb 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/RestoreFuzzTest.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/RestoreFuzzTest.java
@@ -1,31 +1,31 @@
1package tools.refinery.store.map.tests.fuzz; 1package tools.refinery.store.map.tests.fuzz;
2 2
3import static org.junit.jupiter.api.Assertions.fail;
4import static tools.refinery.store.map.tests.fuzz.utils.FuzzTestCollections.*;
5
6import java.util.HashMap;
7import java.util.Map;
8import java.util.Random;
9import java.util.stream.Stream;
10
11import org.junit.jupiter.api.Tag; 3import org.junit.jupiter.api.Tag;
12import org.junit.jupiter.api.Timeout; 4import org.junit.jupiter.api.Timeout;
13import org.junit.jupiter.params.ParameterizedTest; 5import org.junit.jupiter.params.ParameterizedTest;
14import org.junit.jupiter.params.provider.Arguments; 6import org.junit.jupiter.params.provider.Arguments;
15import org.junit.jupiter.params.provider.MethodSource; 7import org.junit.jupiter.params.provider.MethodSource;
16 8import tools.refinery.store.map.VersionedMap;
17import tools.refinery.store.map.*; 9import tools.refinery.store.map.VersionedMapStore;
18import tools.refinery.store.map.internal.VersionedMapImpl; 10import tools.refinery.store.map.VersionedMapStoreFactoryBuilder;
19import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils; 11import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils;
20import tools.refinery.store.map.tests.utils.MapTestEnvironment; 12import tools.refinery.store.map.tests.utils.MapTestEnvironment;
21 13
14import java.util.HashMap;
15import java.util.Map;
16import java.util.Random;
17import java.util.stream.Stream;
18
19import static org.junit.jupiter.api.Assertions.fail;
20import static tools.refinery.store.map.tests.fuzz.utils.FuzzTestCollections.*;
21
22class RestoreFuzzTest { 22class RestoreFuzzTest {
23 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue, 23 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue,
24 boolean nullDefault, int commitFrequency, 24 boolean nullDefault, int commitFrequency,
25 VersionedMapStoreBuilder<Integer, String> builder) { 25 VersionedMapStoreFactoryBuilder<Integer, String> builder) {
26 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault); 26 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault);
27 27
28 VersionedMapStore<Integer, String> store = builder.setDefaultValue(values[0]).buildOne(); 28 VersionedMapStore<Integer, String> store = builder.defaultValue(values[0]).build().createOne();
29 29
30 iterativeRandomPutsAndCommitsThenRestore(scenario, store, steps, maxKey, values, seed, commitFrequency); 30 iterativeRandomPutsAndCommitsThenRestore(scenario, store, steps, maxKey, values, seed, commitFrequency);
31 } 31 }
@@ -84,7 +84,7 @@ class RestoreFuzzTest {
84 @Timeout(value = 10) 84 @Timeout(value = 10)
85 @Tag("smoke") 85 @Tag("smoke")
86 void parametrizedFastFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, int commitFrequency, 86 void parametrizedFastFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, int commitFrequency,
87 int seed, VersionedMapStoreBuilder<Integer, String> builder) { 87 int seed, VersionedMapStoreFactoryBuilder<Integer, String> builder) {
88 runFuzzTest("RestoreS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues, 88 runFuzzTest("RestoreS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues,
89 nullDefault, commitFrequency, builder); 89 nullDefault, commitFrequency, builder);
90 } 90 }
@@ -99,7 +99,7 @@ class RestoreFuzzTest {
99 @Tag("smoke") 99 @Tag("smoke")
100 @Tag("slow") 100 @Tag("slow")
101 void parametrizedSlowFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, int commitFrequency, 101 void parametrizedSlowFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, int commitFrequency,
102 int seed, VersionedMapStoreBuilder<Integer, String> builder) { 102 int seed, VersionedMapStoreFactoryBuilder<Integer, String> builder) {
103 runFuzzTest("RestoreS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues, 103 runFuzzTest("RestoreS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues,
104 nullDefault, commitFrequency, builder); 104 nullDefault, commitFrequency, builder);
105 } 105 }
diff --git a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/SingleThreadFuzzTest.java b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/SingleThreadFuzzTest.java
index e7d49227..0e1f9f9f 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/SingleThreadFuzzTest.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/SingleThreadFuzzTest.java
@@ -6,7 +6,7 @@ import org.junit.jupiter.params.ParameterizedTest;
6import org.junit.jupiter.params.provider.Arguments; 6import org.junit.jupiter.params.provider.Arguments;
7import org.junit.jupiter.params.provider.MethodSource; 7import org.junit.jupiter.params.provider.MethodSource;
8import tools.refinery.store.map.VersionedMapStore; 8import tools.refinery.store.map.VersionedMapStore;
9import tools.refinery.store.map.VersionedMapStoreBuilder; 9import tools.refinery.store.map.VersionedMapStoreFactoryBuilder;
10import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils; 10import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils;
11import tools.refinery.store.map.tests.utils.MapTestEnvironment; 11import tools.refinery.store.map.tests.utils.MapTestEnvironment;
12 12
@@ -15,10 +15,10 @@ import java.util.stream.Stream;
15import static tools.refinery.store.map.tests.fuzz.utils.FuzzTestCollections.*; 15import static tools.refinery.store.map.tests.fuzz.utils.FuzzTestCollections.*;
16 16
17class SingleThreadFuzzTest { 17class SingleThreadFuzzTest {
18 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue, boolean nullDefault, int commitFrequency, VersionedMapStoreBuilder<Integer, String> builder) { 18 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue, boolean nullDefault, int commitFrequency, VersionedMapStoreFactoryBuilder<Integer, String> builder) {
19 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault); 19 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault);
20 20
21 VersionedMapStore<Integer, String> store = builder.setDefaultValue(values[0]).buildOne(); 21 VersionedMapStore<Integer, String> store = builder.defaultValue(values[0]).build().createOne();
22 22
23 // initialize runnables 23 // initialize runnables
24 MultiThreadTestRunnable runnable = new MultiThreadTestRunnable(scenario, store, steps, maxKey, values, seed, commitFrequency); 24 MultiThreadTestRunnable runnable = new MultiThreadTestRunnable(scenario, store, steps, maxKey, values, seed, commitFrequency);
@@ -35,7 +35,7 @@ class SingleThreadFuzzTest {
35 @Timeout(value = 10) 35 @Timeout(value = 10)
36 @Tag("fuzz") 36 @Tag("fuzz")
37 void parametrizedFastFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean defaultNull, 37 void parametrizedFastFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean defaultNull,
38 int commitFrequency, int seed, VersionedMapStoreBuilder<Integer, String> builder) { 38 int commitFrequency, int seed, VersionedMapStoreFactoryBuilder<Integer, String> builder) {
39 runFuzzTest("SingleThreadS" + steps + "K" + noKeys + "V" + noValues + defaultNull + "CF" + commitFrequency + 39 runFuzzTest("SingleThreadS" + steps + "K" + noKeys + "V" + noValues + defaultNull + "CF" + commitFrequency +
40 "s" + seed, seed, steps, noKeys, noValues, defaultNull, commitFrequency, builder); 40 "s" + seed, seed, steps, noKeys, noValues, defaultNull, commitFrequency, builder);
41 } 41 }
@@ -50,7 +50,7 @@ class SingleThreadFuzzTest {
50 @Tag("fuzz") 50 @Tag("fuzz")
51 @Tag("slow") 51 @Tag("slow")
52 void parametrizedSlowFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault, 52 void parametrizedSlowFuzz(int ignoredTests, int steps, int noKeys, int noValues, boolean nullDefault,
53 int commitFrequency, int seed, VersionedMapStoreBuilder<Integer, String> builder) { 53 int commitFrequency, int seed, VersionedMapStoreFactoryBuilder<Integer, String> builder) {
54 runFuzzTest("SingleThreadS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues, 54 runFuzzTest("SingleThreadS" + steps + "K" + noKeys + "V" + noValues + "s" + seed, seed, steps, noKeys, noValues,
55 nullDefault, commitFrequency, builder); 55 nullDefault, commitFrequency, builder);
56 } 56 }
diff --git a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/utils/FuzzTestCollections.java b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/utils/FuzzTestCollections.java
index b344d9b9..94c9cba7 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/utils/FuzzTestCollections.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/utils/FuzzTestCollections.java
@@ -1,6 +1,7 @@
1package tools.refinery.store.map.tests.fuzz.utils; 1package tools.refinery.store.map.tests.fuzz.utils;
2 2
3import tools.refinery.store.map.VersionedMapStoreBuilder; 3import tools.refinery.store.map.VersionedMapStore;
4import tools.refinery.store.map.VersionedMapStoreFactoryBuilder;
4import tools.refinery.store.map.tests.utils.MapTestEnvironment; 5import tools.refinery.store.map.tests.utils.MapTestEnvironment;
5 6
6public final class FuzzTestCollections { 7public final class FuzzTestCollections {
@@ -12,34 +13,27 @@ public final class FuzzTestCollections {
12 public static final Object[] randomSeedOptions = {1}; 13 public static final Object[] randomSeedOptions = {1};
13 public static final Object[] storeConfigs = { 14 public static final Object[] storeConfigs = {
14 // State based 15 // State based
15 VersionedMapStoreBuilder.<Integer,String>builder() 16 VersionedMapStore.<Integer,String>builder()
16 .setStrategy(VersionedMapStoreBuilder.StoreStrategy.STATE) 17 .stateBasedImmutableWhenCommitting(true)
17 .setStateBasedImmutableWhenCommitting(true) 18 .stateBasedHashProvider(MapTestEnvironment.prepareHashProvider(false))
18 .setHashProvider(MapTestEnvironment.prepareHashProvider(false)) 19 .stateBasedSharingStrategy(VersionedMapStoreFactoryBuilder.SharingStrategy.SHARED_NODE_CACHE),
19 .setStateBasedNodeSharingStrategy(VersionedMapStoreBuilder.StateStorageStrategy 20 VersionedMapStore.<Integer,String>builder()
20 .SHARED_NODE_CACHE), 21 .stateBasedImmutableWhenCommitting(true)
21 VersionedMapStoreBuilder.<Integer,String>builder() 22 .stateBasedHashProvider(MapTestEnvironment.prepareHashProvider(true))
22 .setStrategy(VersionedMapStoreBuilder.StoreStrategy.STATE) 23 .stateBasedSharingStrategy(VersionedMapStoreFactoryBuilder.SharingStrategy.SHARED_NODE_CACHE),
23 .setStateBasedImmutableWhenCommitting(true) 24 VersionedMapStore.<Integer,String>builder()
24 .setHashProvider(MapTestEnvironment.prepareHashProvider(true)) 25 .stateBasedImmutableWhenCommitting(false)
25 .setStateBasedNodeSharingStrategy(VersionedMapStoreBuilder.StateStorageStrategy 26 .stateBasedHashProvider(MapTestEnvironment.prepareHashProvider(false))
26 .SHARED_NODE_CACHE), 27 .stateBasedSharingStrategy(VersionedMapStoreFactoryBuilder.SharingStrategy.SHARED_NODE_CACHE),
27 VersionedMapStoreBuilder.<Integer,String>builder() 28 VersionedMapStore.<Integer,String>builder()
28 .setStrategy(VersionedMapStoreBuilder.StoreStrategy.STATE) 29 .stateBasedImmutableWhenCommitting(false)
29 .setStateBasedImmutableWhenCommitting(false) 30 .stateBasedHashProvider(MapTestEnvironment.prepareHashProvider(false))
30 .setHashProvider(MapTestEnvironment.prepareHashProvider(false)) 31 .stateBasedSharingStrategy(VersionedMapStoreFactoryBuilder.SharingStrategy.NO_NODE_CACHE),
31 .setStateBasedNodeSharingStrategy(VersionedMapStoreBuilder.StateStorageStrategy.SHARED_NODE_CACHE), 32
32 VersionedMapStoreBuilder.<Integer,String>builder()
33 .setStrategy(VersionedMapStoreBuilder.StoreStrategy.STATE)
34 .setStateBasedImmutableWhenCommitting(false)
35 .setHashProvider(MapTestEnvironment.prepareHashProvider(false))
36 .setStateBasedNodeSharingStrategy(VersionedMapStoreBuilder.StateStorageStrategy.NO_NODE_CACHE),
37 // Delta based 33 // Delta based
38 VersionedMapStoreBuilder.<Integer,String>builder() 34 VersionedMapStore.<Integer,String>builder()
39 .setStrategy(VersionedMapStoreBuilder.StoreStrategy.DELTA) 35 .deltaTransactionStrategy(VersionedMapStoreFactoryBuilder.DeltaTransactionStrategy.SET),
40 .setDeltaStorageStrategy(VersionedMapStoreBuilder.DeltaStorageStrategy.SET), 36 VersionedMapStore.<Integer,String>builder()
41 VersionedMapStoreBuilder.<Integer,String>builder() 37 .deltaTransactionStrategy(VersionedMapStoreFactoryBuilder.DeltaTransactionStrategy.LIST)
42 .setStrategy(VersionedMapStoreBuilder.StoreStrategy.DELTA)
43 .setDeltaStorageStrategy(VersionedMapStoreBuilder.DeltaStorageStrategy.LIST)
44 }; 38 };
45} 39}