jord-2.0.0.0: test/Data/Geo/Jord/TriangleSpec.hs
module Data.Geo.Jord.TriangleSpec
( spec
) where
import Test.Hspec
import qualified Data.Geo.Jord.Geodetic as Geodetic
import qualified Data.Geo.Jord.GreatCircle as GreatCircle
import Data.Geo.Jord.Places
import qualified Data.Geo.Jord.Triangle as Triangle
spec :: Spec
spec = do
describe "make" $ do
it "returns Nothing if any 2 positions are equal" $ do
let v0 = Geodetic.s84Pos 0 0
Triangle.make v0 v0 (Geodetic.s84Pos 10 0) `shouldBe` Nothing
Triangle.make v0 (Geodetic.s84Pos 10 0) v0 `shouldBe` Nothing
Triangle.make (Geodetic.s84Pos 10 0) v0 v0 `shouldBe` Nothing
it "returns Nothing if any position is the antipode of another one" $ do
let v0 = Geodetic.s84Pos 0 0
Triangle.make v0 (Geodetic.antipode v0) (Geodetic.s84Pos 10 0) `shouldBe` Nothing
Triangle.make v0 (Geodetic.s84Pos 10 0) (Geodetic.antipode v0) `shouldBe` Nothing
Triangle.make (Geodetic.s84Pos 10 0) v0 (Geodetic.antipode v0) `shouldBe` Nothing
describe "centroid" $ do
it "returns the intersection of the medians" $ do
let t =
Triangle.unsafeMake
(Geodetic.s84Pos 0 (-10))
(Geodetic.s84Pos 10 0)
(Geodetic.s84Pos 0 10)
let c = Triangle.centroid t
c `shouldBe` Geodetic.s84Pos 3.3637274116666664 0
Triangle.contains t c `shouldBe` True
describe "circumcentre" $ do
it "returns the position equidistant from all vertices" $ do
let t = Triangle.unsafeMake malmo stockholm goteborg
let c = Triangle.circumcentre t
let d1 = GreatCircle.distance c malmo
let d2 = GreatCircle.distance c stockholm
let d3 = GreatCircle.distance c goteborg
d1 `shouldBe` d2
d1 `shouldBe` d3
d2 `shouldBe` d3