packages feed

astro-0.4.1.2: test/Data/Astro/Sun/SunInternalsTest.hs

module Data.Astro.Sun.SunInternalsTest
(
  tests
)

where

import Test.Framework (testGroup)
import Test.Framework.Providers.HUnit
import Test.Framework.Providers.QuickCheck2 (testProperty)
import Test.HUnit
import Test.HUnit.Approx
import Test.QuickCheck

import Data.Astro.Utils (reduceToZeroRange)
import Data.Astro.Sun.SunInternals

tests = [testGroup "solveKeplerEquation" [
            testCase "a" $ assertApproxEqual ""
              1e-7
              3.5220041
              (solveKeplerEquation 0.016714 3.528210 1e-7)
            , testProperty "property" prop_solveKeplerEquation
            ]
        ]

prop_solveKeplerEquation (e, m) =
  let eps = 1e-7
      (_, e') = properFraction e
      e'' =( e' * 0.01) + 0.1
      m' = (reduceToZeroRange 17 e) - 7
      x = solveKeplerEquation e'' m' eps
      dx = x - e''*(sin x) - m'
  in abs dx < eps
  where types = ((e,m)::(Double, Double))