Deprecate floating point to integral types lesser than Int #KT-30360
This commit is contained in:
@@ -670,11 +670,11 @@ internal fun Short.toByteExactOrNull(): Byte? {
|
||||
}
|
||||
|
||||
internal fun Double.toByteExactOrNull(): Byte? {
|
||||
return if (this in Byte.MIN_VALUE.toDouble()..Byte.MAX_VALUE.toDouble()) this.toByte() else null
|
||||
return if (this in Byte.MIN_VALUE.toDouble()..Byte.MAX_VALUE.toDouble()) this.toInt().toByte() else null
|
||||
}
|
||||
|
||||
internal fun Float.toByteExactOrNull(): Byte? {
|
||||
return if (this in Byte.MIN_VALUE.toFloat()..Byte.MAX_VALUE.toFloat()) this.toByte() else null
|
||||
return if (this in Byte.MIN_VALUE.toFloat()..Byte.MAX_VALUE.toFloat()) this.toInt().toByte() else null
|
||||
}
|
||||
|
||||
internal fun Long.toIntExactOrNull(): Int? {
|
||||
@@ -706,11 +706,11 @@ internal fun Long.toShortExactOrNull(): Short? {
|
||||
}
|
||||
|
||||
internal fun Double.toShortExactOrNull(): Short? {
|
||||
return if (this in Short.MIN_VALUE.toDouble()..Short.MAX_VALUE.toDouble()) this.toShort() else null
|
||||
return if (this in Short.MIN_VALUE.toDouble()..Short.MAX_VALUE.toDouble()) this.toInt().toShort() else null
|
||||
}
|
||||
|
||||
internal fun Float.toShortExactOrNull(): Short? {
|
||||
return if (this in Short.MIN_VALUE.toFloat()..Short.MAX_VALUE.toFloat()) this.toShort() else null
|
||||
return if (this in Short.MIN_VALUE.toFloat()..Short.MAX_VALUE.toFloat()) this.toInt().toShort() else null
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -187,12 +187,55 @@ public class Byte private constructor() : Number(), Comparable<Byte> {
|
||||
/** Creates a range from this value to the specified [other] value. */
|
||||
public operator fun rangeTo(other: Long): LongRange
|
||||
|
||||
/** Returns this value. */
|
||||
public override fun toByte(): Byte
|
||||
/**
|
||||
* Converts this [Byte] value to [Char].
|
||||
*
|
||||
* If this value is non-negative, the resulting `Char` code is equal to this value.
|
||||
*
|
||||
* The least significant 8 bits of the resulting `Char` code are the same as the bits of this `Byte` value,
|
||||
* whereas the most significant 8 bits are filled with the sign bit of this value.
|
||||
*/
|
||||
public override fun toChar(): Char
|
||||
/**
|
||||
* Converts this [Byte] value to [Short].
|
||||
*
|
||||
* The resulting `Short` value represents the same numerical value as this `Byte`.
|
||||
*
|
||||
* The least significant 8 bits of the resulting `Short` value are the same as the bits of this `Byte` value,
|
||||
* whereas the most significant 8 bits are filled with the sign bit of this value.
|
||||
*/
|
||||
public override fun toShort(): Short
|
||||
/**
|
||||
* Converts this [Byte] value to [Int].
|
||||
*
|
||||
* The resulting `Int` value represents the same numerical value as this `Byte`.
|
||||
*
|
||||
* The least significant 8 bits of the resulting `Int` value are the same as the bits of this `Byte` value,
|
||||
* whereas the most significant 24 bits are filled with the sign bit of this value.
|
||||
*/
|
||||
public override fun toInt(): Int
|
||||
/**
|
||||
* Converts this [Byte] value to [Long].
|
||||
*
|
||||
* The resulting `Long` value represents the same numerical value as this `Byte`.
|
||||
*
|
||||
* The least significant 8 bits of the resulting `Long` value are the same as the bits of this `Byte` value,
|
||||
* whereas the most significant 56 bits are filled with the sign bit of this value.
|
||||
*/
|
||||
public override fun toLong(): Long
|
||||
/**
|
||||
* Converts this [Byte] value to [Float].
|
||||
*
|
||||
* The resulting `Float` value represents the same numerical value as this `Byte`.
|
||||
*/
|
||||
public override fun toFloat(): Float
|
||||
/**
|
||||
* Converts this [Byte] value to [Double].
|
||||
*
|
||||
* The resulting `Double` value represents the same numerical value as this `Byte`.
|
||||
*/
|
||||
public override fun toDouble(): Double
|
||||
}
|
||||
|
||||
@@ -375,12 +418,53 @@ public class Short private constructor() : Number(), Comparable<Short> {
|
||||
/** Creates a range from this value to the specified [other] value. */
|
||||
public operator fun rangeTo(other: Long): LongRange
|
||||
|
||||
/**
|
||||
* Converts this [Short] value to [Byte].
|
||||
*
|
||||
* If this value is in [Byte.MIN_VALUE]..[Byte.MAX_VALUE], the resulting `Byte` value represents
|
||||
* the same numerical value as this `Short`.
|
||||
*
|
||||
* The resulting `Byte` value is represented by the least significant 8 bits of this `Short` value.
|
||||
*/
|
||||
public override fun toByte(): Byte
|
||||
/**
|
||||
* Converts this [Short] value to [Char].
|
||||
*
|
||||
* The resulting `Char` code is equal to this value reinterpreted as an unsigned number,
|
||||
* i.e. it has the same binary representation as this `Short`.
|
||||
*/
|
||||
public override fun toChar(): Char
|
||||
/** Returns this value. */
|
||||
public override fun toShort(): Short
|
||||
/**
|
||||
* Converts this [Short] value to [Int].
|
||||
*
|
||||
* The resulting `Int` value represents the same numerical value as this `Short`.
|
||||
*
|
||||
* The least significant 16 bits of the resulting `Int` value are the same as the bits of this `Short` value,
|
||||
* whereas the most significant 16 bits are filled with the sign bit of this value.
|
||||
*/
|
||||
public override fun toInt(): Int
|
||||
/**
|
||||
* Converts this [Short] value to [Long].
|
||||
*
|
||||
* The resulting `Long` value represents the same numerical value as this `Short`.
|
||||
*
|
||||
* The least significant 16 bits of the resulting `Long` value are the same as the bits of this `Short` value,
|
||||
* whereas the most significant 48 bits are filled with the sign bit of this value.
|
||||
*/
|
||||
public override fun toLong(): Long
|
||||
/**
|
||||
* Converts this [Short] value to [Float].
|
||||
*
|
||||
* The resulting `Float` value represents the same numerical value as this `Short`.
|
||||
*/
|
||||
public override fun toFloat(): Float
|
||||
/**
|
||||
* Converts this [Short] value to [Double].
|
||||
*
|
||||
* The resulting `Double` value represents the same numerical value as this `Short`.
|
||||
*/
|
||||
public override fun toDouble(): Double
|
||||
}
|
||||
|
||||
@@ -578,12 +662,57 @@ public class Int private constructor() : Number(), Comparable<Int> {
|
||||
/** Inverts the bits in this value. */
|
||||
public fun inv(): Int
|
||||
|
||||
/**
|
||||
* Converts this [Int] value to [Byte].
|
||||
*
|
||||
* If this value is in [Byte.MIN_VALUE]..[Byte.MAX_VALUE], the resulting `Byte` value represents
|
||||
* the same numerical value as this `Int`.
|
||||
*
|
||||
* The resulting `Byte` value is represented by the least significant 8 bits of this `Int` value.
|
||||
*/
|
||||
public override fun toByte(): Byte
|
||||
/**
|
||||
* Converts this [Int] value to [Char].
|
||||
*
|
||||
* If this value is in the range of `Char` codes `Char.MIN_VALUE..Char.MAX_VALUE`,
|
||||
* the resulting `Char` code is equal to this value.
|
||||
*
|
||||
* The resulting `Char` code is represented by the least significant 16 bits of this `Int` value.
|
||||
*/
|
||||
public override fun toChar(): Char
|
||||
/**
|
||||
* Converts this [Int] value to [Short].
|
||||
*
|
||||
* If this value is in [Short.MIN_VALUE]..[Short.MAX_VALUE], the resulting `Short` value represents
|
||||
* the same numerical value as this `Int`.
|
||||
*
|
||||
* The resulting `Short` value is represented by the least significant 16 bits of this `Int` value.
|
||||
*/
|
||||
public override fun toShort(): Short
|
||||
/** Returns this value. */
|
||||
public override fun toInt(): Int
|
||||
/**
|
||||
* Converts this [Int] value to [Long].
|
||||
*
|
||||
* The resulting `Long` value represents the same numerical value as this `Int`.
|
||||
*
|
||||
* The least significant 32 bits of the resulting `Long` value are the same as the bits of this `Int` value,
|
||||
* whereas the most significant 32 bits are filled with the sign bit of this value.
|
||||
*/
|
||||
public override fun toLong(): Long
|
||||
/**
|
||||
* Converts this [Int] value to [Float].
|
||||
*
|
||||
* The resulting value is the closest `Float` to this `Int` value.
|
||||
* In case when this `Int` value is exactly between two `Float`s,
|
||||
* the one with zero at least significant bit of mantissa is selected.
|
||||
*/
|
||||
public override fun toFloat(): Float
|
||||
/**
|
||||
* Converts this [Int] value to [Double].
|
||||
*
|
||||
* The resulting `Double` value represents the same numerical value as this `Int`.
|
||||
*/
|
||||
public override fun toDouble(): Double
|
||||
}
|
||||
|
||||
@@ -766,12 +895,49 @@ public class Float private constructor() : Number(), Comparable<Float> {
|
||||
public operator fun unaryMinus(): Float
|
||||
|
||||
|
||||
/**
|
||||
* Converts this [Float] value to [Byte].
|
||||
*
|
||||
* The resulting `Byte` value is equal to `this.toInt().toByte()`.
|
||||
*/
|
||||
@Deprecated("Unclear conversion. To achieve the same result convert to Int explicitly and then to Byte.", ReplaceWith("toInt().toByte()"))
|
||||
public override fun toByte(): Byte
|
||||
/**
|
||||
* Converts this [Float] value to [Char].
|
||||
*
|
||||
* The resulting `Char` value is equal to `this.toInt().toChar()`.
|
||||
*/
|
||||
public override fun toChar(): Char
|
||||
/**
|
||||
* Converts this [Float] value to [Short].
|
||||
*
|
||||
* The resulting `Short` value is equal to `this.toInt().toShort()`.
|
||||
*/
|
||||
@Deprecated("Unclear conversion. To achieve the same result convert to Int explicitly and then to Short.", ReplaceWith("toInt().toShort()"))
|
||||
public override fun toShort(): Short
|
||||
/**
|
||||
* Converts this [Float] value to [Int].
|
||||
*
|
||||
* The fractional part, if any, is rounded down towards zero.
|
||||
* Returns zero if this `Float` value is `NaN`, [Int.MIN_VALUE] if it's less than `Int.MIN_VALUE`,
|
||||
* [Int.MAX_VALUE] if it's bigger than `Int.MAX_VALUE`.
|
||||
*/
|
||||
public override fun toInt(): Int
|
||||
/**
|
||||
* Converts this [Float] value to [Long].
|
||||
*
|
||||
* The fractional part, if any, is rounded down towards zero.
|
||||
* Returns zero if this `Float` value is `NaN`, [Long.MIN_VALUE] if it's less than `Long.MIN_VALUE`,
|
||||
* [Long.MAX_VALUE] if it's bigger than `Long.MAX_VALUE`.
|
||||
*/
|
||||
public override fun toLong(): Long
|
||||
/** Returns this value. */
|
||||
public override fun toFloat(): Float
|
||||
/**
|
||||
* Converts this [Float] value to [Double].
|
||||
*
|
||||
* The resulting `Double` value represents the same numerical value as this `Float`.
|
||||
*/
|
||||
public override fun toDouble(): Double
|
||||
}
|
||||
|
||||
@@ -954,12 +1120,51 @@ public class Double private constructor() : Number(), Comparable<Double> {
|
||||
public operator fun unaryMinus(): Double
|
||||
|
||||
|
||||
/**
|
||||
* Converts this [Double] value to [Byte].
|
||||
*
|
||||
* The resulting `Byte` value is equal to `this.toInt().toByte()`.
|
||||
*/
|
||||
@Deprecated("Unclear conversion. To achieve the same result convert to Int explicitly and then to Byte.", ReplaceWith("toInt().toByte()"))
|
||||
public override fun toByte(): Byte
|
||||
/**
|
||||
* Converts this [Double] value to [Char].
|
||||
*
|
||||
* The resulting `Char` value is equal to `this.toInt().toChar()`.
|
||||
*/
|
||||
public override fun toChar(): Char
|
||||
/**
|
||||
* Converts this [Double] value to [Short].
|
||||
*
|
||||
* The resulting `Short` value is equal to `this.toInt().toShort()`.
|
||||
*/
|
||||
@Deprecated("Unclear conversion. To achieve the same result convert to Int explicitly and then to Short.", ReplaceWith("toInt().toShort()"))
|
||||
public override fun toShort(): Short
|
||||
/**
|
||||
* Converts this [Double] value to [Int].
|
||||
*
|
||||
* The fractional part, if any, is rounded down towards zero.
|
||||
* Returns zero if this `Double` value is `NaN`, [Int.MIN_VALUE] if it's less than `Int.MIN_VALUE`,
|
||||
* [Int.MAX_VALUE] if it's bigger than `Int.MAX_VALUE`.
|
||||
*/
|
||||
public override fun toInt(): Int
|
||||
/**
|
||||
* Converts this [Double] value to [Long].
|
||||
*
|
||||
* The fractional part, if any, is rounded down towards zero.
|
||||
* Returns zero if this `Double` value is `NaN`, [Long.MIN_VALUE] if it's less than `Long.MIN_VALUE`,
|
||||
* [Long.MAX_VALUE] if it's bigger than `Long.MAX_VALUE`.
|
||||
*/
|
||||
public override fun toLong(): Long
|
||||
/**
|
||||
* Converts this [Double] value to [Float].
|
||||
*
|
||||
* The resulting value is the closest `Float` to this `Double` value.
|
||||
* In case when this `Double` value is exactly between two `Float`s,
|
||||
* the one with zero at least significant bit of mantissa is selected.
|
||||
*/
|
||||
public override fun toFloat(): Float
|
||||
/** Returns this value. */
|
||||
public override fun toDouble(): Double
|
||||
}
|
||||
|
||||
|
||||
@@ -477,7 +477,7 @@ class ArraysTest {
|
||||
expect(3.8) { arrayOf(1, 2, 5, 8, 3).average() }
|
||||
expect(2.1) { arrayOf(1.6, 2.6, 3.6, 0.6).average() }
|
||||
expect(100.0) { arrayOf<Byte>(100, 100, 100, 100, 100, 100).average() }
|
||||
expect(0) { arrayOf<Short>(1, -1, 2, -2, 3, -3).average().toShort() }
|
||||
expect(0) { arrayOf<Short>(1, -1, 2, -2, 3, -3).average().toInt() }
|
||||
// TODO: Property based tests
|
||||
// for each arr with size 1 arr.average() == arr[0]
|
||||
// for each arr with size > 0 arr.average() = arr.sum().toDouble() / arr.size()
|
||||
|
||||
Reference in New Issue
Block a user