packages feed

coordinate-0.2: test/hunit_tests.hs

module Main (main) where

import Test.HUnit (Assertion, Test (TestCase, TestList), (@?=), runTestTT, failures, errors)

import Prelude
import Control.Lens ((^.), (^?), (#), ReifiedIso(runIso), from)
import Control.Monad (when)
import System.Exit (exitFailure)

import Data.Geodetic.ECEF
import Data.Geodetic.Ellipsoid
import Data.Geodetic.EllipsoidReaderT
import Data.Geodetic.LL
import Data.Geodetic.LLH
import Data.Geodetic.Sphere
import Data.Geodetic.XY

(@??=) :: Show a => a -> a -> Assertion
a @??= b = show a @?= show b
infix 1 @??=

assertions :: [Assertion]
assertions =
  [ wgs84' eccentricitySquared @??= 6.6943799901413165e-3
  , wgs84' eccentricitySquared' @??= 6.694455244784511e-3
  , wgs84' normal 7 @??= 6387371.845852088
  , wgs84' normal 71 @??= 6397535.266650572
  , wgs84' normal 711 @??= 6393308.675975408
  , wgs84' normal (-7) @??= 6387371.845852088
  , ECEF (XY (-5019624) 2618621) (-2927516) ^. runIso (wgs84' earthGeo) @?= LLH {ll = LL {_lat = -0.4799654447089294, _lon = 2.66075442877903}, _height = 100.20987554546446}
  , ECEF (XY 9919623 (-3116612)) (-2396517) ^. runIso (wgs84' earthGeo) @?= LLH {ll = LL {_lat = -0.22740831363634992, _lon = -0.30442061911398305}, _height = 4293252.6636643605}
  , LLH (LL 0.48 2.661) 100 ^. from (runIso (wgs84' earthGeo)) @?= ECEF {_xy = XY {_x = -5020176.908575072, _y = 2617341.3240995244}, _z = 2927710.5079646683}
  , LLH (LL (-0.22741) (-0.30442)) 4293252.66 ^. from (runIso (wgs84' earthGeo)) @?= ECEF {_xy = XY {_x = 9919621.069754401, _y = -3116604.645933256}, _z = -2396534.4668575544}
  , ((27.34, 152.15) ^. degrees) @?= LL {_lat = 0.47717301749524965, _lon = 2.6555184569093724}
  , (degrees # LL 0.47717 2.65552) @?= (27.33982711025749,152.15008841258037)
  , 27.34 <◦> 152.15 @?= LL {_lat = 0.47717301749524965, _lon = 2.6555184569093724}
  , 61.94 <◦> (-152.15) @?= LL {_lat = 1.0810569386852877, _lon = -2.6555184569093724}
  , earthMean @?= Sphere 6367450.0
  , ellipsoidSphere # Sphere 77 @?= Ellipsoid {_semiMajor = 77.0, _flattening = 1.0}
  , Ellipsoid 77 1 ^? ellipsoidSphere @?= Just (Sphere 77.0)
  , Ellipsoid 77 2 ^? ellipsoidSphere @?= Nothing
  ]

tests :: Test
tests =
  TestList $ fmap TestCase assertions

main :: IO ()
main = do
  c <- runTestTT tests
  when (errors c > 0 || failures c > 0) exitFailure