wordify-0.1.0.0: test/Tests/PosTest.hs
module Tests.PosTest (inBoundsProperty, lettersRightProperty, lettersLeftProperty, lettersBelowProperty, lettersAboveProperty, correctGridPos) where
import Wordify.Rules.Pos
import Data.Maybe
import Data.Char
import Wordify.Rules.Pos.Internal
import Tests.Instances
inBoundsProperty :: (Int, Int) -> Bool
inBoundsProperty (x,y)
| (x > 15) = isNothing $ posAt (x,y)
| (y > 15) = isNothing $ posAt (x,y)
| (x < 1) = isNothing $ posAt (x,y)
| (y < 1) = isNothing $ posAt (x,y)
| otherwise = isJust $ posAt (x,y)
correctGridPos :: (Int, Int) -> Bool
correctGridPos (x,y)
| (x >= 1 && x <= 15 && y >= 1 && y <= 15) =
let pos = posAt (x,y) in maybe (False) (\thePos -> gridValue thePos == expectedGrid) pos
| otherwise = isNothing $ posAt (x,y)
where
expectedGrid = [chr (x + 64)] ++ (show y)
lettersRightProperty :: Pos -> Bool
lettersRightProperty pos
| (xPos pos == 15) = isNothing $ right pos
| otherwise = let rightPos = right pos
in maybe (False) (\rightPos -> xPos rightPos == xPos pos + 1 && yPos pos == yPos rightPos) rightPos
lettersLeftProperty :: Pos -> Bool
lettersLeftProperty pos
| (xPos pos == 1) = isNothing $ left pos
| otherwise = let leftPos = left pos
in maybe (False) (\leftPos -> xPos leftPos == xPos pos - 1 && yPos pos == yPos leftPos) leftPos
lettersBelowProperty :: Pos -> Bool
lettersBelowProperty pos
| (yPos pos == 1) = isNothing $ below pos
| otherwise = let belowPos = below pos
in maybe (False) (\belowPos -> yPos belowPos == yPos pos - 1 && xPos pos == xPos belowPos) belowPos
lettersAboveProperty :: Pos -> Bool
lettersAboveProperty pos
| (yPos pos == 15) = isNothing $ above pos
| otherwise = let abovePos = above pos
in maybe (False) (\abovePos -> yPos abovePos == yPos pos + 1 && xPos pos == xPos abovePos) abovePos