hgeometry-0.7.0.0: test/Data/Geometry/SubLineSpec.hs
{-# LANGUAGE ScopedTypeVariables #-}
module Data.Geometry.SubLineSpec where
import Control.Lens
import Data.Ext
import Data.Geometry
import Data.Geometry.Line
import Data.Geometry.LineSegment
import Data.Geometry.SubLine
import Data.Ratio
import Data.UnBounded
import Data.Vinyl.CoRec
import Test.QuickCheck.HGeometryInstances ()
import Test.Hspec
import Test.QuickCheck
spec :: Spec
spec = do
describe "subLineTests" $
it "subline specialization in R^2" $
property $ \(alpha :: Rational) l@(Line p v) (i :: Interval () Rational) ->
let q = p .+^ alpha *^ v
sl = SubLine l i
in onSubLineOrig q sl `shouldBe` onSubLine2 q sl
it "manual test " $
((Point2 (-1) (-1 :: Rational)) `onSubLine2`
(seg^._SubLine))
`shouldBe` False
it "Intersection test" $
let mySeg = Val <$> ClosedLineSegment (ext origin) (ext $ Point2 (14 :: Rational) 0)
mySeg' = mySeg^._SubLine
myLine = fromLine $ lineThrough (Point2 0 0) (Point2 10 (0 :: Rational))
in (myLine `intersect` mySeg')
`shouldBe`
coRec (myLine&subRange .~ ClosedInterval (ext $ Val 0) (ext . Val $ 7 % 5))
seg :: LineSegment 2 () Rational
seg = ClosedLineSegment (ext (Point2 1 1)) (ext (Point2 5 5))
-- | Original def of onSubline
onSubLineOrig :: (Ord r, Fractional r, Arity d)
=> Point d r -> SubLine d p r -> Bool
onSubLineOrig p (SubLine l r) = toOffset p l `inInterval` r