packages feed

hgeometry-0.5.0.0: test/Data/Geometry/PointSpec.hs

module Data.Geometry.PointSpec where

import Data.Ext
import Data.Geometry.Point
import Test.Hspec
import qualified Data.CircularList as C


spec :: Spec
spec = do
  describe "Sort Arround a Point test" $ do
    it "Sort around origin" $
      sortArround (ext origin) (map ext [ point2 (-3) (-3)
                                        , point2 (-1) (-5)
                                        , point2 5    5
                                        , point2 6    (-4)
                                        , point2 (-5) 3
                                        , point2 10   1
                                        , point2 20   0
                                        , point2 0    (-6)
                                        , point2 5    7
                                        , point2 5    5
                                        , point2 2    2
                                        , point2 26   (-2)
                                        , point2 0    (-5)
                                        ])
      `shouldBe` map ext [ point2 20   0
                         , point2 10   1
                         , point2 2    2
                         , point2 5    5
                         , point2 5    5
                         , point2 5    7
                         , point2 (-5) 3
                         , point2 (-3) (-3)
                         , point2 (-1) (-5)
                         , point2 0    (-5)
                         , point2 0    (-6)
                         , point2 6    (-4)
                         , point2 26   (-2)
                         ]
    it "degenerate points on horizontal line" $
      sortArround (ext origin) (map ext [ point2 2    0
                                        , point2 (-1) 0
                                        , point2 10   0
                                        ])
      `shouldBe` map ext [ point2 2 0, point2 10 0, point2 (-1) 0 ]
    it "degenerate points on vertical line" $
      sortArround (ext origin) (map ext [ point2 0 2
                                        , point2 0 (-1)
                                        , point2 0 10
                                        ])
      `shouldBe` map ext [ point2 0 2, point2 0 10, point2 0 (-1) ]


  describe "Insert point in ciclically ordered list" $ do
    it "insert" $
      insertIntoCyclicOrder (ext origin) (ext $ point2 (-4) (-5))  (
        C.fromList $ map ext [ point2 20   0
                             , point2 10   1
                             , point2 2    2
                             , point2 5    5
                             , point2 5    5
                             , point2 5    7
                             , point2 (-5) 3
                             , point2 (-3) (-3)
                             , point2 (-1) (-5)
                             , point2 0    (-5)
                             , point2 0    (-6)
                             , point2 6    (-4)
                             , point2 26   (-2)
                             ])
      `shouldBe`
        (C.fromList $ map ext [ point2 20   0
                              , point2 10   1
                              , point2 2    2
                              , point2 5    5
                              , point2 5    5
                              , point2 5    7
                              , point2 (-5) 3
                              , point2 (-3) (-3)
                              , point2 (-4) (-5)
                              , point2 (-1) (-5)
                              , point2 0    (-5)
                              , point2 0    (-6)
                              , point2 6    (-4)
                              , point2 26   (-2)
                              ])