BesselJ-0.1.0.0: tests/Approx.hs
module Approx (assertAreClose) where
import Data.Complex ( magnitude, Complex(..) )
import Test.Tasty.HUnit ( Assertion, assertBool )
areClose :: Double -> Complex Double -> Complex Double -> Bool
areClose epsilon z1 z2 =
let maxmod = if magnitude z2 < epsilon
then 1.0
else max (magnitude z1) (magnitude z2)
in
magnitude (z1 - z2) < 2.0 * epsilon * maxmod
-- assert approximate equality
assertAreClose ::
String -> Double -> Complex Double -> Complex Double -> Assertion
assertAreClose prefix epsilon z1 z2 =
assertBool prefix (areClose epsilon z1 z2)