diff --git a/libraries/stdlib/test/OrderingTest.kt b/libraries/stdlib/test/OrderingTest.kt index 523029def14..651a1d7929e 100644 --- a/libraries/stdlib/test/OrderingTest.kt +++ b/libraries/stdlib/test/OrderingTest.kt @@ -15,6 +15,7 @@ val STRING_CASE_INSENSITIVE_ORDER: Comparator = compareBy { it: String - class OrderingTest { val v1 = Item("wine", 9) val v2 = Item("beer", 10) + val v3 = Item("apple", 20) @Test fun compareByCompareTo() { @@ -145,4 +146,40 @@ class OrderingTest { assertEquals(v1, items[1]) } + @Test fun maxOf() { + assertEquals(Int.MAX_VALUE, maxOf(Int.MAX_VALUE, Int.MIN_VALUE)) + assertEquals(Int.MAX_VALUE, maxOf(Int.MAX_VALUE, Int.MIN_VALUE, 0)) + + assertEquals(Long.MAX_VALUE, maxOf(Long.MAX_VALUE, Long.MIN_VALUE)) + assertEquals(Long.MAX_VALUE, maxOf(Long.MAX_VALUE, Long.MIN_VALUE, 0)) + + assertEquals(Double.POSITIVE_INFINITY, maxOf(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY)) + assertEquals(Double.POSITIVE_INFINITY, maxOf(Double.POSITIVE_INFINITY, Double.MAX_VALUE, Double.MIN_VALUE)) + } + + @Test fun maxOfWith() { + assertEquals(v1, maxOf(v1, v2, compareBy { it.name })) + assertEquals(v1, maxOf(v3, v2, v1, compareBy { it.name })) + assertEquals(v2, maxOf(v1, v2, compareBy { it.rating })) + assertEquals(v3, maxOf(v1, v2, v3, compareBy { it.rating })) + } + + @Test fun minOf() { + assertEquals(Int.MIN_VALUE, minOf(Int.MAX_VALUE, Int.MIN_VALUE)) + assertEquals(Int.MIN_VALUE, minOf(Int.MAX_VALUE, Int.MIN_VALUE, 0)) + + assertEquals(Long.MIN_VALUE, minOf(Long.MAX_VALUE, Long.MIN_VALUE)) + assertEquals(Long.MIN_VALUE, minOf(Long.MAX_VALUE, Long.MIN_VALUE, 0)) + + assertEquals(Double.NEGATIVE_INFINITY, minOf(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY)) + assertEquals(Double.MIN_VALUE, minOf(Double.POSITIVE_INFINITY, Double.MAX_VALUE, Double.MIN_VALUE)) + } + + @Test fun minOfWith() { + assertEquals(v2, minOf(v1, v2, compareBy { it.name })) + assertEquals(v3, minOf(v3, v2, v1, compareBy { it.name })) + assertEquals(v1, minOf(v1, v2, compareBy { it.rating })) + assertEquals(v1, minOf(v1, v2, v3, compareBy { it.rating })) + } + } diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Comparables.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Comparables.kt index 01c07b84210..41d367f616e 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Comparables.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Comparables.kt @@ -136,6 +136,7 @@ fun comparables(): List { bodyForTypes(Primitives, PrimitiveType.Byte, PrimitiveType.Short) { p -> "return Math.min(a.toInt(), b.toInt()).to$p()" } + // TODO: custom body for JS minOf(Long, Long) body(Primitives) { "return Math.min(a, b)" }