module Data.Array.Repa.Properties
( props_DataArrayRepaIndex
, props_DataArrayRepa)
where
import Data.Array.Repa as R
import qualified Data.Array.Repa.Shape as S
import Data.Array.Repa.Arbitrary
import Control.Monad
import Test.QuickCheck
import Prelude as P
stage = "Data.Array.Repa.Properties"
props_DataArrayRepaIndex :: [(String, Property)]
props_DataArrayRepaIndex
= [(stage P.++ "." P.++ name, test) | (name, test)
<- [ ("toIndexFromIndex/DIM1", property prop_toIndexFromIndex_DIM1)
, ("toIndexFromIndex/DIM2", property prop_toIndexFromIndex_DIM2) ]]
prop_toIndexFromIndex_DIM1 sh ix
= (sizeIsValid sh)
==> (inShape sh ix)
==> fromIndex sh (toIndex sh ix) == ix
where _types = ( sh :: DIM1
, ix :: DIM1)
prop_toIndexFromIndex_DIM2
= forAll arbitraryShape $ \(sh :: DIM2) ->
forAll (genInShape2 sh) $ \(ix :: DIM2) ->
fromIndex sh (toIndex sh ix) == ix
props_DataArrayRepa :: [(String, Property)]
props_DataArrayRepa
= props_DataArrayRepaIndex
P.++ [(stage P.++ "." P.++ name, test) | (name, test)
<- [ ("id_force/DIM5", property prop_id_force_DIM5)
, ("id_toScalarUnit", property prop_id_toScalarUnit)
, ("id_toListFromList/DIM3", property prop_id_toListFromList_DIM3)
, ("id_transpose/DIM4", property prop_id_transpose_DIM4)
, ("reshapeTransposeSize/DIM3", property prop_reshapeTranspose_DIM3)
, ("appendIsAppend/DIM3", property prop_appendIsAppend_DIM3)
, ("sumAllIsSum/DIM3", property prop_sumAllIsSum_DIM3) ]]
prop_id_force_DIM5
= forAll (arbitrarySmallArray 10) $ \(arr :: Array DIM5 Int) ->
arr == force arr
prop_id_toScalarUnit (x :: Int)
= toScalar (singleton x) == x
prop_id_toListFromList_DIM3
= forAll (arbitrarySmallShape 10) $ \(sh :: DIM3) ->
forAll (arbitraryListOfLength (S.size sh)) $ \(xx :: [Int]) ->
toList (fromList sh xx) == xx
prop_id_transpose_DIM4
= forAll (arbitrarySmallArray 20) $ \(arr :: Array DIM3 Int) ->
transpose (transpose arr) == arr
prop_reshapeTranspose_DIM3
= forAll (arbitrarySmallArray 20) $ \(arr :: Array DIM3 Int) ->
let arr' = transpose arr
sh' = extent arr'
in (S.size $ extent arr) == S.size (extent (reshape sh' arr))
&& (sumAll arr == sumAll arr')
prop_appendIsAppend_DIM3
= forAll (arbitrarySmallArray 20) $ \(arr1 :: Array DIM3 Int) ->
sumAll (append arr1 arr1) == (2 * sumAll arr1)
prop_sumAllIsSum_DIM3
= forAll (arbitrarySmallShape 100) $ \(sh :: DIM2) ->
forAll (arbitraryListOfLength (S.size sh)) $ \(xx :: [Int]) ->
sumAll (fromList sh xx) == P.sum xx
genInShape2 :: DIM2 -> Gen DIM2
genInShape2 (Z :. yMax :. xMax)
= do y <- liftM (`mod` yMax) $ arbitrary
x <- liftM (`mod` xMax) $ arbitrary
return $ Z :. y :. x