packages feed

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)