Implement min max minOf maxOf functions for unsigned types (KT-30035)
This commit is contained in:
committed by
Ilya Gorbunov
parent
bf83f0e070
commit
be6c2d8c7d
@@ -121,6 +121,7 @@ val reducedRuntimeSources = fullRuntimeSources - listOfKtFilesFrom(
|
|||||||
"libraries/stdlib/unsigned",
|
"libraries/stdlib/unsigned",
|
||||||
"libraries/stdlib/common/src/generated/_Arrays.kt",
|
"libraries/stdlib/common/src/generated/_Arrays.kt",
|
||||||
"libraries/stdlib/common/src/generated/_Collections.kt",
|
"libraries/stdlib/common/src/generated/_Collections.kt",
|
||||||
|
"libraries/stdlib/common/src/generated/_Comparisons.kt",
|
||||||
"libraries/stdlib/common/src/generated/_Maps.kt",
|
"libraries/stdlib/common/src/generated/_Maps.kt",
|
||||||
"libraries/stdlib/common/src/generated/_Sequences.kt",
|
"libraries/stdlib/common/src/generated/_Sequences.kt",
|
||||||
"libraries/stdlib/common/src/generated/_Sets.kt",
|
"libraries/stdlib/common/src/generated/_Sets.kt",
|
||||||
@@ -128,9 +129,11 @@ val reducedRuntimeSources = fullRuntimeSources - listOfKtFilesFrom(
|
|||||||
"libraries/stdlib/common/src/generated/_UArrays.kt",
|
"libraries/stdlib/common/src/generated/_UArrays.kt",
|
||||||
"libraries/stdlib/common/src/generated/_URanges.kt",
|
"libraries/stdlib/common/src/generated/_URanges.kt",
|
||||||
"libraries/stdlib/common/src/generated/_UCollections.kt",
|
"libraries/stdlib/common/src/generated/_UCollections.kt",
|
||||||
|
"libraries/stdlib/common/src/generated/_UComparisons.kt",
|
||||||
"libraries/stdlib/common/src/generated/_USequences.kt",
|
"libraries/stdlib/common/src/generated/_USequences.kt",
|
||||||
"libraries/stdlib/common/src/kotlin/SequencesH.kt",
|
"libraries/stdlib/common/src/kotlin/SequencesH.kt",
|
||||||
"libraries/stdlib/common/src/kotlin/TextH.kt",
|
"libraries/stdlib/common/src/kotlin/TextH.kt",
|
||||||
|
"libraries/stdlib/common/src/kotlin/UMath.kt",
|
||||||
"libraries/stdlib/common/src/kotlin/collections/",
|
"libraries/stdlib/common/src/kotlin/collections/",
|
||||||
"libraries/stdlib/common/src/kotlin/ioH.kt",
|
"libraries/stdlib/common/src/kotlin/ioH.kt",
|
||||||
"libraries/stdlib/js/irRuntime/collectionsHacks.kt",
|
"libraries/stdlib/js/irRuntime/collectionsHacks.kt",
|
||||||
@@ -158,8 +161,7 @@ val reducedRuntimeSources = fullRuntimeSources - listOfKtFilesFrom(
|
|||||||
"libraries/stdlib/src/kotlin/random/URandom.kt",
|
"libraries/stdlib/src/kotlin/random/URandom.kt",
|
||||||
"libraries/stdlib/src/kotlin/text/",
|
"libraries/stdlib/src/kotlin/text/",
|
||||||
"libraries/stdlib/src/kotlin/util/KotlinVersion.kt",
|
"libraries/stdlib/src/kotlin/util/KotlinVersion.kt",
|
||||||
"libraries/stdlib/src/kotlin/util/Tuples.kt",
|
"libraries/stdlib/src/kotlin/util/Tuples.kt"
|
||||||
"libraries/stdlib/common/src/generated/_Comparisons.kt"
|
|
||||||
) + listOfKtFilesFrom(
|
) + listOfKtFilesFrom(
|
||||||
"libraries/stdlib/js/irRuntime/smallRuntimeMissingDeclarations.kt"
|
"libraries/stdlib/js/irRuntime/smallRuntimeMissingDeclarations.kt"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -0,0 +1,169 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@file:kotlin.jvm.JvmMultifileClass
|
||||||
|
@file:kotlin.jvm.JvmName("UComparisonsKt")
|
||||||
|
|
||||||
|
package kotlin.comparisons
|
||||||
|
|
||||||
|
//
|
||||||
|
// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt
|
||||||
|
// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib
|
||||||
|
//
|
||||||
|
|
||||||
|
import kotlin.random.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the greater of two values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
public fun maxOf(a: UInt, b: UInt): UInt {
|
||||||
|
return if (a >= b) a else b
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the greater of two values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
public fun maxOf(a: ULong, b: ULong): ULong {
|
||||||
|
return if (a >= b) a else b
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the greater of two values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
public fun maxOf(a: UByte, b: UByte): UByte {
|
||||||
|
return if (a >= b) a else b
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the greater of two values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
public fun maxOf(a: UShort, b: UShort): UShort {
|
||||||
|
return if (a >= b) a else b
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the greater of three values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
@kotlin.internal.InlineOnly
|
||||||
|
public inline fun maxOf(a: UInt, b: UInt, c: UInt): UInt {
|
||||||
|
return maxOf(a, maxOf(b, c))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the greater of three values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
@kotlin.internal.InlineOnly
|
||||||
|
public inline fun maxOf(a: ULong, b: ULong, c: ULong): ULong {
|
||||||
|
return maxOf(a, maxOf(b, c))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the greater of three values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
@kotlin.internal.InlineOnly
|
||||||
|
public inline fun maxOf(a: UByte, b: UByte, c: UByte): UByte {
|
||||||
|
return maxOf(a, maxOf(b, c))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the greater of three values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
@kotlin.internal.InlineOnly
|
||||||
|
public inline fun maxOf(a: UShort, b: UShort, c: UShort): UShort {
|
||||||
|
return maxOf(a, maxOf(b, c))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the smaller of two values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
public fun minOf(a: UInt, b: UInt): UInt {
|
||||||
|
return if (a <= b) a else b
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the smaller of two values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
public fun minOf(a: ULong, b: ULong): ULong {
|
||||||
|
return if (a <= b) a else b
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the smaller of two values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
public fun minOf(a: UByte, b: UByte): UByte {
|
||||||
|
return if (a <= b) a else b
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the smaller of two values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
public fun minOf(a: UShort, b: UShort): UShort {
|
||||||
|
return if (a <= b) a else b
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the smaller of three values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
@kotlin.internal.InlineOnly
|
||||||
|
public inline fun minOf(a: UInt, b: UInt, c: UInt): UInt {
|
||||||
|
return minOf(a, minOf(b, c))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the smaller of three values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
@kotlin.internal.InlineOnly
|
||||||
|
public inline fun minOf(a: ULong, b: ULong, c: ULong): ULong {
|
||||||
|
return minOf(a, minOf(b, c))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the smaller of three values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
@kotlin.internal.InlineOnly
|
||||||
|
public inline fun minOf(a: UByte, b: UByte, c: UByte): UByte {
|
||||||
|
return minOf(a, minOf(b, c))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the smaller of three values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
@kotlin.internal.InlineOnly
|
||||||
|
public inline fun minOf(a: UShort, b: UShort, c: UShort): UShort {
|
||||||
|
return minOf(a, minOf(b, c))
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package unsigned
|
||||||
|
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.expect
|
||||||
|
|
||||||
|
class UComparisonsTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun minOf_2() {
|
||||||
|
expect(1.toUByte()) { minOf(2.toUByte(), 1.toUByte()) }
|
||||||
|
expect(58.toUShort()) { minOf(58.toUShort(), 32768.toUShort()) }
|
||||||
|
expect(UInt.MIN_VALUE) { minOf(UInt.MIN_VALUE, UInt.MAX_VALUE) }
|
||||||
|
expect(42312uL) { minOf(42312uL, 42312uL) }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun minOf_3() {
|
||||||
|
expect(1.toUByte()) { minOf(2.toUByte(), 1.toUByte(), 3.toUByte()) }
|
||||||
|
expect(55.toUShort()) { minOf(58.toUShort(), 32768.toUShort(), 55.toUShort()) }
|
||||||
|
expect(UInt.MIN_VALUE) { minOf(UInt.MIN_VALUE, UInt.MAX_VALUE, 0u) }
|
||||||
|
expect(42312uL) { minOf(42312uL, 42312uL, 42312uL) }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun maxOf_2() {
|
||||||
|
expect(2.toUByte()) { maxOf(2.toUByte(), 1.toUByte()) }
|
||||||
|
expect(32768.toUShort()) { maxOf(58.toUShort(), 32768.toUShort()) }
|
||||||
|
expect(UInt.MAX_VALUE) { maxOf(UInt.MIN_VALUE, UInt.MAX_VALUE) }
|
||||||
|
expect(42312uL) { maxOf(42312uL, 42312uL) }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun maxOf_3() {
|
||||||
|
expect(3.toUByte()) { maxOf(2.toUByte(), 1.toUByte(), 3.toUByte()) }
|
||||||
|
expect(32768.toUShort()) { maxOf(58.toUShort(), 32768.toUShort(), 55.toUShort()) }
|
||||||
|
expect(UInt.MAX_VALUE) { maxOf(UInt.MIN_VALUE, UInt.MAX_VALUE, 0u) }
|
||||||
|
expect(42312uL) { maxOf(42312uL, 42312uL, 42312uL) }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package test.unsigned
|
||||||
|
|
||||||
|
import kotlin.math.max
|
||||||
|
import kotlin.math.min
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.expect
|
||||||
|
|
||||||
|
class UMathTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun min() {
|
||||||
|
expect(1uL) { min(2uL, 1uL) }
|
||||||
|
expect(ULong.MIN_VALUE) { min(ULong.MIN_VALUE, ULong.MAX_VALUE) }
|
||||||
|
expect(58u) { min(58u, 1u shl 31) }
|
||||||
|
expect(42312u) { min(42312u, 42312u) }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun max() {
|
||||||
|
expect(2u) { max(2u, 1u) }
|
||||||
|
expect(UInt.MAX_VALUE) { maxOf(UInt.MIN_VALUE, UInt.MAX_VALUE) }
|
||||||
|
expect(1uL shl 63) { max(58uL, 1uL shl 63) }
|
||||||
|
expect(42312uL) { maxOf(42312uL, 42312uL) }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. 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.math
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the smaller of two values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
@kotlin.internal.InlineOnly
|
||||||
|
public inline fun min(a: UInt, b: UInt): UInt {
|
||||||
|
return minOf(a, b)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the smaller of two values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
@kotlin.internal.InlineOnly
|
||||||
|
public inline fun min(a: ULong, b: ULong): ULong {
|
||||||
|
return minOf(a, b)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the greater of two values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
@kotlin.internal.InlineOnly
|
||||||
|
public inline fun max(a: UInt, b: UInt): UInt {
|
||||||
|
return maxOf(a, b)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the greater of two values.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.3")
|
||||||
|
@ExperimentalUnsignedTypes
|
||||||
|
@kotlin.internal.InlineOnly
|
||||||
|
public inline fun max(a: ULong, b: ULong): ULong {
|
||||||
|
return maxOf(a, b)
|
||||||
|
}
|
||||||
+11
@@ -2521,6 +2521,17 @@ public final class kotlin/comparisons/ComparisonsKt {
|
|||||||
public static final fun thenDescending (Ljava/util/Comparator;Ljava/util/Comparator;)Ljava/util/Comparator;
|
public static final fun thenDescending (Ljava/util/Comparator;Ljava/util/Comparator;)Ljava/util/Comparator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class kotlin/comparisons/UComparisonsKt {
|
||||||
|
public static final fun maxOf-5PvTz6A (SS)S
|
||||||
|
public static final fun maxOf-J1ME1BU (II)I
|
||||||
|
public static final fun maxOf-Kr8caGY (BB)B
|
||||||
|
public static final fun maxOf-eb3DHEI (JJ)J
|
||||||
|
public static final fun minOf-5PvTz6A (SS)S
|
||||||
|
public static final fun minOf-J1ME1BU (II)I
|
||||||
|
public static final fun minOf-Kr8caGY (BB)B
|
||||||
|
public static final fun minOf-eb3DHEI (JJ)J
|
||||||
|
}
|
||||||
|
|
||||||
public final class kotlin/concurrent/ThreadsKt {
|
public final class kotlin/concurrent/ThreadsKt {
|
||||||
public static final fun thread (ZZLjava/lang/ClassLoader;Ljava/lang/String;ILkotlin/jvm/functions/Function0;)Ljava/lang/Thread;
|
public static final fun thread (ZZLjava/lang/ClassLoader;Ljava/lang/String;ILkotlin/jvm/functions/Function0;)Ljava/lang/Thread;
|
||||||
public static synthetic fun thread$default (ZZLjava/lang/ClassLoader;Ljava/lang/String;ILkotlin/jvm/functions/Function0;ILjava/lang/Object;)Ljava/lang/Thread;
|
public static synthetic fun thread$default (ZZLjava/lang/ClassLoader;Ljava/lang/String;ILkotlin/jvm/functions/Function0;ILjava/lang/Object;)Ljava/lang/Thread;
|
||||||
|
|||||||
@@ -9,6 +9,16 @@ import templates.Family.*
|
|||||||
|
|
||||||
object ComparableOps : TemplateGroupBase() {
|
object ComparableOps : TemplateGroupBase() {
|
||||||
|
|
||||||
|
init {
|
||||||
|
defaultBuilder {
|
||||||
|
specialFor(Unsigned) {
|
||||||
|
since("1.3")
|
||||||
|
annotation("@ExperimentalUnsignedTypes")
|
||||||
|
sourceFile(SourceFile.UComparisons)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private val numericPrimitives = PrimitiveType.numericPrimitives.sortedBy { it.capacity }.toSet()
|
private val numericPrimitives = PrimitiveType.numericPrimitives.sortedBy { it.capacity }.toSet()
|
||||||
private val intPrimitives = setOf(PrimitiveType.Int, PrimitiveType.Long)
|
private val intPrimitives = setOf(PrimitiveType.Int, PrimitiveType.Long)
|
||||||
private val shortIntPrimitives = setOf(PrimitiveType.Byte, PrimitiveType.Short)
|
private val shortIntPrimitives = setOf(PrimitiveType.Byte, PrimitiveType.Short)
|
||||||
@@ -133,6 +143,7 @@ object ComparableOps : TemplateGroupBase() {
|
|||||||
val f_minOf_2 = fn("minOf(a: T, b: T)") {
|
val f_minOf_2 = fn("minOf(a: T, b: T)") {
|
||||||
include(Generic)
|
include(Generic)
|
||||||
include(Primitives, numericPrimitives)
|
include(Primitives, numericPrimitives)
|
||||||
|
include(Unsigned)
|
||||||
} builder {
|
} builder {
|
||||||
sourceFile(SourceFile.Comparisons)
|
sourceFile(SourceFile.Comparisons)
|
||||||
since("1.1")
|
since("1.1")
|
||||||
@@ -146,18 +157,19 @@ object ComparableOps : TemplateGroupBase() {
|
|||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
val defaultImpl = "if (a <= b) a else b"
|
val defaultImpl = "if (a <= b) a else b"
|
||||||
|
body { "return $defaultImpl" }
|
||||||
|
|
||||||
|
specialFor(Primitives, Unsigned) {
|
||||||
|
doc { "Returns the smaller of two values." }
|
||||||
|
}
|
||||||
// TODO: Add a note about NaN propagation for floats.
|
// TODO: Add a note about NaN propagation for floats.
|
||||||
specialFor(Primitives) {
|
specialFor(Primitives) {
|
||||||
inlineOnly()
|
inlineOnly()
|
||||||
doc {
|
|
||||||
"""Returns the smaller of two values."""
|
|
||||||
}
|
|
||||||
var convertBack = "to$primitive()"
|
var convertBack = "to$primitive()"
|
||||||
on(Platform.JS) {
|
on(Platform.JS) {
|
||||||
suppress("DEPRECATION_ERROR")
|
suppress("DEPRECATION_ERROR")
|
||||||
convertBack = "unsafeCast<$primitive>()"
|
convertBack = "unsafeCast<$primitive>()"
|
||||||
}
|
}
|
||||||
body { "return $defaultImpl" }
|
|
||||||
on(Platform.JVM) {
|
on(Platform.JVM) {
|
||||||
body { "return Math.min(a, b)" }
|
body { "return Math.min(a, b)" }
|
||||||
}
|
}
|
||||||
@@ -188,22 +200,22 @@ object ComparableOps : TemplateGroupBase() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
on(Platform.JS) { /* just to make expect, KT-22520 */ }
|
specialFor(Generic) {
|
||||||
body(Generic) {
|
on(Platform.JS) { /* just to make expect, KT-22520 */ }
|
||||||
"return $defaultImpl"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val f_minOf_3 = fn("minOf(a: T, b: T, c: T)") {
|
val f_minOf_3 = fn("minOf(a: T, b: T, c: T)") {
|
||||||
include(Generic)
|
include(Generic)
|
||||||
include(Primitives, numericPrimitives)
|
include(Primitives, numericPrimitives)
|
||||||
|
include(Unsigned)
|
||||||
} builder {
|
} builder {
|
||||||
sourceFile(SourceFile.Comparisons)
|
sourceFile(SourceFile.Comparisons)
|
||||||
since("1.1")
|
since("1.1")
|
||||||
typeParam("T : Comparable<T>")
|
typeParam("T : Comparable<T>")
|
||||||
returns("T")
|
returns("T")
|
||||||
receiver("")
|
receiver("")
|
||||||
specialFor(Primitives) { inlineOnly() }
|
specialFor(Primitives, Unsigned) { inlineOnly() }
|
||||||
// TODO: Add a note about NaN propagation for floats.
|
// TODO: Add a note about NaN propagation for floats.
|
||||||
doc {
|
doc {
|
||||||
"""
|
"""
|
||||||
@@ -213,7 +225,9 @@ object ComparableOps : TemplateGroupBase() {
|
|||||||
body {
|
body {
|
||||||
"return minOf(a, minOf(b, c))"
|
"return minOf(a, minOf(b, c))"
|
||||||
}
|
}
|
||||||
on(Platform.JS) { /* just to make expect, KT-22520 */ }
|
specialFor(Primitives, Generic) {
|
||||||
|
on(Platform.JS) { /* just to make expect, KT-22520 */ }
|
||||||
|
}
|
||||||
specialFor(Primitives) {
|
specialFor(Primitives) {
|
||||||
if (primitive in shortIntPrimitives) {
|
if (primitive in shortIntPrimitives) {
|
||||||
body { "return minOf(a.toInt(), minOf(b.toInt(), c.toInt())).to$primitive()" }
|
body { "return minOf(a.toInt(), minOf(b.toInt(), c.toInt())).to$primitive()" }
|
||||||
@@ -272,6 +286,7 @@ object ComparableOps : TemplateGroupBase() {
|
|||||||
val f_maxOf_2 = fn("maxOf(a: T, b: T)") {
|
val f_maxOf_2 = fn("maxOf(a: T, b: T)") {
|
||||||
include(Generic)
|
include(Generic)
|
||||||
include(Primitives, numericPrimitives)
|
include(Primitives, numericPrimitives)
|
||||||
|
include(Unsigned)
|
||||||
} builder {
|
} builder {
|
||||||
sourceFile(SourceFile.Comparisons)
|
sourceFile(SourceFile.Comparisons)
|
||||||
since("1.1")
|
since("1.1")
|
||||||
@@ -285,18 +300,19 @@ object ComparableOps : TemplateGroupBase() {
|
|||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
val defaultImpl = "if (a >= b) a else b"
|
val defaultImpl = "if (a >= b) a else b"
|
||||||
|
body { "return $defaultImpl" }
|
||||||
|
|
||||||
|
specialFor(Primitives, Unsigned) {
|
||||||
|
doc { "Returns the greater of two values." }
|
||||||
|
}
|
||||||
// TODO: Add a note about NaN propagation for floats.
|
// TODO: Add a note about NaN propagation for floats.
|
||||||
specialFor(Primitives) {
|
specialFor(Primitives) {
|
||||||
inlineOnly()
|
inlineOnly()
|
||||||
doc {
|
|
||||||
"""Returns the greater of two values."""
|
|
||||||
}
|
|
||||||
var convertBack = "to$primitive()"
|
var convertBack = "to$primitive()"
|
||||||
on(Platform.JS) {
|
on(Platform.JS) {
|
||||||
suppress("DEPRECATION_ERROR")
|
suppress("DEPRECATION_ERROR")
|
||||||
convertBack = "unsafeCast<$primitive>()"
|
convertBack = "unsafeCast<$primitive>()"
|
||||||
}
|
}
|
||||||
body { "return $defaultImpl" }
|
|
||||||
on(Platform.JVM) {
|
on(Platform.JVM) {
|
||||||
body { "return Math.max(a, b)" }
|
body { "return Math.max(a, b)" }
|
||||||
}
|
}
|
||||||
@@ -323,22 +339,22 @@ object ComparableOps : TemplateGroupBase() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
on(Platform.JS) { /* just to make expect, KT-22520 */ }
|
specialFor(Generic) {
|
||||||
body(Generic) {
|
on(Platform.JS) { /* just to make expect, KT-22520 */ }
|
||||||
"return $defaultImpl"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val f_maxOf_3 = fn("maxOf(a: T, b: T, c: T)") {
|
val f_maxOf_3 = fn("maxOf(a: T, b: T, c: T)") {
|
||||||
include(Generic)
|
include(Generic)
|
||||||
include(Primitives, numericPrimitives)
|
include(Primitives, numericPrimitives)
|
||||||
|
include(Unsigned)
|
||||||
} builder {
|
} builder {
|
||||||
sourceFile(SourceFile.Comparisons)
|
sourceFile(SourceFile.Comparisons)
|
||||||
since("1.1")
|
since("1.1")
|
||||||
typeParam("T : Comparable<T>")
|
typeParam("T : Comparable<T>")
|
||||||
returns("T")
|
returns("T")
|
||||||
receiver("")
|
receiver("")
|
||||||
specialFor(Primitives) { inlineOnly() }
|
specialFor(Primitives, Unsigned) { inlineOnly() }
|
||||||
// TODO: Add a note about NaN propagation for floats.
|
// TODO: Add a note about NaN propagation for floats.
|
||||||
doc {
|
doc {
|
||||||
"""
|
"""
|
||||||
@@ -348,7 +364,9 @@ object ComparableOps : TemplateGroupBase() {
|
|||||||
body {
|
body {
|
||||||
"return maxOf(a, maxOf(b, c))"
|
"return maxOf(a, maxOf(b, c))"
|
||||||
}
|
}
|
||||||
on(Platform.JS) { /* just to make expect, KT-22520 */ }
|
specialFor(Primitives, Generic) {
|
||||||
|
on(Platform.JS) { /* just to make expect, KT-22520 */ }
|
||||||
|
}
|
||||||
specialFor(Primitives) {
|
specialFor(Primitives) {
|
||||||
if (primitive in shortIntPrimitives) {
|
if (primitive in shortIntPrimitives) {
|
||||||
body { "return maxOf(a.toInt(), maxOf(b.toInt(), c.toInt())).to$primitive()" }
|
body { "return maxOf(a.toInt(), maxOf(b.toInt(), c.toInt())).to$primitive()" }
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ enum class SourceFile(jvmClassName: String? = null, val multifile: Boolean = tru
|
|||||||
Ranges(packageName = "kotlin.ranges"),
|
Ranges(packageName = "kotlin.ranges"),
|
||||||
URanges(packageName = "kotlin.ranges"),
|
URanges(packageName = "kotlin.ranges"),
|
||||||
Comparisons(packageName = "kotlin.comparisons"),
|
Comparisons(packageName = "kotlin.comparisons"),
|
||||||
|
UComparisons(packageName = "kotlin.comparisons"),
|
||||||
Strings(packageName = "kotlin.text"),
|
Strings(packageName = "kotlin.text"),
|
||||||
Misc(),
|
Misc(),
|
||||||
;
|
;
|
||||||
|
|||||||
Reference in New Issue
Block a user