From b65094147cfa2fc46f37916c2f5b52e723a6db34 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Tue, 5 Sep 2023 20:04:37 +0200 Subject: fixed numerous issues with activation coder --- .../statespace/internal/ActivationUnitTest.java | 101 ++++++++++++++++----- 1 file changed, 80 insertions(+), 21 deletions(-) (limited to 'subprojects/store-dse/src/test/java/tools') 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 index e7960a06..3a672b18 100644 --- 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 @@ -9,6 +9,11 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; +import java.util.function.Supplier; import java.util.stream.Stream; class ActivationUnitTest { @@ -17,56 +22,110 @@ class ActivationUnitTest { private static Stream entries() { return Stream.of( new ActivationStoreBitVectorEntry(SMALL_SIZE), - new ActivationStoreListEntry(SMALL_SIZE)); + new ActivationStoreListEntry(SMALL_SIZE) + ); } void addTest(ActivationStoreEntry entry, int elementsAdded) { - Assertions.assertEquals(elementsAdded,entry.getNumberOfVisitedActivations()); - Assertions.assertEquals(SMALL_SIZE-elementsAdded,entry.getNumberOfUnvisitedActivations()); + Assertions.assertEquals(elementsAdded, entry.getNumberOfVisitedActivations()); + Assertions.assertEquals(SMALL_SIZE - elementsAdded, entry.getNumberOfUnvisitedActivations()); } @ParameterizedTest @MethodSource("entries") void testDifferent(ActivationStoreEntry entry) { int elementsAdded = 0; - addTest(entry,elementsAdded); + addTest(entry, elementsAdded); Assertions.assertEquals(2, entry.getAndAddActivationAfter(2)); - addTest(entry,++elementsAdded); - Assertions.assertEquals(3,entry.getAndAddActivationAfter(3)); - addTest(entry,++elementsAdded); - Assertions.assertEquals(1,entry.getAndAddActivationAfter(1)); - addTest(entry,++elementsAdded); - Assertions.assertEquals(4,entry.getAndAddActivationAfter(4)); - addTest(entry,++elementsAdded); - Assertions.assertEquals(0,entry.getAndAddActivationAfter(0)); - addTest(entry,++elementsAdded); + addTest(entry, ++elementsAdded); + Assertions.assertEquals(3, entry.getAndAddActivationAfter(3)); + addTest(entry, ++elementsAdded); + Assertions.assertEquals(1, entry.getAndAddActivationAfter(1)); + addTest(entry, ++elementsAdded); + Assertions.assertEquals(4, entry.getAndAddActivationAfter(4)); + addTest(entry, ++elementsAdded); + Assertions.assertEquals(0, entry.getAndAddActivationAfter(0)); + addTest(entry, ++elementsAdded); } + @ParameterizedTest @MethodSource("entries") void testSame(ActivationStoreEntry entry) { int elementsAdded = 0; - addTest(entry,elementsAdded); + addTest(entry, 0); entry.getAndAddActivationAfter(2); - addTest(entry,++elementsAdded); + addTest(entry, ++elementsAdded); entry.getAndAddActivationAfter(2); - addTest(entry,++elementsAdded); + addTest(entry, ++elementsAdded); entry.getAndAddActivationAfter(2); - addTest(entry,++elementsAdded); + addTest(entry, ++elementsAdded); entry.getAndAddActivationAfter(2); - addTest(entry,++elementsAdded); + addTest(entry, ++elementsAdded); entry.getAndAddActivationAfter(2); - addTest(entry,++elementsAdded); + addTest(entry, ++elementsAdded); } @ParameterizedTest @MethodSource("entries") void testFilling(ActivationStoreEntry entry) { int elementsAdded = 0; - while(elementsAdded < SMALL_SIZE) { + while (elementsAdded < SMALL_SIZE) { entry.getAndAddActivationAfter(2); elementsAdded++; } - Assertions.assertThrows(IllegalArgumentException.class,()-> entry.getAndAddActivationAfter(2)); + Assertions.assertThrows(IllegalArgumentException.class, () -> entry.getAndAddActivationAfter(2)); + } + + void randomDifferentTestCase(ActivationStoreEntry entry, int seed) { + List elements = new ArrayList<>(SMALL_SIZE); + for (int i = 0; i < SMALL_SIZE; i++) { + elements.add(i); + } + @SuppressWarnings("squid:S2245") + var random = new Random(seed); + Collections.shuffle(elements, random); + + for (int element : elements) { + entry.getAndAddActivationAfter(element); + } + Assertions.assertThrows(IllegalArgumentException.class, () -> entry.getAndAddActivationAfter(2)); + } + + private static final int fuzzNumber = 20; + + @ParameterizedTest + @MethodSource("entryFactories") + void randomDifferentTest(Supplier entry) { + for (int i = 0; i < fuzzNumber; i++) { + randomDifferentTestCase(entry.get(), i); + } + } + + void randomSameTestCase(ActivationStoreEntry entry, int seed) { + + @SuppressWarnings("squid:S2245") + var random = new Random(seed); + + for (int i = 0; i < SMALL_SIZE; i++) { + entry.getAndAddActivationAfter(random.nextInt(SMALL_SIZE)); + } + + Assertions.assertThrows(IllegalArgumentException.class, () -> entry.getAndAddActivationAfter(2)); + } + + @ParameterizedTest + @MethodSource("entryFactories") + void randomSameTest(Supplier entry) { + for (int i = 0; i < fuzzNumber; i++) { + randomSameTestCase(entry.get(), i); + } + } + + private static Stream> entryFactories() { + return Stream.of( + () -> new ActivationStoreBitVectorEntry(SMALL_SIZE), + () -> new ActivationStoreListEntry(SMALL_SIZE) + ); } } -- cgit v1.2.3-70-g09d2