{-# LANGUAGE TemplateHaskell #-} module Test where import Main (Vertex (Point), fromAngle, move, scale, vertexDistance) import Test.QuickCheck (discard, quickCheck, quickCheckAll) -- | the largest acceptable difference between two doubles so they are considered equal epsilon :: Double epsilon = 1e-10 -- | checks whether the distance of a vertex constructed by 'fromAngle' to the origin is 1 prop_VertexFromAngleDistance :: Double -> Bool prop_VertexFromAngleDistance angle = abs (1 - vertexDistance (fromAngle angle)) < epsilon -- | checks whether the distance of a vertex scaled by an factor is multiplied by that factor (absolute). prop_VertexScaleDistance :: (Vertex, Double) -> Bool prop_VertexScaleDistance (p, s) = abs (abs s * vertexDistance p - vertexDistance (scale s p)) < epsilon -- | checks whether moving a vertex by itself equals scaling it by 2 prop_MoveSelfEqualsScale2 :: Vertex -> Bool prop_MoveSelfEqualsScale2 p = move p p == scale 2 p -- | checks whether moving a vertex by itself scaled by -1 equals the origin prop_MoveNegativeSelfEqualsOrigin :: Vertex -> Bool prop_MoveNegativeSelfEqualsOrigin p = move p (scale (-1) p) == Point (0, 0) return [] check = $quickCheckAll main :: IO Bool main = check