packages feed

comfort-fftw-0.0: test/Test/Numeric/FFTW/Shape.hs

module Test.Numeric.FFTW.Shape where

import qualified Numeric.FFTW.Shape as Spectrum
import Numeric.FFTW.Shape
         (SymmetrySingleton(Even,Odd), ShiftSingleton(Exact,Halfway))
import Test.Numeric.FFTW.Common (prefix)

import qualified Data.Array.Comfort.Shape.Test as ShapeTest

import qualified Test.QuickCheck as QC

import Control.Applicative ((<$>))


genHalf :: Int -> QC.Gen (Spectrum.Half Int)
genHalf n = Spectrum.Half <$> QC.choose (0,n)

genSymmetric ::
   (Spectrum.Symmetry symmetry) =>
   (Spectrum.Shift shiftTime) =>
   (Spectrum.Shift shiftSpectrum) =>
   Spectrum.SymmetrySingleton symmetry ->
   Spectrum.ShiftSingleton shiftTime ->
   Spectrum.ShiftSingleton shiftSpectrum ->
   Int -> QC.Gen (Spectrum.Symmetric symmetry shiftTime shiftSpectrum Int)
genSymmetric symmetry shiftTime shiftSpectrum n =
   Spectrum.Symmetric symmetry shiftTime shiftSpectrum <$> QC.choose (0,n)

tests :: [(String, QC.Property)]
tests =
   prefix "Half"
      (ShapeTest.tests $ genHalf 100) ++
   prefix "Half Even Exact Exact"
      (ShapeTest.tests $ genSymmetric Even Exact Exact 100) ++
   prefix "Half Even Halfway Exact"
      (ShapeTest.tests $ genSymmetric Even Halfway Exact 100) ++
   prefix "Half Even Exact Halfway"
      (ShapeTest.tests $ genSymmetric Even Exact Halfway 100) ++
   prefix "Half Even Halfway Halfway"
      (ShapeTest.tests $ genSymmetric Even Halfway Halfway 100) ++
   prefix "Half Odd Exact Exact"
      (ShapeTest.tests $ genSymmetric Odd Exact Exact 100) ++
   prefix "Half Odd Halfway Exact"
      (ShapeTest.tests $ genSymmetric Odd Halfway Exact 100) ++
   prefix "Half Odd Exact Halfway"
      (ShapeTest.tests $ genSymmetric Odd Exact Halfway 100) ++
   prefix "Half Odd Halfway Halfway"
      (ShapeTest.tests $ genSymmetric Odd Halfway Halfway 100) ++
   []