diff --git a/src/main/scala/ninetyNineScalaProblems/Problem04.scala b/src/main/scala/ninetyNineScalaProblems/Problem04.scala new file mode 100644 index 0000000..717e7c7 --- /dev/null +++ b/src/main/scala/ninetyNineScalaProblems/Problem04.scala @@ -0,0 +1,19 @@ +package ninetyNineScalaProblems + +import scala.annotation.tailrec + +object Problem04: + def listLength(list: List[Any]): Int = + @tailrec + def loop(cursor: List[Any], acc: Int): Int = + cursor match + case head :: tail => + loop(tail, acc + 1) + case Nil => + acc + + loop(list, 0) + +object Problem04Stdlib: + def listLength(list: List[Any]): Int = + list.length \ No newline at end of file diff --git a/src/test/scala/ninetyNineScalaProblems/Problem04Suite.scala b/src/test/scala/ninetyNineScalaProblems/Problem04Suite.scala new file mode 100644 index 0000000..56b831d --- /dev/null +++ b/src/test/scala/ninetyNineScalaProblems/Problem04Suite.scala @@ -0,0 +1,12 @@ +package ninetyNineScalaProblems + +class Problem04Suite extends munit.FunSuite: + List( + (List(1, 2, 3, 4, 5), 5), + (List(1), 1), + (List(), 0) + ).foreach: + case (list, expected) => + test(s"listLength returns [$expected]"): + assertEquals(Problem04.listLength(list), expected) + assertEquals(Problem04Stdlib.listLength(list), expected) \ No newline at end of file