packages feed

geom2d-0.1.0.1: Test/Intersect.hs

{-# LANGUAGE TemplateHaskell #-}

import Geom2d.Intersect
import Geom2d.Point
import Geom2d.Line
import Test.QuickCheck.All
import Test.QuickCheck
import Test.Utils
import Data.AEq

prop_intersect_point_point :: Point' Float -> Point' Float -> Bool
prop_intersect_point_point a b =
  (a == b) == (a `intersect` b)

prop_intersect_infline_infline_xaxis :: Float -> Float -> Bool
prop_intersect_infline_infline_xaxis a b = maybe True id $ do
  l <- mkInfLine
       (fromCoords a 0)
       (fromCoords a b) :: Maybe (InfLine Point' Float)
  xAxis <- mkInfLine
           (fromCoords 0 0)
           (fromCoords 1 0) :: Maybe (InfLine Point' Float)
  return (l `intersect` xAxis)
  
prop_intersect_infline_infline_yaxis :: Float -> Float -> Bool
prop_intersect_infline_infline_yaxis a b = maybe True id $ do
  l <- mkInfLine
       (fromCoords 0 a)
       (fromCoords b a) :: Maybe (InfLine Point' Float)
  yAxis <- mkInfLine
           (fromCoords 0 0)
           (fromCoords 0 1) :: Maybe (InfLine Point' Float)
  return (l `intersect` yAxis)

prop_intersect_infline_point :: InfLine Point' Float -> Point' Float -> Bool
prop_intersect_infline_point line p =
  (line `intersect` p) `implies`
  ( maybe True id $ do
      f <- lineF line
      return (y p ~== f (x p)))
  where True `implies` False = False
        _ `implies` _ = True
  
return []
runTests = $quickCheckAll

main = do
  putStrLn "Test Intersect.hs"
  runTests >>= doExit