Список равенств с использованием комбинаторов парсера

Я взял код парсинга CSV Scala отсюда:

Используйте комбинатор анализатора Scala для анализа файлов CSV

А затем я попытался написать для него базовый тест:

assertEquals(List(List()), CSV.parse(""))

И это терпит неудачу с сообщением:

java.lang.AssertionError: ожидалось: scala.collection.immutable.$colon$colon, но было: scala.collection.immutable.$colon$colon

Любые идеи? Вывод из CSV.parse представляет собой пустой список [List [String]], но, похоже, имеет другой хэш-код, чем List (Nil) или ListList [String] и т. д. Я не могу найти способ составить список, который равно выводу CSV.parse("").

ОБНОВЛЕНИЕ:

Вот сбой при использовании REPL:

scala> assertEquals(List(Nil), CSV.parse("")) 
java.lang.AssertionError: expected: scala.collection.immutable.$colon$colon<List(List())> but was: scala.collection.immutable.$colon$colon<List(List())>

person Alex Black    schedule 13.07.2011    source источник


Ответы (1)


Отредактировано: я попробовал синтаксический анализатор, указанный в ссылке:

scala> CSV.parse("")
res7: List[List[String]] = List(List(""))

Таким образом, очевидно, он возвращает не список с пустым списком, а список со списком с пустой строкой. Так что ваш тест должен провалиться.

person paradigmatic    schedule 13.07.2011
comment
Хороший улов, спасибо, вот и все. Что меня смутило, так это то, что println(List(List()) и println(List[List[String]](Nil)) имеют одинаковый вывод, поэтому в моих вызовах println и при сбоях JUnit я, похоже, получал одно и то же значения с обеих сторон. - person Alex Black; 15.07.2011
comment
Я (пока) не понимаю, как/почему REPL показывает вывод, отличный от toString. - person Alex Black; 15.07.2011