astro-0.4.3.0: test/Data/Astro/CelestialObject/RiseSetTest.hs
module Data.Astro.CelestialObject.RiseSetTest
(
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 Control.Monad (unless)
import Data.Astro.Types (DecimalDegrees(..), DecimalHours(..), fromDMS, fromHMS)
import Data.Astro.Coordinate (EquatorialCoordinates1(..))
import Data.Astro.Time.Sidereal (lstToDH, dhToLST)
import Data.Astro.CelestialObject.RiseSet
import Data.Astro.Star
tests = [testGroup "riseAndSet" [
testRiseAndSet "a star, NH"
0.000001
(RiseSet (dhToLST 16.721731, DD 64.362370) (dhToLST 6.589380, DD 295.637630))
(riseAndSet (EC1 (fromDMS 21 42 0) (fromHMS 23 39 20)) verticalShift (DD 30))
, testRiseAndSet "Polaris, NH"
0.000001
Circumpolar
(riseAndSet ecPolaris verticalShift (DD 30))
, testRiseAndSet "Polaris, SH"
0.000001
NeverRises
(riseAndSet ecPolaris verticalShift (DD $ -30))
, testRiseAndSet "Alpha Crucis, NH"
0.000001
NeverRises
(riseAndSet ecAlphaCrucis verticalShift (DD 30))
, testRiseAndSet "Alpha Crucis, SH"
0.000001
Circumpolar
(riseAndSet ecAlphaCrucis verticalShift (DD $ -30))
, testRiseAndSet "Sirius, NH"
0.000001
(RiseSet (dhToLST 2.507612, DD 120.857651) (dhToLST 10.997344, DD 239.142349))
(riseAndSet ecSirius verticalShift (DD 57))
, testRiseAndSet "Sirius, SH"
0.000001
(RiseSet (dhToLST 23.390844, DD 116.158877) (dhToLST 14.114111, DD 243.841123))
(riseAndSet ecSirius verticalShift (DD $ -48))
]
]
ecPolaris = starCoordinates Polaris
ecAlphaCrucis = starCoordinates AlphaCrucis
ecSirius = starCoordinates Sirius
verticalShift = (fromDMS 0 34 0)
testRiseAndSet msg eps expected actual =
testCase msg $ assertRiseAndSet eps expected actual
assertRiseAndSet eps expected@(RiseSet (etr, DD ear) (ets, DD eas)) actual@(RiseSet (atr, DD aar) (ats, DD aas)) =
unless (eqLST eps etr atr && abs(ear-aar) <= eps
&& eqLST eps ets ats && abs(eas-aas) <= eps) (assertFailure msg)
where msg = "expected: " ++ show expected ++ "\n but got: " ++ show actual ++
"\n (maximum margin of error: " ++ show eps ++ ")"
assertRiseAndSet _ Circumpolar Circumpolar = assertString ""
assertRiseAndSet _ Circumpolar actual = assertString msg
where msg = "expected: Circumpolar\n but got: " ++ show actual
assertRiseAndSet _ NeverRises NeverRises = assertString ""
assertRiseAndSet _ NeverRises actual = assertString msg
where msg = "expected: NeverRises\n but got: " ++ show actual
eqLST eps lst1 lst2 =
let DH dh1 = lstToDH lst1
DH dh2 = lstToDH lst2
in abs (dh1 - dh2) < eps