massiv-0.1.0.0: tests/Data/Massiv/Array/Ops/ConstructSpec.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE GADTs #-}
module Data.Massiv.Array.Ops.ConstructSpec (spec) where
import Data.Massiv.CoreArbitrary as A
import Data.Proxy
import qualified GHC.Exts as GHC (IsList (..))
import Prelude as P
import Prelude hiding (map)
import Test.Hspec
import Test.QuickCheck
prop_rangeEqRangeStep1 :: Int -> Int -> Property
prop_rangeEqRangeStep1 from to = range Seq from to === rangeStep Par from 1 to
prop_rangeEqEnumFromN :: Int -> Int -> Property
prop_rangeEqEnumFromN from to = range Seq from to === enumFromN Par from (to - from)
prop_rangeStepEqEnumFromStepN :: Int -> NonZero Int -> Int -> Property
prop_rangeStepEqEnumFromStepN from (NonZero step) sz =
rangeStep Seq from step (from + step * sz) === enumFromStepN Par from step sz
prop_rangeStepExc :: Int -> Int -> Property
prop_rangeStepExc from to =
assertSomeException (computeAs U (rangeStep Seq from 0 to))
prop_toFromListIsList ::
(Show (Array U ix Int), GHC.IsList (Array U ix Int), Index ix)
=> Proxy ix
-> Arr U ix Int
-> Property
prop_toFromListIsList _ (Arr arr) = arr === GHC.fromList (GHC.toList arr)
prop_toFromList ::
forall ix . (Show (Array U ix Int), Nested LN ix Int, Nested L ix Int, Ragged L ix Int)
=> Proxy ix
-> Arr U ix Int
-> Property
prop_toFromList _ (Arr arr) = arr === fromLists' (getComp arr) (toLists arr :: [ListItem ix Int])
prop_excFromToListIx2 :: Comp -> [[Int]] -> Property
prop_excFromToListIx2 comp ls2 =
if P.null lsL || P.all (head lsL ==) lsL
then label "Expected Success" $ resultLs === ls2
else label "Expected Failure" $ assertSomeException resultLs
where
lsL = P.map P.length ls2
resultLs = toLists (fromLists' comp ls2 :: Array U Ix2 Int)
-- prop_excFromToListIx3 :: Comp -> [[[Int]]] -> Property
-- prop_excFromToListIx3 comp ls3 =
-- if P.null lsL ||
-- (P.all (head lsL ==) lsL &&
-- (P.null (head lsLL) || P.and (P.map (P.all (head (head lsLL) ==)) lsLL)))
-- then classify True "Expected Success" $ resultLs === ls3
-- else classify True "Expected Failure" $
-- assertSomeException resultLs
-- where
-- resultLs = toList (fromList' comp ls3 :: Array U Ix3 Int)
-- lsL = P.map P.length ls3
-- lsLL = P.map (P.map P.length) ls3
specIx1 :: Spec
specIx1 = do
it "toFromList" $ property (prop_toFromList (Proxy :: Proxy Ix1))
it "toFromListIsList" $ property (prop_toFromListIsList (Proxy :: Proxy Ix1))
it "rangeEqRangeStep1" $ property prop_rangeEqRangeStep1
it "rangeEqEnumFromN" $ property prop_rangeEqEnumFromN
it "rangeStepEqEnumFromStepN" $ property prop_rangeStepEqEnumFromStepN
it "rangeStepExc" $ property prop_rangeStepExc
specIx2 :: Spec
specIx2 = do
it "toFromList" $ property (prop_toFromList (Proxy :: Proxy Ix2))
it "toFromListIsList" $ property (prop_toFromListIsList (Proxy :: Proxy Ix2))
it "excFromToListIx2" $ property prop_excFromToListIx2
specIx3 :: Spec
specIx3 = do
it "toFromList" $ property (prop_toFromList (Proxy :: Proxy Ix3))
it "toFromListIsList" $ property (prop_toFromListIsList (Proxy :: Proxy Ix3))
--it "excFromToListIx3" $ property prop_excFromToListIx3
spec :: Spec
spec = do
describe "Ix1" specIx1
describe "Ix2" specIx2
describe "Ix3" specIx3