quiver-binary-0.1.0.0: test/PropTests.hs
{-# LANGUAGE RankNTypes #-}
{- |
Module : Main
Description : Properties for quiver-binary
Copyright : (c) Ivan Lazar Miljenovic
License : MIT
Maintainer : Ivan.Miljenovic@gmail.com
-}
module Main (main) where
import Control.Quiver.Binary
import Control.Quiver.SP
import Data.Functor.Identity
import Test.Hspec
import Test.Hspec.QuickCheck (prop)
import Test.QuickCheck
--------------------------------------------------------------------------------
main :: IO ()
main = hspec $
describe "decode . encode = id" $ do
prop "strict ByteStrings" $
forAllShrink (arbitrary :: Gen [Int]) shrink $ idProp spencode spdecode
prop "lazy ByteStrings" $
forAllShrink (arbitrary :: Gen [Int]) shrink $ idProp spencodeL spdecodeL
idProp :: (Eq a) => SP a b Identity () -> SP b a Identity String -> [a] -> Bool
idProp enc dec as = runIdentity (sprun pipeline) == as
where
pipeline = spevery as >->> enc >->> dec >->> spToList >&> snd
spToList :: SQ a x f [a]
spToList = spfoldr (:) []