last change, promise

This commit is contained in:
dtookey 2023-09-05 09:54:54 -04:00
parent 28bb5e30e0
commit a985417f83
2 changed files with 10 additions and 10 deletions

View File

@ -6,46 +6,46 @@ import kotlin.math.pow
interface Metric<T: Number> {
val metricName: String
fun mapToMetric(results: List<AttackResult>): T
fun computeMetricFromResults(results: List<AttackResult>): T
fun formatResults(result: T): String
fun formatResultLabel(result: T): String
fun toResult(results: T): MetricResult {
return MetricResult(this.metricName, this.formatResults(results), results.toDouble())
return MetricResult(this.metricName, this.formatResultLabel(results), results.toDouble())
}
}
private fun Boolean.toInt(): Int = if (this) 1 else 0
class AverageMetric(override val metricName: String, private val fieldMapFn: (AttackResult) -> Long) : Metric<Double> {
override fun mapToMetric(results: List<AttackResult>): Double {
override fun computeMetricFromResults(results: List<AttackResult>): Double {
return results.map(fieldMapFn).average()
}
override fun formatResults(result: Double): String {
override fun formatResultLabel(result: Double): String {
return "$metricName: %.2f".format(result)
}
}
class RateMetric(override val metricName: String, private val fieldMapFn: (AttackResult) -> Boolean) : Metric<Double> {
override fun mapToMetric(results: List<AttackResult>): Double {
override fun computeMetricFromResults(results: List<AttackResult>): Double {
return results.map(fieldMapFn).map(Boolean::toInt).average() * 100.0
}
override fun formatResults(result: Double): String {
override fun formatResultLabel(result: Double): String {
return "$metricName: %.2f".format(result) + "%"
}
}
class StdDevMetric(override val metricName: String, private val fieldMapFn: (AttackResult) -> Long) : Metric<Double> {
override fun mapToMetric(results: List<AttackResult>): Double {
override fun computeMetricFromResults(results: List<AttackResult>): Double {
val mean = results.map(fieldMapFn).average()
return results.map(fieldMapFn).map { (it - mean).pow(2) }.average().pow(0.5)
}
override fun formatResults(result: Double): String {
override fun formatResultLabel(result: Double): String {
return "$metricName: %.2f".format(result)
}

View File

@ -42,7 +42,7 @@ interface Report {
fun computeResults(results: List<AttackResult>): MetricReport {
val m = ArrayList<MetricResult>(metrics.size)
metrics.forEach {
val value = it.mapToMetric(results)
val value = it.computeMetricFromResults(results)
m.add(it.toResult(value))
}
return MetricReport(name, m)