word8-0.1.4: test/Word8Spec.hs
module Word8Spec where
import qualified Data.Char as C
import Data.Word8
import Test.Hspec
allWord8 :: [Word8]
allWord8 = [0 .. 255]
spec :: Spec
spec = do
describe "isControl" $ do
it "behaves like model" $
(isControl <$> allWord8)
== (C.isControl . word8ToChar <$> allWord8)
describe "isSpace" $ do
it "behaves like model" $
(isSpace <$> allWord8)
== (C.isSpace . word8ToChar <$> allWord8)
describe "isLower" $ do
it "behaves like model" $
(isLower <$> allWord8)
== (C.isLower . word8ToChar <$> allWord8)
describe "isUpper" $ do
it "behaves like model" $
(isUpper <$> allWord8)
== (C.isUpper . word8ToChar <$> allWord8)
describe "isAlpha" $ do
it "behaves like model" $
(isAlpha <$> allWord8)
== (C.isAlpha . word8ToChar <$> allWord8)
describe "isAlphaNum" $ do
it "behaves like model" $
(isAlphaNum <$> allWord8)
== (C.isAlphaNum . word8ToChar <$> allWord8)
describe "isPrint" $ do
it "behaves like model" $
(isPrint <$> allWord8)
== (C.isPrint . word8ToChar <$> allWord8)
describe "isDigit" $ do
it "behaves like model" $
(isDigit <$> allWord8)
== (C.isDigit . word8ToChar <$> allWord8)
describe "isOctDigit" $ do
it "behaves like model" $
(isOctDigit <$> allWord8)
== (C.isOctDigit . word8ToChar <$> allWord8)
describe "isHexDigit" $ do
it "behaves like model" $
(isHexDigit <$> allWord8)
== (C.isHexDigit . word8ToChar <$> allWord8)
describe "isLetter" $ do
it "behaves like model" $
(isLetter <$> allWord8)
== (C.isLetter . word8ToChar <$> allWord8)
describe "isMark" $ do
it "behaves like model" $
(isMark <$> allWord8)
== (C.isMark . word8ToChar <$> allWord8)
describe "isNumber" $ do
it "behaves like model" $
(isNumber <$> allWord8)
== (C.isNumber . word8ToChar <$> allWord8)
describe "isPunctuation" $ do
it "behaves like model" $
(isPunctuation <$> allWord8)
== (C.isPunctuation . word8ToChar <$> allWord8)
describe "isSymbol" $ do
it "behaves like model" $
(isSymbol <$> allWord8)
== (C.isSymbol . word8ToChar <$> allWord8)
describe "isSeparator" $ do
it "behaves like model" $
(isSeparator <$> allWord8)
== (C.isSeparator . word8ToChar <$> allWord8)
describe "isAscii" $ do
it "behaves like model" $
(isAscii <$> allWord8)
== (C.isAscii . word8ToChar <$> allWord8)
describe "isLatin1" $ do
it "behaves like model" $
(isLatin1 <$> allWord8)
== (C.isLatin1 . word8ToChar <$> allWord8)
describe "isAsciiUpper" $ do
it "behaves like model" $
(isAsciiUpper <$> allWord8)
== (C.isAsciiUpper . word8ToChar <$> allWord8)
describe "isAsciiLower" $ do
it "behaves like model" $
(isAsciiLower <$> allWord8)
== (C.isAsciiLower . word8ToChar <$> allWord8)
describe "toUpper" $ do
it "behaves like model" $
(word8ToChar . toUpper <$> allWord8)
== (latin1Model C.toUpper . word8ToChar <$> allWord8)
describe "toLower" $ do
it "behaves like model" $
(word8ToChar . toLower <$> allWord8)
== (latin1Model C.toLower . word8ToChar <$> allWord8)
describe "toTitle" $ do
it "behaves like model" $
(word8ToChar . toTitle <$> allWord8)
== (latin1Model C.toTitle . word8ToChar <$> allWord8)
----------------------------------------------------------------
word8ToChar :: Word8 -> Char
word8ToChar = C.chr . fromIntegral
-- Characters mapped outside Latin-1 by Data.Char must remain unchanged.
latin1Model :: (Char -> Char) -> Char -> Char
latin1Model f c = let c' = f c in if C.isLatin1 c' then c' else c