packages feed

haskoin-core-0.2.0: tests/Network/Haskoin/Crypto/Base58/Units.hs

{-# LANGUAGE OverloadedStrings #-}
module Network.Haskoin.Crypto.Base58.Units (tests) where

import Test.HUnit (Assertion, assertBool)
import Test.Framework (Test, testGroup)
import Test.Framework.Providers.HUnit (testCase)

import Data.ByteString (ByteString)
import qualified Data.ByteString as BS (append, pack, empty)

import Network.Haskoin.Crypto

tests :: [Test]
tests =
    [ testGroup "Test base58 encodings"
        ( map mapBase58Vec $ zip vectors [0..] )
    ]

mapBase58Vec :: ((ByteString, ByteString, ByteString), Int) -> Test.Framework.Test
mapBase58Vec (v, i) =
    testCase (unwords [ "Test base58 vector", show i ]) $ runVector v

runVector :: (ByteString, ByteString, ByteString) -> Assertion
runVector (bs, e, chk) = do
    assertBool "encodeBase58" $ e == b58
    assertBool "encodeBase58Check" $ chk == b58Chk
    assertBool "decodeBase58" $ Just bs == decodeBase58 b58
    assertBool "decodeBase58Check" $ Just bs == decodeBase58Check b58Chk
  where
    b58    = encodeBase58 bs
    b58Chk = encodeBase58Check bs

vectors :: [(ByteString, ByteString, ByteString)]
vectors =
    [ ( BS.empty, "", "3QJmnh" )
    , ( BS.pack [0], "1", "1Wh4bh" )
    , ( BS.pack [0,0,0,0], "1111", "11114bdQda" )
    , ( BS.pack [0,0,1,0,0], "11LUw", "113CUwsFVuo" )
    , ( BS.pack [255], "5Q", "VrZDWwe" )
    , ( BS.pack [0,0,0,0] `BS.append` BS.pack [1..255]
      , "1111cWB5HCBdLjAuqGGReWE3R3CguuwSjw6RHn39s2yuDRTS5NsBgNiFpWgAnEx6VQi8csexkgYw3mdYrMHr8x9i7aEwP8kZ7vccXWqKDvGv3u1GxFKPuAkn8JCPPGDMf3vMMnbzm6Nh9zh1gcNsMvH3ZNLmP5fSG6DGbbi2tuwMWPthr4boWwCxf7ewSgNQeacyozhKDDQQ1qL5fQFUW52QKUZDZ5fw3KXNQJMcNTcaB723LchjeKun7MuGW5qyCBZYzA1KjofN1gYBV3NqyhQJ3Ns746GNuf9N2pQPmHz4xpnSrrfCvy6TVVz5d4PdrjeshsWQwpZsZGzvbdAdN8MKV5QsBDY"
      , "111151KWPPBRzdWPr1ASeu172gVgLf1YfUp6VJyk6K9t4cLqYtFHcMa2iX8S3NJEprUcW7W5LvaPRpz7UG7puBj5STE3nKhCGt5eckYq7mMn5nT7oTTic2BAX6zDdqrmGCnkszQkzkz8e5QLGDjf7KeQgtEDm4UER6DMSdBjFQVa6cHrrJn9myVyyhUrsVnfUk2WmNFZvkWv3Tnvzo2cJ1xW62XDfUgYz1pd97eUGGPuXvDFfLsBVd1dfdUhPwxW7pMPgdWHTmg5uqKGFF6vE4xXpAqZTbTxRZjCDdTn68c2wrcxApm8hq3JX65Hix7VtcD13FF8b7BzBtwjXq1ze6NMjKgUcqpJTN9vt"
      )
    ]