packages feed

flexiwrap-smallcheck-0.0.1: Data/Flex/Serial/SmallCheck/Wrap.hs

-- $Header: c:/Source/Haskell/Wrapper/smallcheck/Data/Flex/Serial/SmallCheck/RCS/Wrap.hs,v 1.1 2011/09/21 00:14:44 dosuser Exp dosuser $

-- | SmallCheck tests for Data.Flex.Serial.Wrap

module Data.Flex.Serial.SmallCheck.Wrap where

import Test.SmallCheck

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

import Data.Flex.Wrap (flexiWrap)
import Data.Flex.Serial.Wrap

prop_defaultSeries_is_transparent i = wx ai == map w (x ai)
  where
    w = flexiWrap TNil
    x = series :: Series Int
    wx = series
    ai = abs i

prop_defaultCoseries_is_transparent i x = f (w x) == f x
  where
    ai = abs i
    w = flexiWrap TNil
    f :: Serial a => a -> [Int]
    f y = map ($ y) $ coseries series ai
    types = x :: Char

prop_transparentSeries_is_transparent i = wx ai == map w (x ai)
  where
    w = flexiWrap (FWTransparentSerial :*: TNil)
    x = series :: Series Char
    wx = series
    ai = abs i

prop_transparentCoseries_is_transparent i x = f (w x) == f x
  where
    ai = abs i
    w = flexiWrap (FWTransparentSerial :*: TNil)
    f :: Serial a => a -> [Char]
    f y = map ($ y) $ coseries series ai
    types = x :: Int

prop_explicitDefaultSeries_is_transparent i = wx ai == map w (x ai)
  where
    w = flexiWrap (FWDefaultSerial :*: TNil)
    x = series :: Series Char
    wx = series
    ai = abs i

prop_explicitDefaultCoseries_is_transparent i x = f (w x) == f x
  where
    ai = abs i
    w = flexiWrap (FWDefaultSerial :*: TNil)
    f :: Serial a => a -> [Char]
    f y = map ($ y) $ coseries series ai
    types = x :: Int

testSerial :: IO ()
testSerial = do
    smallCheck 2 prop_defaultSeries_is_transparent
    smallCheck 2 prop_defaultCoseries_is_transparent
    smallCheck 2 prop_transparentSeries_is_transparent
    smallCheck 2 prop_transparentCoseries_is_transparent
    smallCheck 2 prop_explicitDefaultSeries_is_transparent
    smallCheck 2 prop_explicitDefaultCoseries_is_transparent

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