## day 2

We have a failing test from yesterday, which is a cool way to end a day for a hobby project.

``````[info]   Moving to the left the current piece should
[info]     + change the blocks in the view
[info]     x as long as it doesn't hit the wall.
[error]  List((0,0), (-1,17), (0,17), (1,17), (0,18)) does not contain (2,17), (1,18) and must not contain '(-1,17)' is equal to '(0,17)', '(0,18)' is equal to '(2,17)' in order (StageSpec.scala:22)
``````

Sometimes it takes five minutes just to catch yourself up to where you last left off and what needs to be done next. A failing test case is a way to tell your future self “hey, work on this next!”

### validation

Let’s see the current implementation of `moveBy`:

``````  private[this] def moveBy(delta: (Double, Double)): this.type = {
val moved = currentPiece.moveBy(delta)
currentPiece = moved
this
}
``````

All we need here is a validation of `moved` by checking that all blocks in `moved.current` are within the bounds. Scala collection library has `forall` method that does exactly that. No need for looping `if` statements:

``````  private[this] def moveBy(delta: (Double, Double)): this.type = {
validate(
currentPiece.moveBy(delta),
unload(currentPiece, blocks)) map { case (moved, unloaded) =>
currentPiece = moved
}
this
}
private[this] def validate(p: Piece, bs: Seq[Block]): Option[(Piece, Seq[Block])] =
if (p.current map {_.pos} forall inBounds) Some(p, bs)
else None
private[this] def inBounds(pos: (Int, Int)): Boolean =
(pos._1 >= 0) && (pos._1 < size._1) && (pos._2 >= 0) && (pos._2 < size._2)
``````

This should pass the test:

``````[info] Moving to the left the current piece should
[info] + change the blocks in the view,
[info] + as long as it doesn't hit the wall
``````