orbits-0.3: test/WrappedAngle.hs
module WrappedAngle
( WrappedAngle(..)
) where
import Data.Constants.Mechanics.Extra
import Data.Metrology
import Data.Metrology.Extra
import Data.Metrology.QuickCheck ( )
import Data.Metrology.Show ( )
import Data.Units.SI.Parser
import Test.QuickCheck.Checkers ( EqProp(..)
, eq
)
import Test.Tasty.QuickCheck ( Arbitrary )
-- A wrapper which compares angles for equality modulo 2π
newtype WrappedAngle a = WrappedAngle (MkQu_ULN [si|rad|] 'DefaultLCSU a)
deriving (Show, Arbitrary)
instance (Floating a, Real a) => Eq (WrappedAngle a) where
WrappedAngle x == WrappedAngle y = (x `mod'` turn) == (y `mod'` turn)
instance (Floating a, Real a) => EqProp (WrappedAngle a) where
(=-=) = eq