aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-dse/src/test/java/tools/refinery/store/dse/transition/statespace/internal/ActivationUnitTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-dse/src/test/java/tools/refinery/store/dse/transition/statespace/internal/ActivationUnitTest.java')
-rw-r--r--subprojects/store-dse/src/test/java/tools/refinery/store/dse/transition/statespace/internal/ActivationUnitTest.java131
1 files changed, 131 insertions, 0 deletions
diff --git a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/transition/statespace/internal/ActivationUnitTest.java b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/transition/statespace/internal/ActivationUnitTest.java
new file mode 100644
index 00000000..3a672b18
--- /dev/null
+++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/transition/statespace/internal/ActivationUnitTest.java
@@ -0,0 +1,131 @@
1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.dse.transition.statespace.internal;
7
8import org.junit.jupiter.api.Assertions;
9import org.junit.jupiter.params.ParameterizedTest;
10import org.junit.jupiter.params.provider.MethodSource;
11
12import java.util.ArrayList;
13import java.util.Collections;
14import java.util.List;
15import java.util.Random;
16import java.util.function.Supplier;
17import java.util.stream.Stream;
18
19class ActivationUnitTest {
20 private final static int SMALL_SIZE = 5;
21
22 private static Stream<ActivationStoreEntry> entries() {
23 return Stream.of(
24 new ActivationStoreBitVectorEntry(SMALL_SIZE),
25 new ActivationStoreListEntry(SMALL_SIZE)
26 );
27 }
28
29 void addTest(ActivationStoreEntry entry, int elementsAdded) {
30 Assertions.assertEquals(elementsAdded, entry.getNumberOfVisitedActivations());
31 Assertions.assertEquals(SMALL_SIZE - elementsAdded, entry.getNumberOfUnvisitedActivations());
32 }
33
34 @ParameterizedTest
35 @MethodSource("entries")
36 void testDifferent(ActivationStoreEntry entry) {
37 int elementsAdded = 0;
38 addTest(entry, elementsAdded);
39 Assertions.assertEquals(2, entry.getAndAddActivationAfter(2));
40 addTest(entry, ++elementsAdded);
41 Assertions.assertEquals(3, entry.getAndAddActivationAfter(3));
42 addTest(entry, ++elementsAdded);
43 Assertions.assertEquals(1, entry.getAndAddActivationAfter(1));
44 addTest(entry, ++elementsAdded);
45 Assertions.assertEquals(4, entry.getAndAddActivationAfter(4));
46 addTest(entry, ++elementsAdded);
47 Assertions.assertEquals(0, entry.getAndAddActivationAfter(0));
48 addTest(entry, ++elementsAdded);
49 }
50
51
52 @ParameterizedTest
53 @MethodSource("entries")
54 void testSame(ActivationStoreEntry entry) {
55 int elementsAdded = 0;
56 addTest(entry, 0);
57 entry.getAndAddActivationAfter(2);
58 addTest(entry, ++elementsAdded);
59 entry.getAndAddActivationAfter(2);
60 addTest(entry, ++elementsAdded);
61 entry.getAndAddActivationAfter(2);
62 addTest(entry, ++elementsAdded);
63 entry.getAndAddActivationAfter(2);
64 addTest(entry, ++elementsAdded);
65 entry.getAndAddActivationAfter(2);
66 addTest(entry, ++elementsAdded);
67 }
68
69 @ParameterizedTest
70 @MethodSource("entries")
71 void testFilling(ActivationStoreEntry entry) {
72 int elementsAdded = 0;
73 while (elementsAdded < SMALL_SIZE) {
74 entry.getAndAddActivationAfter(2);
75 elementsAdded++;
76 }
77 Assertions.assertThrows(IllegalArgumentException.class, () -> entry.getAndAddActivationAfter(2));
78 }
79
80 void randomDifferentTestCase(ActivationStoreEntry entry, int seed) {
81 List<Integer> elements = new ArrayList<>(SMALL_SIZE);
82 for (int i = 0; i < SMALL_SIZE; i++) {
83 elements.add(i);
84 }
85 @SuppressWarnings("squid:S2245")
86 var random = new Random(seed);
87 Collections.shuffle(elements, random);
88
89 for (int element : elements) {
90 entry.getAndAddActivationAfter(element);
91 }
92 Assertions.assertThrows(IllegalArgumentException.class, () -> entry.getAndAddActivationAfter(2));
93 }
94
95 private static final int fuzzNumber = 20;
96
97 @ParameterizedTest
98 @MethodSource("entryFactories")
99 void randomDifferentTest(Supplier<ActivationStoreEntry> entry) {
100 for (int i = 0; i < fuzzNumber; i++) {
101 randomDifferentTestCase(entry.get(), i);
102 }
103 }
104
105 void randomSameTestCase(ActivationStoreEntry entry, int seed) {
106
107 @SuppressWarnings("squid:S2245")
108 var random = new Random(seed);
109
110 for (int i = 0; i < SMALL_SIZE; i++) {
111 entry.getAndAddActivationAfter(random.nextInt(SMALL_SIZE));
112 }
113
114 Assertions.assertThrows(IllegalArgumentException.class, () -> entry.getAndAddActivationAfter(2));
115 }
116
117 @ParameterizedTest
118 @MethodSource("entryFactories")
119 void randomSameTest(Supplier<ActivationStoreEntry> entry) {
120 for (int i = 0; i < fuzzNumber; i++) {
121 randomSameTestCase(entry.get(), i);
122 }
123 }
124
125 private static Stream<Supplier<ActivationStoreEntry>> entryFactories() {
126 return Stream.of(
127 () -> new ActivationStoreBitVectorEntry(SMALL_SIZE),
128 () -> new ActivationStoreListEntry(SMALL_SIZE)
129 );
130 }
131}