import Data.Complex import Test.QuickCheck prop_linear :: Double -> Complex Double -> Complex Double -> Bool prop_linear l x y = let g = fmap (*l) -- (*l) is a real linear function. fmap (*l) is a complex function in magnitude (g (x + y) - (g x + g y)) < 0.000001 -- equality on Double should be avoid prop_linear_2 :: Double -> Double -> Complex Double -> Bool prop_linear_2 l x y = let g = fmap (*l) in magnitude (g (pure x * y) - (pure x * g y)) < 0.000001 main :: IO () main = do putStrLn "Testing distribution of sum" quickCheckWith stdArgs{maxSuccess = 1000} prop_linear putStrLn "Testing multiplication by scalar" quickCheckWith stdArgs{maxSuccess = 1000} prop_linear_2