Provide isInfinite() and isFinite() functions for Double and Float.
#KT-7126 Fixed
This commit is contained in:
@@ -10,4 +10,25 @@ public fun Double.isNaN(): Boolean = this != this
|
||||
* Returns `true` if the specified number is a
|
||||
* Not-a-Number (NaN) value, `false` otherwise.
|
||||
*/
|
||||
public fun Float.isNaN(): Boolean = this != this
|
||||
public fun Float.isNaN(): Boolean = this != this
|
||||
|
||||
/**
|
||||
* Returns `true` if this value is infinitely large in magnitude.
|
||||
*/
|
||||
public fun Double.isInfinite(): Boolean = this == Double.POSITIVE_INFINITY || this == Double.NEGATIVE_INFINITY
|
||||
|
||||
/**
|
||||
* Returns `true` if this value is infinitely large in magnitude.
|
||||
*/
|
||||
public fun Float.isInfinite(): Boolean = this == Float.POSITIVE_INFINITY || this == Float.NEGATIVE_INFINITY
|
||||
|
||||
/**
|
||||
* Returns `true` if the argument is a finite floating-point value; returns `false` otherwise (for `NaN` and infinity arguments).
|
||||
*/
|
||||
public fun Double.isFinite(): Boolean = !isInfinite() && !isNaN()
|
||||
|
||||
/**
|
||||
* Returns `true` if the argument is a finite floating-point value; returns `false` otherwise (for `NaN` and infinity arguments).
|
||||
*/
|
||||
public fun Float.isFinite(): Boolean = !isInfinite() && !isNaN()
|
||||
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package numbers
|
||||
|
||||
import org.junit.Test as test
|
||||
import kotlin.test.*
|
||||
|
||||
class NumbersTest {
|
||||
|
||||
test fun doubleProperties() {
|
||||
for (value in listOf(1.0, 0.0))
|
||||
doTestNumber(value)
|
||||
for (value in listOf(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY))
|
||||
doTestNumber(value, isInfinite = true)
|
||||
doTestNumber(Double.NaN, isNaN = true)
|
||||
}
|
||||
|
||||
test fun floatProperties() {
|
||||
for (value in listOf(1.0F, 0.0F))
|
||||
doTestNumber(value)
|
||||
for (value in listOf(Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY))
|
||||
doTestNumber(value, isInfinite = true)
|
||||
doTestNumber(Float.NaN, isNaN = true)
|
||||
}
|
||||
|
||||
|
||||
private fun doTestNumber(value: Double, isNaN: Boolean = false, isInfinite: Boolean = false) {
|
||||
assertEquals(isNaN, value.isNaN(), "Expected $value to have isNaN: $isNaN")
|
||||
assertEquals(isInfinite, value.isInfinite(), "Expected $value to have isInfinite: $isInfinite")
|
||||
assertEquals(!isNaN && !isInfinite, value.isFinite())
|
||||
}
|
||||
|
||||
private fun doTestNumber(value: Float, isNaN: Boolean = false, isInfinite: Boolean = false) {
|
||||
assertEquals(isNaN, value.isNaN(), "Expected $value to have isNaN: $isNaN")
|
||||
assertEquals(isInfinite, value.isInfinite(), "Expected $value to have isInfinite: $isInfinite")
|
||||
assertEquals(!isNaN && !isInfinite, value.isFinite())
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user