diff --git a/libraries/stdlib/test/collections/UnsignedArraysTest.kt b/libraries/stdlib/test/collections/UnsignedArraysTest.kt index 030e1bfebbf..db3f56d2d21 100644 --- a/libraries/stdlib/test/collections/UnsignedArraysTest.kt +++ b/libraries/stdlib/test/collections/UnsignedArraysTest.kt @@ -518,6 +518,16 @@ class UnsignedArraysTest { } } + @Test + fun reduceOrNull() { + expect(0u) { ubyteArrayOf(3, 2, 1).reduceOrNull { acc, e -> (acc - e).toUByte() } } + expect(0u) { ushortArrayOf(3, 2, 1).reduceOrNull { acc, e -> (acc - e).toUShort() } } + expect((-4).toUInt()) { uintArrayOf(1, 2, 3).reduceOrNull { acc, e -> acc - e } } + expect((-4).toULong()) { ulongArrayOf(1, 2, 3).reduceOrNull { acc, e -> acc - e } } + + assertNull(uintArrayOf().reduceOrNull { acc, e -> acc + e }) + } + @Test fun reduceIndexed() { expect(1u) { ubyteArrayOf(3, 2, 1).reduceIndexed { index, acc, e -> if (index != 2) (e - acc).toUByte() else e } } @@ -532,6 +542,16 @@ class UnsignedArraysTest { @Test fun reduceRight() { + expect(2u) { ubyteArrayOf(1, 2, 3).reduceRightOrNull { e, acc -> (e - acc).toUByte() } } + expect(2u) { ushortArrayOf(1, 2, 3).reduceRightOrNull { e, acc -> (e - acc).toUShort() } } + expect(2u) { uintArrayOf(1, 2, 3).reduceRightOrNull { e, acc -> e - acc } } + expect(2uL) { ulongArrayOf(1, 2, 3).reduceRightOrNull { e, acc -> e - acc } } + + assertNull(uintArrayOf().reduceRightOrNull { e, acc -> e + acc }) + } + + @Test + fun reduceRightOrNull() { expect(2u) { ubyteArrayOf(1, 2, 3).reduceRight { e, acc -> (e - acc).toUByte() } } expect(2u) { ushortArrayOf(1, 2, 3).reduceRight { e, acc -> (e - acc).toUShort() } } expect(2u) { uintArrayOf(1, 2, 3).reduceRight { e, acc -> e - acc } } diff --git a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt index 886a10b0a5c..e6b89c5f63c 100644 --- a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt +++ b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt @@ -1447,6 +1447,15 @@ public final class kotlin/collections/ArraysKt { public static final fun reduceIndexed ([Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Ljava/lang/Object; public static final fun reduceIndexed ([SLkotlin/jvm/functions/Function3;)S public static final fun reduceIndexed ([ZLkotlin/jvm/functions/Function3;)Z + public static final fun reduceOrNull ([BLkotlin/jvm/functions/Function2;)Ljava/lang/Byte; + public static final fun reduceOrNull ([CLkotlin/jvm/functions/Function2;)Ljava/lang/Character; + public static final fun reduceOrNull ([DLkotlin/jvm/functions/Function2;)Ljava/lang/Double; + public static final fun reduceOrNull ([FLkotlin/jvm/functions/Function2;)Ljava/lang/Float; + public static final fun reduceOrNull ([ILkotlin/jvm/functions/Function2;)Ljava/lang/Integer; + public static final fun reduceOrNull ([JLkotlin/jvm/functions/Function2;)Ljava/lang/Long; + public static final fun reduceOrNull ([Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; + public static final fun reduceOrNull ([SLkotlin/jvm/functions/Function2;)Ljava/lang/Short; + public static final fun reduceOrNull ([ZLkotlin/jvm/functions/Function2;)Ljava/lang/Boolean; public static final fun reduceRight ([BLkotlin/jvm/functions/Function2;)B public static final fun reduceRight ([CLkotlin/jvm/functions/Function2;)C public static final fun reduceRight ([DLkotlin/jvm/functions/Function2;)D @@ -1465,6 +1474,15 @@ public final class kotlin/collections/ArraysKt { public static final fun reduceRightIndexed ([Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Ljava/lang/Object; public static final fun reduceRightIndexed ([SLkotlin/jvm/functions/Function3;)S public static final fun reduceRightIndexed ([ZLkotlin/jvm/functions/Function3;)Z + public static final fun reduceRightOrNull ([BLkotlin/jvm/functions/Function2;)Ljava/lang/Byte; + public static final fun reduceRightOrNull ([CLkotlin/jvm/functions/Function2;)Ljava/lang/Character; + public static final fun reduceRightOrNull ([DLkotlin/jvm/functions/Function2;)Ljava/lang/Double; + public static final fun reduceRightOrNull ([FLkotlin/jvm/functions/Function2;)Ljava/lang/Float; + public static final fun reduceRightOrNull ([ILkotlin/jvm/functions/Function2;)Ljava/lang/Integer; + public static final fun reduceRightOrNull ([JLkotlin/jvm/functions/Function2;)Ljava/lang/Long; + public static final fun reduceRightOrNull ([Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; + public static final fun reduceRightOrNull ([SLkotlin/jvm/functions/Function2;)Ljava/lang/Short; + public static final fun reduceRightOrNull ([ZLkotlin/jvm/functions/Function2;)Ljava/lang/Boolean; public static final fun requireNoNulls ([Ljava/lang/Object;)[Ljava/lang/Object; public static final fun reverse ([B)V public static final fun reverse ([C)V @@ -2062,8 +2080,10 @@ public final class kotlin/collections/CollectionsKt { public static final fun random (Ljava/util/Collection;Lkotlin/random/Random;)Ljava/lang/Object; public static final fun reduce (Ljava/lang/Iterable;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; public static final fun reduceIndexed (Ljava/lang/Iterable;Lkotlin/jvm/functions/Function3;)Ljava/lang/Object; + public static final fun reduceOrNull (Ljava/lang/Iterable;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; public static final fun reduceRight (Ljava/util/List;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; public static final fun reduceRightIndexed (Ljava/util/List;Lkotlin/jvm/functions/Function3;)Ljava/lang/Object; + public static final fun reduceRightOrNull (Ljava/util/List;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; public static final fun removeAll (Ljava/lang/Iterable;Lkotlin/jvm/functions/Function1;)Z public static final fun removeAll (Ljava/util/Collection;Ljava/lang/Iterable;)Z public static final fun removeAll (Ljava/util/Collection;Lkotlin/sequences/Sequence;)Z @@ -4678,6 +4698,7 @@ public final class kotlin/sequences/SequencesKt { public static final fun plus (Lkotlin/sequences/Sequence;[Ljava/lang/Object;)Lkotlin/sequences/Sequence; public static final fun reduce (Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; public static final fun reduceIndexed (Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function3;)Ljava/lang/Object; + public static final fun reduceOrNull (Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; public static final fun requireNoNulls (Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; public static final fun sequence (Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence; public static final fun sequenceOf ([Ljava/lang/Object;)Lkotlin/sequences/Sequence; @@ -5070,8 +5091,10 @@ public final class kotlin/text/StringsKt { public static final fun random (Ljava/lang/CharSequence;Lkotlin/random/Random;)C public static final fun reduce (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function2;)C public static final fun reduceIndexed (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function3;)C + public static final fun reduceOrNull (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function2;)Ljava/lang/Character; public static final fun reduceRight (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function2;)C public static final fun reduceRightIndexed (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function3;)C + public static final fun reduceRightOrNull (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function2;)Ljava/lang/Character; public static final fun regionMatches (Ljava/lang/CharSequence;ILjava/lang/CharSequence;IIZ)Z public static final fun regionMatches (Ljava/lang/String;ILjava/lang/String;IIZ)Z public static synthetic fun regionMatches$default (Ljava/lang/CharSequence;ILjava/lang/CharSequence;IIZILjava/lang/Object;)Z