Add simple property tests for Vertex
This commit is contained in:
parent
872954f492
commit
b36bdaa076
|
@ -15,6 +15,11 @@ instance Arbitrary Vertex where
|
|||
y <- arbitrary
|
||||
return (Point (x, y))
|
||||
|
||||
-- | 'vertexDistance' @p@
|
||||
-- returns the distance of a vertex to the origin
|
||||
vertexDistance :: Vertex -> Double
|
||||
vertexDistance (Point (x, y)) = sqrt (x ** 2 + y ** 2)
|
||||
|
||||
-- | 'fromAngle' @angle@
|
||||
-- creates a point on the unit circle at the specified angle
|
||||
-- (specified in radians).
|
||||
|
|
33
genstar/Test.hs
Normal file
33
genstar/Test.hs
Normal file
|
@ -0,0 +1,33 @@
|
|||
{-# 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
|
Reference in a new issue