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