packages feed

massiv-test-0.1.0: tests/Data/Massiv/Array/Delayed/InterleavedSpec.hs

{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeApplications #-}
module Data.Massiv.Array.Delayed.InterleavedSpec
  ( spec
  ) where

import Data.Massiv.Array
import Test.Massiv.Core


prop_EqDelayed ::
     (Ragged L ix Int, Load D ix Int, Load DI ix Int)
  => Array D ix Int
  -> Property
prop_EqDelayed arr = computeAs P arr === computeAs P (toInterleaved arr)


prop_Resize ::
     (Ragged L ix Int, Load D ix Int, Load DI ix Int)
  => Array DI ix Int
  -> Property
prop_Resize arr =
  computeAs P (resize' k arr) === computeAs P (resize' k arrD)
  where
    arrD = fromInterleaved arr
    k = Sz (totalElem (size arr))

spec :: Spec
spec =
  describe "Interleaved same as Delayed" $ do
    it "EqDelayed Ix1" $ property $ prop_EqDelayed @Ix1
    it "EqDelayed Ix2" $ property $ prop_EqDelayed @Ix2
    it "EqDelayed Ix3" $ property $ prop_EqDelayed @Ix3
    it "EqDelayed Ix4" $ property $ prop_EqDelayed @Ix4
    it "EqDelayed Ix5" $ property $ prop_EqDelayed @Ix5
    it "Resize Ix1" $ property $ prop_Resize @Ix1
    it "Resize Ix2" $ property $ prop_Resize @Ix2
    it "Resize Ix3" $ property $ prop_Resize @Ix3
    it "Resize Ix4" $ property $ prop_Resize @Ix4
    it "Resize Ix5" $ property $ prop_Resize @Ix5