last change, promise
This commit is contained in:
parent
28bb5e30e0
commit
a985417f83
@ -6,46 +6,46 @@ import kotlin.math.pow
|
|||||||
|
|
||||||
interface Metric<T: Number> {
|
interface Metric<T: Number> {
|
||||||
val metricName: String
|
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 {
|
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
|
private fun Boolean.toInt(): Int = if (this) 1 else 0
|
||||||
|
|
||||||
class AverageMetric(override val metricName: String, private val fieldMapFn: (AttackResult) -> Long) : Metric<Double> {
|
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()
|
return results.map(fieldMapFn).average()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun formatResults(result: Double): String {
|
override fun formatResultLabel(result: Double): String {
|
||||||
return "$metricName: %.2f".format(result)
|
return "$metricName: %.2f".format(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class RateMetric(override val metricName: String, private val fieldMapFn: (AttackResult) -> Boolean) : Metric<Double> {
|
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
|
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) + "%"
|
return "$metricName: %.2f".format(result) + "%"
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class StdDevMetric(override val metricName: String, private val fieldMapFn: (AttackResult) -> Long) : Metric<Double> {
|
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()
|
val mean = results.map(fieldMapFn).average()
|
||||||
return results.map(fieldMapFn).map { (it - mean).pow(2) }.average().pow(0.5)
|
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)
|
return "$metricName: %.2f".format(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -42,7 +42,7 @@ interface Report {
|
|||||||
fun computeResults(results: List<AttackResult>): MetricReport {
|
fun computeResults(results: List<AttackResult>): MetricReport {
|
||||||
val m = ArrayList<MetricResult>(metrics.size)
|
val m = ArrayList<MetricResult>(metrics.size)
|
||||||
metrics.forEach {
|
metrics.forEach {
|
||||||
val value = it.mapToMetric(results)
|
val value = it.computeMetricFromResults(results)
|
||||||
m.add(it.toResult(value))
|
m.add(it.toResult(value))
|
||||||
}
|
}
|
||||||
return MetricReport(name, m)
|
return MetricReport(name, m)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user