From 91c1659233db9623476160d74caf9e9db4c8c8ec Mon Sep 17 00:00:00 2001 From: Till Schallau Date: Thu, 24 Oct 2024 10:37:48 +0200 Subject: [PATCH] Make MissedTSCInstancesPerTSCMetric serializable --- .../MissedTSCInstancesPerTSCMetric.kt | 23 +++++- .../SerializableTSCResultTest.kt | 82 +++++++++++++++++++ 2 files changed, 104 insertions(+), 1 deletion(-) diff --git a/stars-core/src/main/kotlin/tools/aqua/stars/core/metric/metrics/evaluation/MissedTSCInstancesPerTSCMetric.kt b/stars-core/src/main/kotlin/tools/aqua/stars/core/metric/metrics/evaluation/MissedTSCInstancesPerTSCMetric.kt index a786cf39..6291407b 100644 --- a/stars-core/src/main/kotlin/tools/aqua/stars/core/metric/metrics/evaluation/MissedTSCInstancesPerTSCMetric.kt +++ b/stars-core/src/main/kotlin/tools/aqua/stars/core/metric/metrics/evaluation/MissedTSCInstancesPerTSCMetric.kt @@ -18,9 +18,15 @@ package tools.aqua.stars.core.metric.metrics.evaluation import java.util.logging.Logger +import kotlin.collections.component1 +import kotlin.collections.component2 import tools.aqua.stars.core.metric.providers.Loggable +import tools.aqua.stars.core.metric.providers.Serializable import tools.aqua.stars.core.metric.providers.Stateful import tools.aqua.stars.core.metric.providers.TSCAndTSCInstanceNodeMetricProvider +import tools.aqua.stars.core.metric.serialization.SerializableTSCResult +import tools.aqua.stars.core.metric.serialization.tsc.SerializableTSCNode +import tools.aqua.stars.core.metric.serialization.tsc.SerializableTSCOccurrence import tools.aqua.stars.core.metric.utils.ApplicationConstantsHolder.CONSOLE_INDENT import tools.aqua.stars.core.metric.utils.ApplicationConstantsHolder.CONSOLE_SEPARATOR import tools.aqua.stars.core.tsc.TSC @@ -52,7 +58,7 @@ class MissedTSCInstancesPerTSCMetric< U : TickUnit, D : TickDifference>( override val logger: Logger = Loggable.getLogger("missed-tsc-instances-per-tsc") -) : TSCAndTSCInstanceNodeMetricProvider, Stateful, Loggable { +) : TSCAndTSCInstanceNodeMetricProvider, Stateful, Serializable, Loggable { /** * Map a [TSC] to a map in which the missed valid [TSCInstanceNode]s are stored: * Map>. @@ -110,4 +116,19 @@ class MissedTSCInstancesPerTSCMetric< missedInstances.forEach { logFine(it) } } } + + override fun getSerializableResults(): List = + missedInstancesMap.map { (tsc, missedInstances) -> + SerializableTSCResult( + identifier = tsc.identifier, + source = "MissedTSCInstancesPerTSCMetric", + value = + missedInstances + .filter { it.value } + .map { (tscInstanceNode, _) -> + SerializableTSCOccurrence( + tscInstance = SerializableTSCNode(tscInstanceNode), + segmentIdentifiers = emptyList()) + }) + } } diff --git a/stars-core/src/test/kotlin/tools/aqua/stars/core/metric/serialization/SerializableTSCResultTest.kt b/stars-core/src/test/kotlin/tools/aqua/stars/core/metric/serialization/SerializableTSCResultTest.kt index d00acb9b..60ccd3d6 100644 --- a/stars-core/src/test/kotlin/tools/aqua/stars/core/metric/serialization/SerializableTSCResultTest.kt +++ b/stars-core/src/test/kotlin/tools/aqua/stars/core/metric/serialization/SerializableTSCResultTest.kt @@ -21,6 +21,7 @@ import kotlin.test.Test import kotlin.test.assertEquals import tools.aqua.stars.core.* import tools.aqua.stars.core.metric.metrics.evaluation.InvalidTSCInstancesPerTSCMetric +import tools.aqua.stars.core.metric.metrics.evaluation.MissedTSCInstancesPerTSCMetric import tools.aqua.stars.core.metric.metrics.evaluation.ValidTSCInstancesPerTSCMetric import tools.aqua.stars.core.metric.serialization.extensions.compareTo import tools.aqua.stars.core.tsc.TSC @@ -193,6 +194,23 @@ class SerializableTSCResultTest { // endregion + // region TSC 3 definition + /** Holds a simple [TSC] with one mandatory leaf nodes. */ + private val simpleTSC3 = + tsc< + SimpleEntity, + SimpleTickData, + SimpleSegment, + SimpleTickDataUnit, + SimpleTickDataDifference> { + optional("root") { + leaf("leaf1") + leaf("leaf2") + } + } + + // endregion + /** * Tests the correct calculation and return of a [SerializableTSCResult] for a valid TSC instance. */ @@ -388,4 +406,68 @@ class SerializableTSCResultTest { assertEquals(1, comparison.size) assertEquals(SerializableResultComparisonVerdict.NOT_EQUAL_RESULTS, comparison[0].verdict) } + + /** + * Test the correct calculation and return of [SerializableTSCResult] for one missed TSC instance. + */ + @Test + fun `Test return of one missed TSC instance`() { + val missedInstancesMetric = + MissedTSCInstancesPerTSCMetric< + SimpleEntity, + SimpleTickData, + SimpleSegment, + SimpleTickDataUnit, + SimpleTickDataDifference>() + + missedInstancesMetric.evaluate(simpleTSC, simpleTSCInvalidInstance) + + val missedInstancesResult = missedInstancesMetric.getSerializableResults() + assertEquals(1, missedInstancesResult.size) + + assertEquals(1, missedInstancesResult[0].value.size) + } + + /** + * Test the correct calculation and return of [SerializableTSCResult] for all missed TSC + * instances. + */ + @Test + fun `Test return of all missed TSC instanced`() { + val missedInstancesMetric = + MissedTSCInstancesPerTSCMetric< + SimpleEntity, + SimpleTickData, + SimpleSegment, + SimpleTickDataUnit, + SimpleTickDataDifference>() + + missedInstancesMetric.evaluate(simpleTSC3, simpleTSCInvalidInstance) + + val missedInstancesResult = missedInstancesMetric.getSerializableResults() + assertEquals(1, missedInstancesResult.size) + + assertEquals(3, missedInstancesResult[0].value.size) + } + + /** + * Test the correct calculation and return of [SerializableTSCResult] for no missed TSC instance. + */ + @Test + fun `Test return of no missed TSC instances`() { + val missedInstancesMetric = + MissedTSCInstancesPerTSCMetric< + SimpleEntity, + SimpleTickData, + SimpleSegment, + SimpleTickDataUnit, + SimpleTickDataDifference>() + + missedInstancesMetric.evaluate(simpleTSC, simpleTSCValidInstance) + + val missedInstancesResult = missedInstancesMetric.getSerializableResults() + assertEquals(1, missedInstancesResult.size) + + assertEquals(0, missedInstancesResult[0].value.size) + } }