module Approx (assertApproxEqual) where import Data.Complex ( imagPart, realPart, Complex(..) ) import Test.Tasty.HUnit ( Assertion, assertEqual ) -- round x to n digits approx0 :: Int -> Double -> Double approx0 n x = fromInteger (round $ x * (10^n)) / (10.0^^n) -- round z to n digits approx :: Int -> Complex Double -> Complex Double approx n z = approx0 n (realPart z) :+ approx0 n (imagPart z) assertApproxEqual :: String -> Int -> Complex Double -> Complex Double -> Assertion assertApproxEqual prefix n z1 z2 = assertEqual prefix (approx n z1) (approx n z2)