diff --git a/arrow-libs/core/arrow-core/api/arrow-core.api b/arrow-libs/core/arrow-core/api/arrow-core.api index 54eaa80bfe4..7407e7283cc 100644 --- a/arrow-libs/core/arrow-core/api/arrow-core.api +++ b/arrow-libs/core/arrow-core/api/arrow-core.api @@ -743,6 +743,10 @@ public final class arrow/core/NonEmptyList$Companion { public final class arrow/core/NonEmptyListKt { public static final fun compareTo (Larrow/core/NonEmptyList;Larrow/core/NonEmptyList;)I public static final fun flatten (Larrow/core/NonEmptyList;)Larrow/core/NonEmptyList; + public static final fun max (Larrow/core/NonEmptyList;)Ljava/lang/Comparable; + public static final fun maxBy (Larrow/core/NonEmptyList;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun min (Larrow/core/NonEmptyList;)Ljava/lang/Comparable; + public static final fun minBy (Larrow/core/NonEmptyList;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun nel (Ljava/lang/Object;)Larrow/core/NonEmptyList; public static final fun nonEmptyListOf (Ljava/lang/Object;[Ljava/lang/Object;)Larrow/core/NonEmptyList; public static final fun sequence (Larrow/core/NonEmptyList;)Larrow/core/Either; diff --git a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/NonEmptyList.kt b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/NonEmptyList.kt index 123f6b19ac6..80e58e68eb1 100644 --- a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/NonEmptyList.kt +++ b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/NonEmptyList.kt @@ -396,6 +396,18 @@ public operator fun > NonEmptyList.compareTo(other: NonEmpt public fun NonEmptyList>.flatten(): NonEmptyList = this.flatMap(::identity) +public inline fun > NonEmptyList.minBy(selector: (A) -> B): A = + minByOrNull(selector)!! + +public inline fun > NonEmptyList.maxBy(selector: (A) -> B): A = + maxByOrNull(selector)!! + +public inline fun > NonEmptyList.min(): T = + minOrNull()!! + +public inline fun > NonEmptyList.max(): T = + maxOrNull()!! + public fun NonEmptyList>.unzip(): Pair, NonEmptyList> = this.unzip(::identity) diff --git a/arrow-libs/core/arrow-core/src/commonTest/kotlin/arrow/core/NonEmptyListTest.kt b/arrow-libs/core/arrow-core/src/commonTest/kotlin/arrow/core/NonEmptyListTest.kt index 96d6e0eec39..1d748c1b93c 100644 --- a/arrow-libs/core/arrow-core/src/commonTest/kotlin/arrow/core/NonEmptyListTest.kt +++ b/arrow-libs/core/arrow-core/src/commonTest/kotlin/arrow/core/NonEmptyListTest.kt @@ -267,5 +267,46 @@ class NonEmptyListTest : UnitSpec() { result shouldBe expected } } + + "max element" { + checkAll( + Arb.nonEmptyList(Arb.int()) + ) { a -> + val result = a.max() + val expected = a.maxOrNull() + result shouldBe expected + } + } + + "maxBy element" { + checkAll( + Arb.nonEmptyList(Arb.int()) + ) { a -> + val result = a.maxBy(::identity) + val expected = a.maxByOrNull(::identity) + result shouldBe expected + } + } + + "min element" { + checkAll( + Arb.nonEmptyList(Arb.int()) + ) { a -> + val result = a.min() + val expected = a.minOrNull() + result shouldBe expected + } + } + + + "minBy element" { + checkAll( + Arb.nonEmptyList(Arb.int()) + ) { a -> + val result = a.minBy(::identity) + val expected = a.minByOrNull(::identity) + result shouldBe expected + } + } } }