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 b2e73150567df72cf5441316ad9229f5e190b406..10547f52aa6de3e406c3fe72459c15421e9cb301 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 ad8103a7e78d8c59b5dc6c01acd5bf25e01483b9..1dc1d93d7afd2358b79ad5ebccc2618e9a6b3250 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 3a17562f085cf105e1e5822a365318e610f53712..237f7274f6686ff9285542944a48851f6eb35cb0 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,