packages feed

RFC1751-0.1.0.0: tests/Tests.hs

module Tests (tests) where

import Data.Char
import Data.Binary
import qualified Data.ByteString.Lazy.Char8 as C
import Data.RFC1751
import Test.Framework
import Test.Framework.Providers.QuickCheck2

tests :: [Test]
tests =
    [ testGroup "RFC-1751"
        [ testProperty "Encode/Decode RFC-1751 keys" decodeEncode
        , testProperty "Encode/Decode RFC-1751 keys (lowercase)" decodeEncodeLc
        , testProperty "Double 64-bit key" doubleWord64
        ]
    ]

fromRight :: Either a b -> b
fromRight (Right b) = b
fromRight _ = error "Either.fromRight: Left"

decodeEncode :: (Word64, Word64) -> Bool
decodeEncode (w1, w2) =
   bs == bs'
 where
   bs = encode w1 `C.append` encode w2
   hk = decode bs :: HumanKey
   bs' = encode hk

decodeEncodeLc :: (Word64, Word64) -> Bool
decodeEncodeLc (w1, w2) =
    bs == bs'
  where
    bs = encode w1 `C.append` encode w2
    hk = decode bs :: HumanKey
    hk' = fromRight . humanKey . map toLower $ show hk
    bs' = encode hk'

doubleWord64 :: Word64 -> Bool
doubleWord64 w =
    ws1 == ws2
  where
    bs = encode w `C.append` encode w
    hk = decode bs :: HumanKey
    (ws1, ws2) = splitAt 6 $ words $ show hk