content: {-# LANGUAGE DataKinds #-}
  {-# LANGUAGE FlexibleContexts #-}
  {-# LANGUAGE FlexibleInstances #-}
  {-# LANGUAGE MonoLocalBinds #-}
  {-# LANGUAGE MultiParamTypeClasses #-}
  {-# LANGUAGE ScopedTypeVariables #-}
  {-# LANGUAGE UndecidableInstances #-}
  
  module Test.Massiv.Array.Delayed.WindowedSpec (spec) where
  
  import Data.Massiv.Array as A
  import Test.Massiv.Core
  
  prop_EqDelayed
    :: (Ragged L ix Int, Load DW ix Int) => Proxy ix -> ArrDW ix Int -> Property
  prop_EqDelayed _ (ArrDW arrD arrDW) =
    computeAs P arrD === computeAs P arrDW
  
  prop_EqDelayedStride
    :: (Ragged L ix Int, StrideLoad DW ix Int) => Proxy ix -> Stride ix -> ArrDW ix Int -> Property
  prop_EqDelayedStride _ stride (ArrDW arrD arrDW) =
    computeWithStrideAs P stride arrD === computeWithStrideAs P stride arrDW
  
  spec :: Spec
  spec = do
    describe "Equivalency with Delayed" $ do
      it "Ix1" $ property $ prop_EqDelayed (Proxy :: Proxy Ix1)
      it "Ix2" $ property $ prop_EqDelayed (Proxy :: Proxy Ix2)
      it "Ix3" $ property $ prop_EqDelayed (Proxy :: Proxy Ix3)
      it "Ix4" $ property $ prop_EqDelayed (Proxy :: Proxy Ix4)
      it "Ix5" $ property $ prop_EqDelayed (Proxy :: Proxy Ix5)
    describe "Equivalency with Stride With Delayed" $ do
      it "Ix1" $ property $ prop_EqDelayedStride (Proxy :: Proxy Ix1)
      it "Ix2" $ property $ prop_EqDelayedStride (Proxy :: Proxy Ix2)
      it "Ix3" $ property $ prop_EqDelayedStride (Proxy :: Proxy Ix3)
      it "Ix4" $ property $ prop_EqDelayedStride (Proxy :: Proxy Ix4)
      it "Ix5" $ property $ prop_EqDelayedStride (Proxy :: Proxy Ix5)
  