From a62242e94fa604d6046045fe2ca09a6c264644e5 Mon Sep 17 00:00:00 2001 From: "Darya.Rovdo" Date: Mon, 14 Jul 2025 01:35:38 +0200 Subject: [PATCH] [daemon] LLM-17397 Fix IOU calculation to include end points GitOrigin-RevId: 3bcf069a7d484ea9a58e54b53f859932c185be75 --- .../src/com/intellij/cce/evaluation/data/DataRenderer.kt | 5 +++++ .../core/src/com/intellij/cce/metric/util/IOU.kt | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/plugins/evaluation-plugin/core/src/com/intellij/cce/evaluation/data/DataRenderer.kt b/plugins/evaluation-plugin/core/src/com/intellij/cce/evaluation/data/DataRenderer.kt index 5fa7f5b1bf29..250e7e8e44e3 100644 --- a/plugins/evaluation-plugin/core/src/com/intellij/cce/evaluation/data/DataRenderer.kt +++ b/plugins/evaluation-plugin/core/src/com/intellij/cce/evaluation/data/DataRenderer.kt @@ -108,6 +108,11 @@ data class FileUpdate( fun sanitizeText(text: String): String = text.replace("\r\n", "\n") + +/** + * 0-based line numbers. + * [start] and [end] are inclusive. + */ interface Range { val start: Int val end: Int diff --git a/plugins/evaluation-plugin/core/src/com/intellij/cce/metric/util/IOU.kt b/plugins/evaluation-plugin/core/src/com/intellij/cce/metric/util/IOU.kt index b10541b49e7e..33613676165c 100644 --- a/plugins/evaluation-plugin/core/src/com/intellij/cce/metric/util/IOU.kt +++ b/plugins/evaluation-plugin/core/src/com/intellij/cce/metric/util/IOU.kt @@ -13,7 +13,8 @@ import com.intellij.cce.evaluation.data.Range fun computeIOU(range1: T, range2: T): Double { // Calculate intersection val intersectionStart = maxOf(range1.start, range2.start) - val intersectionEnd = minOf(range1.end, range2.end) + // +1 because end is inclusive + val intersectionEnd = minOf(range1.end + 1, range2.end + 1) // If there's no intersection, return 0 if (intersectionEnd < intersectionStart) { @@ -23,8 +24,8 @@ fun computeIOU(range1: T, range2: T): Double { val intersectionArea = intersectionEnd - intersectionStart // Calculate union - val range1Size = range1.end - range1.start - val range2Size = range2.end - range2.start + val range1Size = range1.end + 1 - range1.start + val range2Size = range2.end + 1 - range2.start val unionArea = range1Size + range2Size - intersectionArea // Return IOU