-- Do not edit! Automatically created with doctest-extract from src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs {-# LINE 26 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} {-# OPTIONS_GHC -XTypeFamilies #-} module DocTest.Double.Numeric.FFTW.Extra.Rank1.ConvolutionDriver where import qualified Test.DocTest.Driver as DocTest {-# LINE 28 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} -- import Numeric.FFTW.Extra.Rank1.ConvolutionDriver import Numeric.FFTW.Extra.Rank1 import Numeric.FFTW.Extra.Utility (padCyclic, toCyclic) import Test.Numeric.FFTW.Extra.Utility import DocTest.Double.Numeric.FFTW.Extra.Rank1.Convolution (number_) 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.Vector ((|+|)) import qualified Data.Array.Comfort.Storable as Array import qualified Data.Array.Comfort.Shape as Shape import Control.Applicative (liftA2) import qualified Test.QuickCheck as QC test :: DocTest.T () test = do DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:75: " {-# LINE 75 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 75 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genCyclic number_) $ \x -> QC.forAll (genVectorForShape number_ $ Array.shape x) $ \y -> convolve x y =~= Naive.convolveCyclic x y ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:81: " {-# LINE 81 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 81 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genCyclic number_) $ \x -> QC.forAll (genVectorForShape number_ $ Array.shape x) $ \y -> QC.forAll number_ $ \z -> convolve x (Vector.scale z y) =~= Vector.scale z (convolve x y) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:88: " {-# LINE 88 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 88 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genCyclic number_) $ \x -> QC.forAll (genVectorForShape number_ $ Array.shape x) $ \y -> QC.forAll number_ $ \z -> convolve (Vector.scale z x) y =~= Vector.scale z (convolve x y) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:95: " {-# LINE 95 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 95 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genCyclic number_) $ \x -> QC.forAll (genVectorForShape number_ $ Array.shape x) $ \y -> QC.forAll (genVectorForShape number_ $ Array.shape x) $ \z -> convolve x (y|+|z) =~= convolve x y |+| convolve x z ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:102: " {-# LINE 102 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 102 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genCyclic number_) $ \x -> QC.forAll (genVectorForShape number_ $ Array.shape x) $ \y -> QC.forAll (genVectorForShape number_ $ Array.shape x) $ \z -> convolve (x|+|y) z =~= convolve x z |+| convolve y z ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:110: " {-# LINE 110 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 110 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genCyclic number_) $ \x k -> convolve (Vector.unit (Array.shape x) k) x =~= Array.rotateRight k x ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:117: " {-# LINE 117 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 117 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genCyclic number_) $ \x -> QC.forAll (genVectorForShape number_ $ Array.shape x) $ \y -> convolve x y =~= convolve y x ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:123: " {-# LINE 123 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 123 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genCyclic number_) $ \x -> QC.forAll (genVectorForShape number_ $ Array.shape x) $ \y -> QC.forAll (genVectorForShape number_ $ Array.shape x) $ \z -> convolve x (convolve y z) =~= convolve (convolve x y) z ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:133: " {-# LINE 133 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 133 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll (genVector number_) $ \y -> forChoose (1,100) $ \n -> convolve (toCyclic n x) (toCyclic n y) =~= toCyclic n (convolve x y) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:143: " {-# LINE 143 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 143 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll (genVector number_) $ \y -> forChoose (0,20) $ \m -> convolve x y =~= let Shape.ZeroBased n = CShape.convolve (Array.shape x) (Array.shape y) in takeShape (Shape.ZeroBased n) $ convolve (padCyclic (n+m) x) (padCyclic (n+m) y) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:156: " {-# LINE 156 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 156 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genCyclic number_) $ \x -> let shape = Array.shape x in QC.forAll (QC.listOf $ genVectorForShape number_ shape) $ \ys -> let fromRows = Matrix.fromRows shape in convolveOneMany x (fromRows ys) =~= fromRows (map (convolve x) ys) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:167: " {-# LINE 167 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 167 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll genCyclicShape $ \shape -> QC.forAll (QC.listOf $ liftA2 (,) (genVectorForShape number_ shape) (genVectorForShape number_ shape)) $ \xys -> let (xs,ys) = unzip xys in let fromRows = Matrix.fromRows shape in convolveManyMany (fromRows xs) (fromRows ys) =~= fromRows (zipWith convolve xs ys) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:225: " {-# LINE 225 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 225 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll (genVector number_) $ \y -> convolve x y =~= Naive.convolve x y ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:231: " {-# LINE 231 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 231 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll (genVector number_) $ \y -> QC.forAll number_ $ \z -> convolve (Vector.scale z x) y =~= Vector.scale z (convolve x y) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:238: " {-# LINE 238 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 238 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll (genVector number_) $ \y -> QC.forAll (genVectorForShape number_ $ Array.shape y) $ \z -> convolve x (y|+|z) =~= convolve x y |+| convolve x z ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:245: " {-# LINE 245 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 245 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} forChoose (1,100) $ \n -> forChoose (0,n-1) $ \k -> QC.forAll (genVector number_) $ \x -> convolve (Vector.unit (Shape.ZeroBased n) k) x =~= Vector.zero (Shape.ZeroBased k) <> x <> Vector.zero (Shape.ZeroBased (n-k-1)) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:256: " {-# LINE 256 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 256 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll (genVector number_) $ \y -> convolve x y =~= convolve y x ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:262: " {-# LINE 262 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 262 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll (genVector number_) $ \y -> QC.forAll (genVector number_) $ \z -> convolve x (convolve y z) =~= convolve (convolve x y) z ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:271: " {-# LINE 271 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 271 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genVector number_) $ \x -> QC.forAll genVectorShape $ \width -> QC.forAll (QC.listOf $ genVectorForShape number_ width) $ \ys -> convolveOneMany x (Matrix.fromRows width ys) =~= Matrix.fromRows (CShape.convolve (Array.shape x) width) (map (convolve x) ys) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:283: " {-# LINE 283 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 283 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll genVectorShape $ \widthX -> QC.forAll genVectorShape $ \widthY -> QC.forAll (QC.listOf $ liftA2 (,) (genVectorForShape number_ widthX) (genVectorForShape number_ widthY)) $ \xys -> let (xs,ys) = unzip xys in convolveManyMany (Matrix.fromRows widthX xs) (Matrix.fromRows widthY ys) =~= Matrix.fromRows (CShape.convolve widthX widthY) (zipWith convolve xs ys) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:306: " {-# LINE 306 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 306 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genVector number_) $ \x fromX -> QC.forAll (genVector number_) $ \y fromY -> let shiftShape from = Array.mapShape (Shape.Shifted from . Shape.zeroBasedSize) in shiftShape (fromX+fromY) (convolve x y) =~= convolve (shiftShape fromX x) (shiftShape fromY y) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:317: " {-# LINE 317 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 317 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll genVectorShape $ \(Shape.ZeroBased nx) fromX -> QC.forAll genVectorShape $ \(Shape.ZeroBased ny) fromY -> let shx = Shape.Shifted fromX nx in let shy = Shape.Shifted fromY ny in QC.forAll (QC.elements $ Shape.indices shx) $ \k -> QC.forAll (QC.elements $ Shape.indices shy) $ \j -> convolve (Vector.unit shx k) (Vector.unit shy j) =~= Vector.unit (Shape.Shifted (fromX+fromY) (nx+ny-1)) (k+j) &:: number_ ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:336: " {-# LINE 336 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 336 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll (genVector number_) $ \x fromX -> QC.forAll (genVector number_) $ \y fromY -> let shiftShape from = Array.mapShape (Shape.toInterval . Shape.Shifted from . Shape.zeroBasedSize) in shiftShape (fromX+fromY) (convolve x y) =~= convolve (shiftShape fromX x) (shiftShape fromY y) ) DocTest.printPrefix "Numeric.FFTW.Extra.Rank1.ConvolutionDriver:348: " {-# LINE 348 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} DocTest.property( {-# LINE 348 "src/Numeric/FFTW/Extra/Rank1/ConvolutionDriver.hs" #-} QC.forAll genVectorShape $ \(Shape.ZeroBased nx) fromX -> QC.forAll genVectorShape $ \(Shape.ZeroBased ny) fromY -> let shx = Shape.toInterval $ Shape.Shifted fromX nx in let shy = Shape.toInterval $ Shape.Shifted fromY ny in let toX = Shape.intervalTo shx in let toY = Shape.intervalTo shy in QC.forAll (QC.elements $ Shape.indices shx) $ \k -> QC.forAll (QC.elements $ Shape.indices shy) $ \j -> convolve (Vector.unit shx k) (Vector.unit shy j) =~= Vector.unit (Shape.Interval (fromX+fromY) (toX+toY)) (k+j) &:: number_ )