From a225842f9b4c957f8e404960b2f041fe0f58b067 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Tue, 25 Feb 2020 21:43:04 +0300 Subject: [PATCH] Test that known Floats can fit in FloatArray without over/underflow But some precision loss can still happen in JS. Relates to KT-24975 --- libraries/stdlib/test/numbers/NumbersTest.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/libraries/stdlib/test/numbers/NumbersTest.kt b/libraries/stdlib/test/numbers/NumbersTest.kt index 3dcb4b376bb..990899e9276 100644 --- a/libraries/stdlib/test/numbers/NumbersTest.kt +++ b/libraries/stdlib/test/numbers/NumbersTest.kt @@ -144,6 +144,16 @@ class NumbersTest { doTestNumber(Float.NaN, isNaN = true) } + @Test fun floatFitsInFloatArray() { + val values = listOf(1.0F, 0.0F, Float.MAX_VALUE, Float.MIN_VALUE, Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY, Float.NaN) + val valuesArray = values.toFloatArray() + + for (index in values.indices) { + val value = values[index] + val tolerance = if (value == Float.MIN_VALUE) 0.001 * value else 0.0000001 * value + assertAlmostEquals(value, valuesArray[index], tolerance) + } + } private fun doTestNumber(value: Double, isNaN: Boolean = false, isInfinite: Boolean = false) { assertEquals(isNaN, value.isNaN(), "Expected $value to have isNaN: $isNaN")