diff --git a/libraries/stdlib/api/js-v1/kotlin.kt b/libraries/stdlib/api/js-v1/kotlin.kt index dd541d6f8b8..24cf9eb2147 100644 --- a/libraries/stdlib/api/js-v1/kotlin.kt +++ b/libraries/stdlib/api/js-v1/kotlin.kt @@ -193,6 +193,10 @@ public inline fun T.also(block: (T) -> kotlin.Unit): T @kotlin.internal.InlineOnly public inline fun T.apply(block: T.() -> kotlin.Unit): T +@kotlin.internal.InlineOnly +@kotlin.SinceKotlin(version = "1.6") +public inline infix fun kotlin.Comparable.compareTo(other: T): kotlin.Int + @kotlin.SinceKotlin(version = "1.4") @kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) @kotlin.internal.InlineOnly diff --git a/libraries/stdlib/api/js/kotlin.kt b/libraries/stdlib/api/js/kotlin.kt index c816fd01792..c2736b86078 100644 --- a/libraries/stdlib/api/js/kotlin.kt +++ b/libraries/stdlib/api/js/kotlin.kt @@ -156,6 +156,10 @@ public inline fun T.also(block: (T) -> kotlin.Unit): T @kotlin.internal.InlineOnly public inline fun T.apply(block: T.() -> kotlin.Unit): T +@kotlin.internal.InlineOnly +@kotlin.SinceKotlin(version = "1.6") +public inline infix fun kotlin.Comparable.compareTo(other: T): kotlin.Int + @kotlin.SinceKotlin(version = "1.4") @kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) @kotlin.internal.InlineOnly diff --git a/libraries/stdlib/src/kotlin/comparisons/compareTo.kt b/libraries/stdlib/src/kotlin/comparisons/compareTo.kt new file mode 100644 index 00000000000..a72237b466f --- /dev/null +++ b/libraries/stdlib/src/kotlin/comparisons/compareTo.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2010-2021 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. + */ + +package kotlin + +import kotlin.internal.InlineOnly + +/** + * Compares this object with the specified object for order. Returns zero if this object is equal + * to the specified [other] object, a negative number if it's less than [other], or a positive number + * if it's greater than [other]. + * + * This function delegates to [Comparable.compareTo] and allows to call it in infix form. + */ +@InlineOnly +@SinceKotlin("1.6") +public inline infix fun Comparable.compareTo(other: T): Int = + this.compareTo(other) diff --git a/libraries/stdlib/test/collections/ArraysTest.kt b/libraries/stdlib/test/collections/ArraysTest.kt index 0bd0bb9fcac..bbaf3a60434 100644 --- a/libraries/stdlib/test/collections/ArraysTest.kt +++ b/libraries/stdlib/test/collections/ArraysTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 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. */ @@ -2129,7 +2129,7 @@ class ArraysTest { } private data class Text(val data: String) : Comparable { - override fun compareTo(other: Text): Int = data.compareTo(other.data) + override fun compareTo(other: Text): Int = data compareTo other.data } private fun testStableSort(stableSort: Array.() -> Unit, intSort: Array.() -> Unit) { diff --git a/libraries/stdlib/test/collections/IterableTests.kt b/libraries/stdlib/test/collections/IterableTests.kt index 4e33076ac26..40f9ae72641 100644 --- a/libraries/stdlib/test/collections/IterableTests.kt +++ b/libraries/stdlib/test/collections/IterableTests.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 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. */ @@ -578,13 +578,13 @@ fun Iterator.assertSorted(isInOrder: (T, T) -> Boolean) { } data class Sortable>(val key: K, val index: Int) : Comparable> { - override fun compareTo(other: Sortable): Int = this.key.compareTo(other.key) + override fun compareTo(other: Sortable): Int = this.key compareTo other.key } fun > Iterator>.assertStableSorted(descending: Boolean = false) { assertSorted { a, b -> - val relation = a.key.compareTo(b.key) + val relation = a.key compareTo b.key (if (descending) relation > 0 else relation < 0) || relation == 0 && a.index < b.index } } diff --git a/libraries/stdlib/test/comparisons/OrderingTest.kt b/libraries/stdlib/test/comparisons/OrderingTest.kt index e03bc6617d4..ff182067f51 100644 --- a/libraries/stdlib/test/comparisons/OrderingTest.kt +++ b/libraries/stdlib/test/comparisons/OrderingTest.kt @@ -28,6 +28,8 @@ class OrderingTest { fun compareByCompareTo() { val diff = v1.compareTo(v2) assertTrue(diff < 0) + val infixDiff = v1 compareTo v2 + assertEquals(diff, infixDiff) } @Test @@ -60,7 +62,7 @@ class OrderingTest { @Test fun sortComparatorThenComparator() { - val comparator = Comparator { a, b -> a.name.compareTo(b.name) }.thenComparator { a, b -> a.rating.compareTo(b.rating) } + val comparator = Comparator { a, b -> a.name compareTo b.name }.thenComparator { a, b -> a.rating compareTo b.rating } val diff = comparator.compare(v1, v2) assertTrue(diff > 0) diff --git a/libraries/stdlib/test/utils/KotlinVersionTest.kt b/libraries/stdlib/test/utils/KotlinVersionTest.kt index bb8a7193fb6..bad1b83115b 100644 --- a/libraries/stdlib/test/utils/KotlinVersionTest.kt +++ b/libraries/stdlib/test/utils/KotlinVersionTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 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. */ @@ -20,7 +20,7 @@ class KotlinVersionTest { val anotherCurrent = KotlinVersion.CURRENT.run { KotlinVersion(major, minor, patch) } assertEquals(KotlinVersion.CURRENT, anotherCurrent) assertEquals(KotlinVersion.CURRENT.hashCode(), anotherCurrent.hashCode()) - assertEquals(0, KotlinVersion.CURRENT.compareTo(anotherCurrent)) + assertEquals(0, KotlinVersion.CURRENT compareTo anotherCurrent) } @Test fun componentValidation() {