h2048-0.3.0.0: test/Game/H2048/CoreSpec.hs
module Game.H2048.CoreSpec where
import Test.Hspec
import Game.H2048.Core
spec :: Spec
spec = do
describe "compactLine" $
specify "examples" $ do
let clTest inp expected =
compactLine' (mkLine inp)
`shouldBe` (eScore, mkLine eLine)
where
(eScore, eLine) = expected
clTest [0,0,0,0] (0,[0,0,0,0])
clTest [1,0,0,1] (2,[2,0,0,0])
clTest [2,2,2,2] (8,[4,4,0,0])
clTest [2,4,4,2] (8,[2,8,2,0])
clTest [2,4,8,2] (0,[2,4,8,2])
clTest [0,1,0,1] (2,[2,0,0,0])
clTest [1,0,2,0] (0,[1,2,0,0])
describe "gameState" $ do
let gWonAlive = GS True True
gWon = GS True False
gAlive = GS False True
gLose = GS False False
gameState' = gameState . mkBoard
specify "trivial win, alive" $
gameState'
[ [ 2048, 2048, 2048, 2048 ]
, [ 0, 0, 0, 0 ]
, [ 0, 0, 0, 0 ]
, [ 0, 0, 0, 0 ]
] `shouldBe` gWonAlive
specify "more than 2048 (might not happen in practice)" $
gameState'
[ [ 256, 2, 4, 8 ]
, [ 16, 32, 64, 128 ]
, [ 256, 512, 1024, 8 ]
, [ 16, 4096, 128, 64 ]
] `shouldBe` gWon
specify "no more move but win" $
gameState'
[ [ 2, 4, 2, 4 ]
, [ 4, 2048, 4, 2 ]
, [ 2, 4, 2, 4 ]
, [ 4, 2, 4, 2 ]
] `shouldBe` gWon
specify "trivial alive" $
gameState'
[ [ 2, 0, 0, 8 ]
, [ 4, 0, 0, 8 ]
, [ 4, 0, 0, 8 ]
, [ 1024, 512, 128, 64 ]
] `shouldBe` gAlive
specify "no empty cell but still alive" $
gameState'
[ [ 512, 128, 512, 128 ]
, [ 128, 512, 128, 512 ]
, [ 512, 128, 512, 128 ]
, [ 128, 512, 128, 128 ]
] `shouldBe` gAlive
specify "trivial lose 1" $
gameState'
[ [ 2, 4, 2, 4 ]
, [ 4, 2, 4, 2 ]
, [ 2, 4, 2, 4 ]
, [ 4, 2, 4, 2 ]
] `shouldBe` gLose
specify "trivial lose 2" $
gameState'
[ [ 2, 8, 32, 2 ]
, [ 4, 2, 8, 4 ]
, [ 32, 16, 128, 16 ]
, [ 4, 8, 4, 2 ]
] `shouldBe` gLose