packages feed

jord-2.0.0.0: test/Data/Geo/Jord/GeocentricSpec.hs

module Data.Geo.Jord.GeocentricSpec
    ( spec
    ) where

import Test.Hspec

import qualified Data.Geo.Jord.Ellipsoid as Ellipsoid
import Data.Geo.Jord.Ellipsoids
import qualified Data.Geo.Jord.Geocentric as Geocentric
import qualified Data.Geo.Jord.Length as Length
import Data.Geo.Jord.Models

spec :: Spec
spec = do
    describe "antipode" $ do
        it "returns the antipodal position" $ do
            Geocentric.antipode
                (Geocentric.metresPos (-4069916.936) 1985031.122443 4497955.010584 WGS84) `shouldBe`
                Geocentric.metresPos 4069916.936 (-1985031.122443) (-4497955.010584) WGS84
        it "returns the south pole when called with the north pole" $ do
            Geocentric.antipode (Geocentric.northPole WGS84) `shouldBe` Geocentric.southPole WGS84
        it "returns the north pole when called with the south pole" $ do
            Geocentric.antipode (Geocentric.southPole WGS84) `shouldBe` Geocentric.northPole WGS84
    describe "poles" $ do
        it "returns (0, 0, polarRadius) for the north pole" $ do
            Geocentric.northPole WGS84 `shouldBe`
                Geocentric.metresPos 0 0 (Length.toMetres . Ellipsoid.polarRadius $ eWGS84) WGS84
        it "returns (0, 0, -polarRadius) for the south pole" $ do
            Geocentric.southPole WGS84 `shouldBe`
                Geocentric.metresPos
                    0
                    0
                    (negate . Length.toMetres . Ellipsoid.polarRadius $ eWGS84)
                    WGS84