Skip to content

Instantly share code, notes, and snippets.

@arkadius
Created January 3, 2015 00:30
Show Gist options
  • Save arkadius/bd5dc29439f1bac02314 to your computer and use it in GitHub Desktop.
Save arkadius/bd5dc29439f1bac02314 to your computer and use it in GitHub Desktop.
it should "do round-trip" in {
forAll(initialBoardAndChangesGenerator) {
case InitialBoardAndChanges(initialBoard, changes) =>
lazy val boardAndEventsStream: Stream[(BoardState, Seq[TaskEvent])] =
(initialBoard, Nil) #::
(boardAndEventsStream zip changes).map {
case ((prevBoard, events), changedBoard) =>
val newAddedEvents = prevBoard.diff(changedBoard)
(changedBoard, newAddedEvents)
}
boardAndEventsStream.drop(1).foldLeft(initialBoard) {
case (prevBoard, (boardAfterGeneratedChanges, events)) =>
val boardAfterEventsAccumulation = events.foldLeft(prevBoard) { (board, event) =>
board.plus(event)
}
withMoreReadeableClue(prevBoard, events, boardAfterGeneratedChanges, boardAfterEventsAccumulation) {
boardAfterEventsAccumulation shouldEqual boardAfterGeneratedChanges
}
boardAfterEventsAccumulation
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment