packages feed

flexiwrap-0.1.0: Data/Flex/QuickCheck/Wrap.hs

-- $Header: c:/Source/Haskell/Wrapper/Data/Flex/QuickCheck/RCS/Wrap.hs,v 1.1 2011/06/04 00:46:28 dosuser Exp dosuser $

-- | QuickCheck tests for Data.Flex.Wrap

module Data.Flex.QuickCheck.Wrap where

import Test.QuickCheck

import Data.Type.TList (TNil(..), (:*:)(..))

import Data.Flex.Wrap

prop_defaultArbitrary_is_transparent i = forAll rand $ \g ->
    generate ai g wx == w (generate ai g x)
  where
    w = flexiWrap TNil
    {- N.B. The following circumlocution is necessary because
        fmap / liftM in the Gen monad split the PRNG
    -}
    x = fmap id arbitrary :: Gen Int
    wx = arbitrary
    ai = abs i

prop_defaultCoarbitrary_is_transparent i a b = forAll rand $ \g ->
    generate ai g wx == generate ai g x
  where
    ai = abs i
    w = flexiWrap TNil
    x = coarbitrary a $ return b
    wx = coarbitrary (w a) $ return b
    types = (a :: Int, b :: Int)

prop_transparentArbitrary_is_transparent i = forAll rand $ \g ->
    generate ai g wx == w (generate ai g x)
  where
    w = flexiWrap (FWTransparentArbitrary :*: TNil)
    {- N.B. The following circumlocution is necessary because
        fmap / liftM in the Gen monad split the PRNG
    -}
    x = fmap id arbitrary :: Gen Int
    wx = arbitrary
    ai = abs i

prop_transparentCoarbitrary_is_transparent i a b = forAll rand $ \g ->
    generate ai g wx == generate ai g x
  where
    ai = abs i
    w = flexiWrap (FWTransparentArbitrary :*: TNil)
    x = coarbitrary a $ return b
    wx = coarbitrary (w a) $ return b
    types = (a :: Int, b :: Int)

prop_explicitDefaultArbitrary_is_transparent i = forAll rand $ \g ->
    generate ai g wx == w (generate ai g x)
  where
    w = flexiWrap (FWDefaultArbitrary :*: TNil)
    {- N.B. The following circumlocution is necessary because
        fmap / liftM in the Gen monad split the PRNG
    -}
    x = fmap id arbitrary :: Gen Int
    wx = arbitrary
    ai = abs i

prop_explicitDefaultCoarbitrary_is_transparent i a b = forAll rand $ \g ->
    generate ai g wx == generate ai g x
  where
    ai = abs i
    w = flexiWrap (FWDefaultArbitrary :*: TNil)
    x = coarbitrary a $ return b
    wx = coarbitrary (w a) $ return b
    types = (a :: Int, b :: Int)

testArbitrary :: IO ()
testArbitrary = do
    quickCheck prop_defaultArbitrary_is_transparent
    quickCheck prop_defaultCoarbitrary_is_transparent
    quickCheck prop_transparentArbitrary_is_transparent
    quickCheck prop_transparentCoarbitrary_is_transparent
    quickCheck prop_explicitDefaultArbitrary_is_transparent
    quickCheck prop_explicitDefaultCoarbitrary_is_transparent

-- vim: expandtab:tabstop=4:shiftwidth=4