diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Arrays.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Arrays.kt index ae3e033d9b7..c92f7da1673 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Arrays.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Arrays.kt @@ -99,18 +99,16 @@ object ArrayOps : TemplateGroupBase() { } } on(Platform.Native) { + fun notEq(operand1: String, operand2: String) = when { + primitive?.isFloatingPoint() == true -> "!$operand1.equals($operand2)" + else -> "$operand1 != $operand2" + } body { """ - if (this === other) { - return true - } - if (size != other.size) { - return false - } + if (this === other) return true + if (size != other.size) return false for (i in indices) { - if (this[i] != other[i]) { - return false - } + if (${notEq("this[i]", "other[i]")}) return false } return true """ diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Comparables.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Comparables.kt index a50153b498e..096f7fa3e0f 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Comparables.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Comparables.kt @@ -178,11 +178,10 @@ object ComparableOps : TemplateGroupBase() { on(Platform.Native) { body { """ - // TODO: Check +/-0.0 return when { a.isNaN() -> a b.isNaN() -> b - else -> $defaultImpl + else -> if (a.compareTo(b) <= 0) a else b } """ } @@ -318,12 +317,7 @@ object ComparableOps : TemplateGroupBase() { on(Platform.Native) { body { """ - // TODO: Check +/-0.0 - return when { - a.isNaN() -> a - b.isNaN() -> b - else -> $defaultImpl - } + return if (a.compareTo(b) >= 0) a else b """ } }