-- Do not edit! Automatically created with doctest-extract from private/Numeric/FFTW/Extra/Rank1/Convolution.hs {-# LINE 61 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} {-# OPTIONS_GHC -XTypeFamilies #-} module DocTest.Double.Numeric.FFTW.Extra.Rank1.Convolution where import qualified Test.DocTest.Driver as DocTest {-# LINE 63 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} import Test.Numeric.FFTW.Extra.Utility import Numeric.FFTW.Extra.Rank1.Convolution import Numeric.FFTW.Extra.Utility (padBlock) import qualified Numeric.FFTW.Extra.Shape as CShape import qualified Numeric.BLAS.Rank1.Convolution as Naive import qualified Numeric.BLAS.Matrix.RowMajor as Matrix import qualified Numeric.BLAS.Vector as Vector import Numeric.BLAS.Scalar (RealOf) import qualified Data.Array.Comfort.Storable.Dim2 as Array2 import qualified Data.Array.Comfort.Storable as Array import qualified Data.Array.Comfort.Boxed as BoxedArray import qualified Data.Array.Comfort.Shape as Shape import Data.Array.Comfort.Shape ((::+)((::+))) import Data.Complex (Complex) import qualified Test.QuickCheck as QC type Number_ = Double type Real_ = RealOf Number_ type Complex_ = Complex Real_ real_ :: QC.Gen Real_ real_ = genReal complex_ :: QC.Gen Complex_ complex_ = genNumber number_ :: QC.Gen Number_ number_ = genNumber test :: DocTest.T () test = do DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:99: " {-# LINE 99 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 99 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll (genCyclic number_) $ \x -> QC.forAll (genVectorForShape number_ $ Array.shape x) $ \y -> convolveCyclic x y =~= Naive.convolveCyclic y x ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:119: " {-# LINE 119 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 119 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll (genCyclic number_) $ \x -> let width = Array.shape x in QC.forAll genVectorShape $ \height -> QC.forAll (genVectorForShape number_ (height, width)) $ \ys -> convolveCyclicOneMany x ys =~= Array2.fromRowArray width (fmap (convolveCyclic x) (Array2.toRowArray ys)) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:130: " {-# LINE 130 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 130 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll (genCyclic number_) $ \x -> let width = Array.shape x in QC.forAll genVectorShape $ \height -> QC.forAll (genVectorForShape number_ (height, width)) $ \ys -> convolveCyclicOneMany x ys =~= Naive.convolveCyclicOneMany x ys ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:155: " {-# LINE 155 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 155 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll genVectorShape $ \height -> QC.forAll genCyclicShape $ \width -> QC.forAll (genVectorForShape number_ (height, width)) $ \xs -> QC.forAll (genVectorForShape number_ (height, width)) $ \ys -> convolveCyclicManyMany xs ys =~= Array2.fromRowArray width (BoxedArray.zipWith convolveCyclic (Array2.toRowArray xs) (Array2.toRowArray ys)) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:168: " {-# LINE 168 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 168 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll genVectorShape $ \height -> QC.forAll genCyclicShape $ \width -> QC.forAll (genVectorForShape number_ (height, width)) $ \xs -> QC.forAll (genVectorForShape number_ (height, width)) $ \ys -> convolveCyclicManyMany xs ys =~= Naive.convolveCyclicManyMany xs ys ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:281: " {-# LINE 281 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 281 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll (genVector number_) $ \y -> convolve x y =~= Naive.convolve x y ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:342: " {-# LINE 342 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 342 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll genVectorShape $ \height -> QC.forAll genVectorShape $ \width -> QC.forAll (genVectorForShape number_ (height, width)) $ \ys -> convolveOneMany x ys =~= Array2.fromRowArray (CShape.convolve (Array.shape x) width) (fmap (convolve x) (Array2.toRowArray ys)) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:355: " {-# LINE 355 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 355 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll genVectorShape $ \height -> QC.forAll genVectorShape $ \width -> QC.forAll (genVectorForShape number_ (height, width)) $ \ys -> convolveOneMany x ys =~= Naive.convolveOneMany x ys ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:382: " {-# LINE 382 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 382 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll genVectorShape $ \height -> QC.forAll genVectorShape $ \width -> let Shape.ZeroBased n = CShape.convolve (Array.shape x) width in forChoose (n,n+100) $ \m -> QC.forAll (genVectorForShape number_ (height, width)) $ \ys -> convolveOneManyPad m x ys =~= padBlock (Shape.ZeroBased m) (Naive.convolveOneMany x ys) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:405: " {-# LINE 405 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 405 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll genVectorShape $ \height -> QC.forAll genVectorShape $ \widthX -> QC.forAll genVectorShape $ \widthY -> QC.forAll (genVectorForShape number_ (height, widthX)) $ \xs -> QC.forAll (genVectorForShape number_ (height, widthY)) $ \ys -> let zs = convolveManyMany xs ys in zs =~= Array2.fromRowArray (Matrix.width zs) (BoxedArray.zipWith convolve (Array2.toRowArray xs) (Array2.toRowArray ys)) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:420: " {-# LINE 420 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 420 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll genVectorShape $ \height -> QC.forAll genVectorShape $ \widthX -> QC.forAll genVectorShape $ \widthY -> QC.forAll (genVectorForShape number_ (height, widthX)) $ \xs -> QC.forAll (genVectorForShape number_ (height, widthY)) $ \ys -> convolveManyMany xs ys =~= Naive.convolveManyMany xs ys ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:448: " {-# LINE 448 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 448 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll genVectorShape $ \height -> QC.forAll genVectorShape $ \widthX -> QC.forAll genVectorShape $ \widthY -> QC.forAll (genVectorForShape number_ (height, widthX)) $ \xs -> QC.forAll (genVectorForShape number_ (height, widthY)) $ \ys -> let Shape.ZeroBased n = CShape.convolve widthX widthY in forChoose (n,n+100) $ \m -> convolveManyManyPad m xs ys =~= padBlock (Shape.ZeroBased m) (convolveManyMany xs ys) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:486: " {-# LINE 486 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 486 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll (genVector number_) $ \dat (QC.Positive width) -> forChoose (div (width+1) 2, width) $ \stepSize -> let (numBlocks,r) = divMod (Shape.zeroBasedSize $ Array.shape dat) width in let (xs,x) = Array.split $ Array.reshape ((Shape.ZeroBased numBlocks, Shape.ZeroBased width) ::+ Shape.ZeroBased r) dat in forChoose (max r $ width-stepSize, width) $ \rr -> let completeSize = numBlocks*stepSize + rr in QC.counterexample ("numBlocks = " ++ show numBlocks) $ QC.counterexample ("completeSize = " ++ show completeSize) $ arrange completeSize stepSize xs x =~= arrangeViaMatrixAdd completeSize stepSize xs x -- arrangeMutable completeSize stepSize xs x ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:621: " {-# LINE 621 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 621 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll (genVector number_) $ \y -> convolve x y =~= convolveShortLong x y ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:627: " {-# LINE 627 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 627 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll (genVector number_) $ \y0 -> QC.forAll (genVector number_) $ \y1 -> QC.forAll (genVector number_) $ \y2 -> let y = y0<>y1<>y2 in convolve x y =~= convolveShortLong x y ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:707: " {-# LINE 707 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 707 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll (genVector number_) $ \y -> convolveLongToShort x y =~= Naive.convolveLongToShort x y ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:716: " {-# LINE 716 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 716 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll (genVector number_) $ \y -> convolveLongToShort x y =~= (Vector.drop (pred $ Shape.zeroBasedSize $ Array.shape x) $ Vector.take (Shape.zeroBasedSize $ Array.shape y) $ convolve x y) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:727: " {-# LINE 727 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 727 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll (genVector number_) $ \y -> forChoose (0, Shape.zeroBasedSize (Array.shape y)) $ \m -> convolveLongToShort x (Vector.drop m y) =~= Vector.drop m (convolveLongToShort x y) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.Convolution:737: " {-# LINE 737 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} DocTest.property( {-# LINE 737 "private/Numeric/FFTW/Extra/Rank1/Convolution.hs" #-} QC.forAll (genVector number_) $ \x -> let n = Shape.zeroBasedSize (Array.shape x) in QC.forAll (genVectorForShape number_ (Array.shape x)) $ \y0 -> QC.forAll (genVector number_) $ \y1 -> forChoose (0, Shape.zeroBasedSize (Array.shape y1)) $ \m -> let y = y0<>y1 in convolveLongToShort x (Vector.take (n+m) y) =~= Vector.take (m+1) (convolveLongToShort x y) )