This repository has been archived on 2024-01-28. You can view files and clone it, but cannot push or open issues/pull-requests.
emi5/genstar/Test.hs

34 lines
1.2 KiB
Haskell

{-# 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