last change, promise
This commit is contained in:
parent
28bb5e30e0
commit
a985417f83
@ -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)
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user