Skip to content

Commit

Permalink
Make MissedTSCInstancesPerTSCMetric serializable
Browse files Browse the repository at this point in the history
  • Loading branch information
tillschallau committed Oct 24, 2024
1 parent 0050732 commit 91c1659
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -52,7 +58,7 @@ class MissedTSCInstancesPerTSCMetric<
U : TickUnit<U, D>,
D : TickDifference<D>>(
override val logger: Logger = Loggable.getLogger("missed-tsc-instances-per-tsc")
) : TSCAndTSCInstanceNodeMetricProvider<E, T, S, U, D>, Stateful, Loggable {
) : TSCAndTSCInstanceNodeMetricProvider<E, T, S, U, D>, Stateful, Serializable, Loggable {
/**
* Map a [TSC] to a map in which the missed valid [TSCInstanceNode]s are stored:
* Map<tsc,Map<referenceInstance,missed>>.
Expand Down Expand Up @@ -110,4 +116,19 @@ class MissedTSCInstancesPerTSCMetric<
missedInstances.forEach { logFine(it) }
}
}

override fun getSerializableResults(): List<SerializableTSCResult> =
missedInstancesMap.map { (tsc, missedInstances) ->
SerializableTSCResult(
identifier = tsc.identifier,
source = "MissedTSCInstancesPerTSCMetric",
value =
missedInstances
.filter { it.value }
.map { (tscInstanceNode, _) ->
SerializableTSCOccurrence(
tscInstance = SerializableTSCNode(tscInstanceNode),
segmentIdentifiers = emptyList())
})
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.
*/
Expand Down Expand Up @@ -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)
}
}

0 comments on commit 91c1659

Please sign in to comment.