packages feed

ADPfusion-0.1.0.0: ADP/Fusion/GAPlike/QuickCheck.hs

{-# LANGUAGE PackageImports #-}
{-# LANGUAGE TemplateHaskell #-}

module ADP.Fusion.GAPlike.QuickCheck where

import Test.QuickCheck
import Test.QuickCheck.All
import qualified Data.Vector.Fusion.Stream as SP
import qualified Data.Vector.Unboxed as VU

import "PrimitiveArray" Data.Array.Repa.Index
import "PrimitiveArray" Data.Array.Repa.Shape
import Data.PrimitiveArray

import ADP.Fusion.QuickCheck.Arbitrary
import ADP.Fusion.GAPlike.DevelCommon
import ADP.Fusion.GAPlike



-- * QuickCheck

checkC_fusion (i,j) = id <<< Chr dvu ... SP.toList $ (i,j)
checkC_list   (i,j) = [dvu VU.! i | i+1==j]
prop_checkC = checkC_fusion === checkC_list

checkCC_fusion (i,j) = (,) <<< Chr dvu % Chr dvu ... SP.toList $ (i,j)
checkCC_list   (i,j) = [ (dvu VU.! i, dvu VU.! (i+1)) | i+2==j ]
prop_checkCC = checkCC_fusion === checkCC_list

checkP_fusion (i,j) = id <<< (Tbl pat :: Tbl E PAT)  ... SP.toList $ (i,j)
checkP_list   (i,j) = [ (pat!(Z:.i:.j)) | i<=j ]
prop_checkP = checkP_fusion === checkP_list

checkPP_fusion (i,j) = let tbl = Tbl pat :: Tbl E PAT
                       in  (,) <<< tbl % tbl ... SP.toList $ (i,j)
checkPP_list   (i,j) = [ (pat!(Z:.i:.k), pat!(Z:.k:.j)) | k<-[i..j] ]
prop_checkPP = checkPP_fusion === checkPP_list

checkCPC_fusion (i,j) = let tbl = Tbl pat :: Tbl E PAT
                        in  (,,) <<< Chr dvu % tbl % Chr dvu ... SP.toList $ (i,j)
checkCPC_list (i,j) = [ (dvu VU.! i, pat!(Z:.i+1:.j-1), dvu VU.! (j-1)) | i+2<=j ]
prop_checkCPC = checkCPC_fusion === checkCPC_list

checkNN_fusion (i,j) = let tbl = Tbl pat :: Tbl N PAT
                       in  (,) <<< tbl % tbl ... SP.toList $ (i,j)
checkNN_list   (i,j) = [ (pat!(Z:.i:.k), pat!(Z:.k:.j)) | k<-[i+1..j-1] ]
prop_checkNN = checkNN_fusion === checkNN_list



options = stdArgs {maxSuccess = 1000}

customCheck = quickCheckWithResult options

allProps = $forAllProperties customCheck