Provide infix compareTo extension for Comparable<T> #KT-46423
This commit is contained in:
@@ -193,6 +193,10 @@ public inline fun <T> T.also(block: (T) -> kotlin.Unit): T
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun <T> T.apply(block: T.() -> kotlin.Unit): T
|
||||
|
||||
@kotlin.internal.InlineOnly
|
||||
@kotlin.SinceKotlin(version = "1.6")
|
||||
public inline infix fun <T> kotlin.Comparable<T>.compareTo(other: T): kotlin.Int
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class})
|
||||
@kotlin.internal.InlineOnly
|
||||
|
||||
@@ -156,6 +156,10 @@ public inline fun <T> T.also(block: (T) -> kotlin.Unit): T
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun <T> T.apply(block: T.() -> kotlin.Unit): T
|
||||
|
||||
@kotlin.internal.InlineOnly
|
||||
@kotlin.SinceKotlin(version = "1.6")
|
||||
public inline infix fun <T> kotlin.Comparable<T>.compareTo(other: T): kotlin.Int
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class})
|
||||
@kotlin.internal.InlineOnly
|
||||
|
||||
@@ -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 <T> Comparable<T>.compareTo(other: T): Int =
|
||||
this.compareTo(other)
|
||||
@@ -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<Text> {
|
||||
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<Text>.() -> Unit, intSort: Array<Int>.() -> Unit) {
|
||||
|
||||
@@ -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 <T> Iterator<T>.assertSorted(isInOrder: (T, T) -> Boolean) {
|
||||
}
|
||||
|
||||
data class Sortable<K : Comparable<K>>(val key: K, val index: Int) : Comparable<Sortable<K>> {
|
||||
override fun compareTo(other: Sortable<K>): Int = this.key.compareTo(other.key)
|
||||
override fun compareTo(other: Sortable<K>): Int = this.key compareTo other.key
|
||||
}
|
||||
|
||||
|
||||
fun <K : Comparable<K>> Iterator<Sortable<K>>.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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Item> { a, b -> a.name.compareTo(b.name) }.thenComparator { a, b -> a.rating.compareTo(b.rating) }
|
||||
val comparator = Comparator<Item> { a, b -> a.name compareTo b.name }.thenComparator { a, b -> a.rating compareTo b.rating }
|
||||
|
||||
val diff = comparator.compare(v1, v2)
|
||||
assertTrue(diff > 0)
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user