packages feed

numeric-prelude-0.4.3.3: test/Test/MathObj/Gaussian/Polynomial.hs

-- Do not edit! Automatically created with doctest-extract from gaussian/MathObj/Gaussian/Polynomial.hs
{-# LINE 60 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}

{-# OPTIONS_GHC -XRebindableSyntax #-}

module Test.MathObj.Gaussian.Polynomial where

import Test.DocTest.Base
import qualified Test.DocTest.Driver as DocTest

{-# LINE 63 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
import     qualified MathObj.Gaussian.Polynomial as G
import     qualified MathObj.Gaussian.Bell as Bell
import     qualified MathObj.Polynomial as Poly
import     qualified Algebra.Laws as Laws
import     qualified Number.Complex as Complex
import     Number.Complex ((+:))
import     NumericPrelude.Base as P
import     NumericPrelude.Numeric as NP
import     qualified Test.QuickCheck as QC
import     Data.Function.HT (Id, nest)
import     Data.Tuple.HT (mapSnd)

asRational     :: Id (G.T Rational)
asRational     = id

withRational     :: Id (G.T Rational -> a)
withRational     = id

mulLinear2i     :: Id (G.T Rational)
mulLinear2i     x =
       x{G.polynomial = Poly.fromCoeffs [0, 0+:2] * G.polynomial x}

rotateQuarter     :: Int -> Id (G.T Rational)
rotateQuarter     n =
       G.scaleComplex (negate Complex.imaginaryUnit ^ fromIntegral n)

test :: DocTest.T ()
test = do
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:185: "
{-# LINE 185 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 185 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (QC.forAll (QC.choose (0,3)) $ \n -> G.eigenfunctionDifferential n == asRational (G.eigenfunctionIterative n))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:193: "
{-# LINE 193 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 193 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
          (G.eigenfunction0  ==  asRational (G.eigenfunctionDifferential 0))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:198: "
{-# LINE 198 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 198 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
          (G.eigenfunction1  ==  asRational (G.eigenfunctionDifferential 1))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:203: "
{-# LINE 203 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 203 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
          (G.eigenfunction2  ==  asRational (G.eigenfunctionDifferential 2))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:208: "
{-# LINE 208 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 208 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
          (G.eigenfunction3  ==  asRational (G.eigenfunctionDifferential 3))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:215: "
{-# LINE 215 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 215 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (QC.forAll (QC.choose (0,15)) $ \n -> let x = G.eigenfunctionDifferential n in G.fourier x  ==  rotateQuarter n x)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:224: "
{-# LINE 224 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 224 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (QC.forAll (QC.choose (0,15)) $ \n -> let x = G.eigenfunctionIterative n in G.fourier x  ==  rotateQuarter n x)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:246: "
{-# LINE 246 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 246 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ Laws.identity G.multiply G.constant)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:247: "
{-# LINE 247 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 247 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ Laws.commutative G.multiply)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:248: "
{-# LINE 248 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 248 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ Laws.associative G.multiply)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:258: "
{-# LINE 258 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 258 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ Laws.commutative G.convolve)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:259: "
{-# LINE 259 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 259 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ Laws.associative G.convolve)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:301: "
{-# LINE 301 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 301 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x y -> G.fourier (G.convolve x y) == G.multiply (G.fourier x) (G.fourier y))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:302: "
{-# LINE 302 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 302 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x -> nest 2 G.fourier x == G.reverse x)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:303: "
{-# LINE 303 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 303 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x a -> G.fourier (G.translate a x) == G.modulate a (G.fourier x))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:304: "
{-# LINE 304 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 304 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x (QC.Positive a) -> G.fourier (G.dilate a x) == G.amplify a (G.shrink a (G.fourier x)))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:305: "
{-# LINE 305 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 305 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x -> G.fourier (G.differentiate x) == mulLinear2i (G.fourier x))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:323: "
{-# LINE 323 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 323 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x y -> G.convolve (G.differentiate x) y == G.convolve x (G.differentiate y))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:348: "
{-# LINE 348 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 348 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x -> G.integrate (G.differentiate x) == (zero, x))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:349: "
{-# LINE 349 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 349 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x@(G.Cons b p) -> let (xoff,xint) = G.integrate x in G.differentiate xint == G.Cons b (p + Poly.const xoff))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:345: "
{-# LINE 345 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.example
{-# LINE 345 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
   (snd $ G.integrate $ G.differentiate $ G.Cons Bell.unit (Poly.fromCoeffs [7,7,7,7 :: Complex.T Rational]))
  [ExpectedLine [LineChunk "Cons {bell = Cons {amp = 1 % 1, c0 = 0 % 1 +: 0 % 1, c1 = 0 % 1 +: 0 % 1, c2 = 1 % 1}, polynomial = Polynomial.fromCoeffs [7 % 1 +: 0 % 1,7 % 1 +: 0 % 1,7 % 1 +: 0 % 1,7 % 1 +: 0 % 1]}"]]
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:409: "
{-# LINE 409 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 409 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x a b -> G.translate a (G.translate b x) == G.translate (a+b) x)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:416: "
{-# LINE 416 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 416 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x a b -> G.translateComplex a (G.translateComplex b x) == G.translateComplex (a+b) x)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:417: "
{-# LINE 417 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 417 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x a -> G.translateComplex (Complex.fromReal a) x == G.translate a x)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:426: "
{-# LINE 426 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 426 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x a b -> G.modulate a (G.modulate b x) == G.modulate (a+b) x)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:427: "
{-# LINE 427 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 427 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x a b -> G.modulate b (G.translate a x) == G.turn (a*b) (G.translate a (G.modulate b x)))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:442: "
{-# LINE 442 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 442 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x -> nest 2 G.reverse x == x)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:451: "
{-# LINE 451 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 451 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x (QC.Positive a) (QC.Positive b) -> G.dilate a (G.dilate b x) == G.dilate (a*b) x)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:452: "
{-# LINE 452 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 452 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x (QC.Positive a) -> G.shrink a x == G.dilate (recip a) x)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:461: "
{-# LINE 461 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 461 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x (QC.Positive a) -> G.dilate a (G.shrink a x) == x)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:462: "
{-# LINE 462 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 462 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x (QC.Positive a) -> G.shrink a (G.dilate a x) == x)
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:490: "
{-# LINE 490 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 490 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x (QC.NonZero unit) d -> G.approximateByBells unit (G.translateComplex d x) == map (mapSnd (Bell.translateComplex d)) (G.approximateByBells unit x))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:491: "
{-# LINE 491 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 491 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x (QC.NonZero unit) (QC.NonZero d) -> G.approximateByBells unit (G.dilate d x) == map (mapSnd (Bell.dilate d)) (G.approximateByBells (unit/d) x))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:492: "
{-# LINE 492 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 492 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (withRational $ \x (QC.NonZero unit) (QC.NonZero d) -> G.approximateByBells unit (G.shrink d x) == map (mapSnd (Bell.shrink d)) (G.approximateByBells (unit*d) x))
 DocTest.printPrefix "MathObj.Gaussian.Polynomial:512: "
{-# LINE 512 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
 DocTest.property
{-# LINE 512 "gaussian/MathObj/Gaussian/Polynomial.hs" #-}
     (\(QC.NonZero unit) d s p0 -> let p = Poly.fromCoeffs $ take 10 p0 in G.approximateByBellsAtOnce unit d s p == G.approximateByBellsByTranslation unit d (s::Rational) p)