packages feed

hex-text-0.1.0.6: test/Main.hs

import Data.Foldable (Foldable (fold))
import Data.Semigroup ()
import Data.String (IsString (fromString))
import Numeric.Natural (Natural)
import System.Exit (die)
import Text.Hex (decodeHex, encodeHex, lazilyEncodeHex)

import qualified Data.ByteString as ByteString
import qualified Data.ByteString.Lazy as LazyByteString
import qualified Data.Text as Text
import qualified Data.Text.Lazy as LazyText

main :: IO ()
main = run tests

tests :: [Natural]
tests = encodeHexTests ++ decodeHexTests ++ lazilyEncodeHexTests

run :: [Natural] -> IO ()
run [] = putStrLn "Okay"
run xs = die $ "Test failures: " ++ show (xs :: [Natural])

infix 0 #
(#) :: a -> Bool -> [a]
x # True  = []
x # False = [x]

encodeHexTests :: [Natural]
encodeHexTests = fold
  [ 1 # (encodeHex . ByteString.singleton) 192
      == fromString "c0"
  , 2 # (encodeHex . ByteString.singleton) 168
      == fromString "a8"
  , 3 # (encodeHex . ByteString.pack) [192, 168, 1, 2]
      == fromString "c0a80102"
  ]

decodeHexTests :: [Natural]
decodeHexTests = fold
  [ 4 # (fmap ByteString.unpack . decodeHex . Text.pack) "c0a80102"
      == Just [192,168,1,2]
  , 5 # (fmap ByteString.unpack . decodeHex . Text.pack) "c0a8010"
      == Nothing
  , 6 # (fmap ByteString.unpack . decodeHex . Text.pack) "x0a80102"
      == Nothing
  , 7 # (fmap ByteString.unpack . decodeHex . Text.pack) "C0A80102"
      == Just [192,168,1,2]
  ]

lazilyEncodeHexTests :: [Natural]
lazilyEncodeHexTests = fold
  [ 8 # (LazyText.take 8 . lazilyEncodeHex . LazyByteString.pack . cycle) [1, 2, 3]
      == fromString "01020301"
  ]