From 44834bf82cc2f4849208d242d9a9843547013dd4 Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Fri, 25 Mar 2022 16:05:21 +0300 Subject: [PATCH] [build statistics] Truncate long values instead of randomization --- .../statistics/metrics/MetricPolicies.kt | 21 ++++++++++++--- .../src/test/kotlin/MetricPolicyTest.kt | 27 +++++++++++++++++++ 2 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-statistics/src/test/kotlin/MetricPolicyTest.kt diff --git a/libraries/tools/kotlin-gradle-statistics/src/common/kotlin/org/jetbrains/kotlin/statistics/metrics/MetricPolicies.kt b/libraries/tools/kotlin-gradle-statistics/src/common/kotlin/org/jetbrains/kotlin/statistics/metrics/MetricPolicies.kt index 81e0edd3ab1..5fb6f9549b8 100644 --- a/libraries/tools/kotlin-gradle-statistics/src/common/kotlin/org/jetbrains/kotlin/statistics/metrics/MetricPolicies.kt +++ b/libraries/tools/kotlin-gradle-statistics/src/common/kotlin/org/jetbrains/kotlin/statistics/metrics/MetricPolicies.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.statistics.metrics import org.jetbrains.kotlin.statistics.ValueAnonymizer import org.jetbrains.kotlin.statistics.anonymizeComponentVersion import org.jetbrains.kotlin.statistics.sha256 +import kotlin.math.abs enum class StringOverridePolicy: IMetricContainerFactory { @@ -105,10 +106,22 @@ enum class NumberAnonymizationPolicy : ValueAnonymizer { override fun anonymize(t: Long) = t }, RANDOM_10_PERCENT { - override fun anonymize(t: Long) = (t + t * 0.1 * Math.random()).toLong() - }, - RANDOM_01_PERCENT { - override fun anonymize(t: Long) = (t + t * 0.01 * Math.random()).toLong() + override fun anonymize(t: Long): Long { + if (abs(t) < 10) return t + val sign = if (t < 0) + -1 + else + 1 + val absT = t * sign + var div: Long = 1 + while (div * 10 < absT) { + div *= 10 + } + return sign * if (absT / div < 2) + absT - absT % (div / 10) + else + absT - absT % div + } } } diff --git a/libraries/tools/kotlin-gradle-statistics/src/test/kotlin/MetricPolicyTest.kt b/libraries/tools/kotlin-gradle-statistics/src/test/kotlin/MetricPolicyTest.kt new file mode 100644 index 00000000000..1601c7ecbed --- /dev/null +++ b/libraries/tools/kotlin-gradle-statistics/src/test/kotlin/MetricPolicyTest.kt @@ -0,0 +1,27 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ +import org.jetbrains.kotlin.statistics.metrics.NumberAnonymizationPolicy.RANDOM_10_PERCENT +import kotlin.test.Test +import kotlin.test.assertEquals + + +class MetricPolicyTest { + + @Test + fun numberAnonimization() { + assertEquals(-200, RANDOM_10_PERCENT.anonymize(-234)) + assertEquals(-120, RANDOM_10_PERCENT.anonymize(-123)) + assertEquals(-9, RANDOM_10_PERCENT.anonymize(-9)) + assertEquals(0, RANDOM_10_PERCENT.anonymize(0)) + assertEquals(1, RANDOM_10_PERCENT.anonymize(1)) + assertEquals(5, RANDOM_10_PERCENT.anonymize(5)) + assertEquals(9, RANDOM_10_PERCENT.anonymize(9)) + assertEquals(10, RANDOM_10_PERCENT.anonymize(10)) + assertEquals(19, RANDOM_10_PERCENT.anonymize(19)) + assertEquals(20, RANDOM_10_PERCENT.anonymize(29)) + assertEquals(120, RANDOM_10_PERCENT.anonymize(123)) + assertEquals(200, RANDOM_10_PERCENT.anonymize(234)) + } +} \ No newline at end of file