Skip to content

Commit

Permalink
Add NonEmptyList#toNem (issue #2346) (#2541)
Browse files Browse the repository at this point in the history
  • Loading branch information
CucumisSativus authored and kailuowang committed Oct 8, 2018
1 parent ee2b5ee commit e2af59a
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 1 deletion.
15 changes: 15 additions & 0 deletions core/src/main/scala/cats/data/NonEmptyList.scala
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,21 @@ final case class NonEmptyList[+A](head: A, tail: List[A]) {
*/
def groupByNem[B](f: A => B)(implicit B: Order[B]): NonEmptyMap[B, NonEmptyList[A]] =
NonEmptyMap.fromMapUnsafe(groupBy(f))


/**
* Creates new `NonEmptyMap`, similarly to List#toMap from scala standard library.
*{{{
* scala> import cats.data._
* scala> import cats.instances.int._
* scala> val nel = NonEmptyList((0, "a"), List((1, "b"),(0, "c"), (2, "d")))
* scala> nel.toNem
* res0: NonEmptyMap[Int,String] = Map(0 -> c, 1 -> b, 2 -> d)
*}}}
*
*/
def toNem[T, U](implicit ev: A <:< (T, U), order: Order[T]): NonEmptyMap[T, U] =
NonEmptyMap.fromMapUnsafe(SortedMap(toList.map(ev): _*)(order.toOrdering))
}

object NonEmptyList extends NonEmptyListInstances {
Expand Down
9 changes: 8 additions & 1 deletion tests/src/test/scala/cats/tests/NonEmptyListSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ package tests

import cats.kernel.laws.discipline.{SemigroupTests, OrderTests, PartialOrderTests, EqTests}

import cats.data.{NonEmptyList, NonEmptyVector}
import cats.data.{NonEmptyList, NonEmptyVector, NonEmptyMap}
import cats.data.NonEmptyList.ZipNonEmptyList
import cats.laws.discipline.arbitrary._
import cats.laws.discipline.{CommutativeApplyTests, BimonadTests, NonEmptyTraverseTests, ReducibleTests, SemigroupKTests, SerializableTests}
import scala.collection.immutable.SortedMap

class NonEmptyListSuite extends CatsSuite {
// Lots of collections here.. telling ScalaCheck to calm down a bit
Expand Down Expand Up @@ -315,6 +316,12 @@ class NonEmptyListSuite extends CatsSuite {
ior.right.map(xs => xs.sorted should === (xs))
}
}

test("NonEmptyList#toNem is consistent with List#toMap and creating NonEmptyMap from it") {
forAll { nel: NonEmptyList[(Int, String)] =>
nel.toNem should ===(NonEmptyMap.fromMapUnsafe(SortedMap.empty[Int, String] ++ nel.toList.toMap))
}
}
}

@deprecated("to be able to test deprecated methods", since = "1.0.0-RC1")
Expand Down

0 comments on commit e2af59a

Please sign in to comment.