From da7b95bbb3e46214ab1912b3823a0dbcce17af2d Mon Sep 17 00:00:00 2001 From: Philipp Woessner <64482866+pwoessner@users.noreply.github.com> Date: Fri, 12 Jun 2020 17:05:07 +0200 Subject: [PATCH] fixed a bug where the wieghts where capped to 30 and not the attenuationMinutes (#426) --- .../rki/coronawarnapp/risk/RiskLevelCalculation.kt | 14 +++++++------- .../de/rki/coronawarnapp/risk/TimeVariables.kt | 2 +- .../coronawarnapp/risk/RiskLevelCalculationTest.kt | 11 +++++++++++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelCalculation.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelCalculation.kt index b2e731505..10547f52a 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelCalculation.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelCalculation.kt @@ -17,14 +17,14 @@ object RiskLevelCalculation { /** all attenuation values are capped to [TimeVariables.MAX_ATTENUATION_DURATION] */ val weightedAttenuationLow = - attenuationParameters.weights.low.capped() - .times(exposureSummary.attenuationDurationsInMinutes[0]) + attenuationParameters.weights.low + .times(exposureSummary.attenuationDurationsInMinutes[0].capped()) val weightedAttenuationMid = - attenuationParameters.weights.mid.capped() - .times(exposureSummary.attenuationDurationsInMinutes[1]) + attenuationParameters.weights.mid + .times(exposureSummary.attenuationDurationsInMinutes[1].capped()) val weightedAttenuationHigh = - attenuationParameters.weights.high.capped() - .times(exposureSummary.attenuationDurationsInMinutes[2]) + attenuationParameters.weights.high + .times(exposureSummary.attenuationDurationsInMinutes[2].capped()) val maximumRiskScore = exposureSummary.maximumRiskScore.toDouble() @@ -49,7 +49,7 @@ object RiskLevelCalculation { return round(riskScore.times(DECIMAL_MULTIPLIER)).div(DECIMAL_MULTIPLIER) } - private fun Double.capped(): Double { + private fun Int.capped(): Int { return if (this > TimeVariables.getMaxAttenuationDuration()) { TimeVariables.getMaxAttenuationDuration() } else { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt index ad8103a7e..1dc1d93d7 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt @@ -118,7 +118,7 @@ object TimeVariables { * This is the maximum attenuation duration value for the risk level calculation * in minutes */ - private const val MAX_ATTENUATION_DURATION = 30.0 + private const val MAX_ATTENUATION_DURATION = 30 /** * Getter function for [MAX_ATTENUATION_DURATION] diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelCalculationTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelCalculationTest.kt index 3a17562f0..237f7274f 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelCalculationTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelCalculationTest.kt @@ -62,6 +62,17 @@ class RiskLevelCalculationTest { assertEquals(9830.4, riskScore) } + @Test + fun calculateRiskScoreCapped() { + val riskScore = + RiskLevelCalculation.calculateRiskScore( + buildAttenuationDuration(0.5, 0.5, 1.0), + buildSummary(4096, 45, 45, 45) + ) + + assertEquals(9830.4, riskScore) + } + private fun buildAttenuationDuration( high: Double, mid: Double, -- GitLab