diff options
author | Kristóf Marussy <marussy@mit.bme.hu> | 2023-09-14 19:29:36 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-14 19:29:36 +0200 |
commit | 98ed3b6db5f4e51961a161050cc31c66015116e8 (patch) | |
tree | 8bfd6d9bc8d6ed23b9eb0f889dd40b6c24fe8f92 /subprojects/store-dse/src/test/java/tools/refinery/store/dse/transition/statespace/internal/ActivationUnitTest.java | |
parent | Merge pull request #38 from nagilooh/design-space-exploration (diff) | |
parent | Merge remote-tracking branch 'upstream/main' into partial-interpretation (diff) | |
download | refinery-98ed3b6db5f4e51961a161050cc31c66015116e8.tar.gz refinery-98ed3b6db5f4e51961a161050cc31c66015116e8.tar.zst refinery-98ed3b6db5f4e51961a161050cc31c66015116e8.zip |
Merge pull request #39 from kris7t/partial-interpretation
Implement partial interpretation based model generation
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.java | 131 |
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 | */ | ||
6 | package tools.refinery.store.dse.transition.statespace.internal; | ||
7 | |||
8 | import org.junit.jupiter.api.Assertions; | ||
9 | import org.junit.jupiter.params.ParameterizedTest; | ||
10 | import org.junit.jupiter.params.provider.MethodSource; | ||
11 | |||
12 | import java.util.ArrayList; | ||
13 | import java.util.Collections; | ||
14 | import java.util.List; | ||
15 | import java.util.Random; | ||
16 | import java.util.function.Supplier; | ||
17 | import java.util.stream.Stream; | ||
18 | |||
19 | class 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 | } | ||