packages feed

accelerate-fft-1.3.0.0: test/Test/Base.hs

{-# LANGUAGE RankNTypes #-}
-- |
-- Module      : Test.Base
-- Copyright   : [2017..2020] The Accelerate Team
-- License     : BSD3
--
-- Maintainer  : Trevor L. McDonell <trevor.mcdonell@gmail.com>
-- Stability   : experimental
-- Portability : non-portable (GHC extensions)
--

module Test.Base
  where

import Data.Array.Accelerate                                        ( Z(..), (:.)(..), DIM1, DIM2, DIM3, Shape, Elt, Acc, Array )
import Data.Array.Accelerate.Sugar.Array                            ( fromList )
import Data.Array.Accelerate.Sugar.Shape                            ( size )
import Data.Array.Accelerate.Trafo                                  ( Afunction )
import Data.Array.Accelerate.Trafo.Sharing                          ( AfunctionR )
import Data.Array.Accelerate.Data.Complex
import Data.Array.Accelerate.Math.FFT

import Hedgehog
import qualified Hedgehog.Gen                                       as Gen
import qualified Hedgehog.Range                                     as Range

import Prelude                                                      as P


type RunN = forall f. Afunction f => f -> AfunctionR f

type Transform sh e = Mode -> Acc (Array sh e) -> Acc (Array sh e)


f32 :: Gen Float
f32 = Gen.realFloat (Range.linearFracFrom 0 (-1) 1)

f64 :: Gen Double
f64 = Gen.realFloat (Range.linearFracFrom 0 (-1) 1)

complex :: Gen a -> Gen (Complex a)
complex f = (:+) <$> f <*> f

dim1 :: Gen DIM1
dim1 = (Z :.) <$> Gen.int (Range.linear 1 1024)

dim2 :: Gen DIM2
dim2 = do
  x <- Gen.int (Range.linear 1 128)
  y <- Gen.int (Range.linear 1 48)
  return (Z :. y :. x)

dim3 :: Gen DIM3
dim3 = do
  x <- Gen.int (Range.linear 1 64)
  y <- Gen.int (Range.linear 1 32)
  z <- Gen.int (Range.linear 1 16)
  return (Z :. z :. y :. x)

array :: (Shape sh, Elt e) => sh -> Gen e -> Gen (Array sh e)
array sh gen = fromList sh <$> Gen.list (Range.singleton (size sh)) gen