package Ġxyz . wy w ong . just chess . engine . piece čĊč Ċ import Ġxyz . wy w ong . just chess . engine . Coordinate č Ċ import Ġxyz . wy w ong . just chess . engine . mocks . Fake Board č Ċ import Ġorg . junit . Assert . fail č Ċ import Ġorg . junit . Test čĊč Ċ class ĠKing UnitTest Ġ{ čĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġcan _ create _ king () Ġ{ čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 1 , Ġ 1 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Failed Ġto Ġinstantiate Ġking ") čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġall _ moves _ valid () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġking Ġ= ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 1 , Ġ 1 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġvalid Moves Ġ= Ġking . get Valid Moves ( Fake Board ( false )) čĊĠĠĠĠĠĠĠ Ġval Ġdest inations Ġ= Ġvalid Moves . flatMap Ġ{ Ġmoves Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . map Ġ{ Ġmove Ġ-> Ġmove . destination Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġassert ( dest inations . size Ġ== Ġ 8 ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġtop _ moves _ not _ valid () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġking Ġ= ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 1 , Ġ 0 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġvalid Moves Ġ= Ġking . get Valid Moves ( Fake Board ( false )) čĊĠĠĠĠĠĠĠ Ġval Ġdest inations Ġ= Ġvalid Moves . flatMap Ġ{ Ġmoves Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . map Ġ{ Ġmove Ġ-> Ġmove . destination Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġassert ( dest inations . size Ġ== Ġ 5 ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġbottom _ moves _ not _ valid () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġking Ġ= ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 1 , Ġ 7 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġvalid Moves Ġ= Ġking . get Valid Moves ( Fake Board ( false )) čĊĠĠĠĠĠĠĠ Ġval Ġdest inations Ġ= Ġvalid Moves . flatMap Ġ{ Ġmoves Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . map Ġ{ Ġmove Ġ-> Ġmove . destination Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġassert ( dest inations . size Ġ== Ġ 5 ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġleft _ moves _ not _ valid () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġking Ġ= ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 0 , Ġ 1 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġvalid Moves Ġ= Ġking . get Valid Moves ( Fake Board ( false )) čĊĠĠĠĠĠĠĠ Ġval Ġdest inations Ġ= Ġvalid Moves . flatMap Ġ{ Ġmoves Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . map Ġ{ Ġmove Ġ-> Ġmove . destination Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġassert ( dest inations . size Ġ== Ġ 5 ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġright _ moves _ not _ valid () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġking Ġ= ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 7 , Ġ 1 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġvalid Moves Ġ= Ġking . get Valid Moves ( Fake Board ( false )) čĊĠĠĠĠĠĠĠ Ġval Ġdest inations Ġ= Ġvalid Moves . flatMap Ġ{ Ġmoves Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . map Ġ{ Ġmove Ġ-> Ġmove . destination Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġassert ( dest inations . size Ġ== Ġ 5 ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġtop _ left _ moves () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġking Ġ= ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 0 , Ġ 0 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġvalid Moves Ġ= Ġking . get Valid Moves ( Fake Board ( false )) čĊĠĠĠĠĠĠĠ Ġval Ġdest inations Ġ= Ġvalid Moves . flatMap Ġ{ Ġmoves Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . map Ġ{ Ġmove Ġ-> Ġmove . destination Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġassert ( dest inations . size Ġ== Ġ 3 ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġtop _ right _ moves () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġking Ġ= ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 7 , Ġ 0 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġvalid Moves Ġ= Ġking . get Valid Moves ( Fake Board ( false )) čĊĠĠĠĠĠĠĠ Ġval Ġdest inations Ġ= Ġvalid Moves . flatMap Ġ{ Ġmoves Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . map Ġ{ Ġmove Ġ-> Ġmove . destination Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġassert ( dest inations . size Ġ== Ġ 3 ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġbottom _ left _ moves () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġking Ġ= ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 0 , Ġ 7 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġvalid Moves Ġ= Ġking . get Valid Moves ( Fake Board ( false )) čĊĠĠĠĠĠĠĠ Ġval Ġdest inations Ġ= Ġvalid Moves . flatMap Ġ{ Ġmoves Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . map Ġ{ Ġmove Ġ-> Ġmove . destination Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġassert ( dest inations . size Ġ== Ġ 3 ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġbottom _ right _ moves () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġking Ġ= ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 7 , Ġ 7 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġvalid Moves Ġ= Ġking . get Valid Moves ( Fake Board ( false )) čĊĠĠĠĠĠĠĠ Ġval Ġdest inations Ġ= Ġvalid Moves . flatMap Ġ{ Ġmoves Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . map Ġ{ Ġmove Ġ-> Ġmove . destination Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġassert ( dest inations . size Ġ== Ġ 3 ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest inations . contains ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġcannot _ move _ to _ check () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġking Ġ= ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 1 , Ġ 1 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġvalid Moves Ġ= Ġking . get Valid Moves ( Fake Board ( true )) čĊĠĠĠĠĠĠĠ Ġval Ġdest inations Ġ= Ġvalid Moves . flatMap Ġ{ Ġmoves Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . map Ġ{ Ġmove Ġ-> Ġmove . destination Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġassert ( dest inations . isEmpty ()) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġcan _ castle _ left () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġking Ġ= ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 4 , Ġ 7 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġvalid Moves Ġ= Ġking . get Valid Moves ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠFake Board ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR ook ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 0 , Ġ 7 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġassert ( valid Moves . size Ġ== Ġ 6 ) čĊĠĠĠĠĠĠĠ Ġval Ġcast le Move Coordinates Ġ= Ġvalid Moves . find Ġ{ Ġmoves Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . size Ġ== Ġ 2 čĊĠĠĠĠĠĠĠ Ġ} ?. map Ġ{ Ġmove Ġ-> Ġmove . destination Ġ} Ġ?: Ġempty List () čĊĠĠĠĠĠĠĠ Ġassert ( castle Move Coordinates . contains ( Coordinate ( 2 , Ġ 7 ))) čĊĠĠĠĠĠĠĠ Ġassert ( castle Move Coordinates . contains ( Coordinate ( 3 , Ġ 7 ))) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġcan _ castle _ right () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġking Ġ= ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 4 , Ġ 7 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġvalid Moves Ġ= Ġking . get Valid Moves ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠFake Board ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR ook ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 7 , Ġ 7 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġcast le Move Coordinates Ġ= Ġvalid Moves . find Ġ{ Ġmoves Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . size Ġ== Ġ 2 čĊĠĠĠĠĠĠĠ Ġ} ?. map Ġ{ Ġmove Ġ-> Ġmove . destination Ġ} Ġ?: Ġempty List () čĊĠĠĠĠĠĠĠ Ġassert ( castle Move Coordinates . contains ( Coordinate ( 6 , Ġ 7 ))) čĊĠĠĠĠĠĠĠ Ġassert ( castle Move Coordinates . contains ( Coordinate ( 5 , Ġ 7 ))) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġcannot _ castle _ left _ if _ ro ok _ moved () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġking Ġ= ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 4 , Ġ 7 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġvalid Moves Ġ= Ġking . get Valid Moves ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠFake Board ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR ook ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 0 , Ġ 7 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġdest inations Ġ= Ġvalid Moves . flatMap Ġ{ Ġmoves Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . map Ġ{ Ġmove Ġ-> Ġmove . destination Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġassert ( dest inations . size Ġ== Ġ 5 ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġcannot _ castle _ right _ if _ ro ok _ moved () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġking Ġ= ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 4 , Ġ 7 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġvalid Moves Ġ= Ġking . get Valid Moves ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠFake Board ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR ook ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 7 , Ġ 7 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġdest inations Ġ= Ġvalid Moves . flatMap Ġ{ Ġmoves Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . map Ġ{ Ġmove Ġ-> Ġmove . destination Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġassert ( dest inations . size Ġ== Ġ 5 ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Test čĊĠĠĠ Ġfun Ġcannot _ castle _ if _ checked () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġking Ġ= ĠKing ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 4 , Ġ 7 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġvalid Moves Ġ= Ġking . get Valid Moves ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠFake Board ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR ook ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( 0 , Ġ 7 ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġval Ġdest inations Ġ= Ġvalid Moves . flatMap Ġ{ Ġmoves Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . map Ġ{ Ġmove Ġ-> Ġmove . destination Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġassert ( dest inations . isEmpty ()) čĊĠĠĠ Ġ} čĊč Ċ }