module Tests (tests) where import Control.Applicative import Data.Char import Data.Binary import qualified Data.ByteString.Lazy.Char8 as L8 import Data.Maybe 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 ] ] decodeEncode :: (Word64, Word64) -> Bool decodeEncode (w1, w2) = fromMaybe False $ (== bs) <$> (mnemonicToKey =<< keyToMnemonic bs) where bs = encode w1 `L8.append` encode w2 decodeEncodeLC :: (Word64, Word64) -> Bool decodeEncodeLC (w1, w2) = fromMaybe False $ (== bs) <$> (mnemonicToKey =<< map toLower <$> keyToMnemonic bs) where bs = encode w1 `L8.append` encode w2 doubleWord64 :: Word64 -> Bool doubleWord64 w = fromMaybe False $ do (\(x, y) -> x == y) . splitAt 6 . words <$> keyToMnemonic bs where bs = encode w `L8.append` encode w