packages feed

orbits-0.4: test/Linear/QuickCheck.hs

{-# OPTIONS_GHC -fno-warn-orphans #-}

module Linear.QuickCheck () where

import           Linear.V3
import           Test.QuickCheck
import           Test.QuickCheck.Checkers       ( EqProp(..)
                                                )

instance (EqProp a) => EqProp (V3 a) where
  (V3 x1 x2 x3) =-= (V3 y1 y2 y3) = (x1, x2, x3) =-= (y1, y2, y3)

instance Arbitrary a => Arbitrary (V3 a) where
  arbitrary = uncurry3 V3 <$> arbitrary
  shrink (V3 x y z) = fmap (uncurry3 V3) . shrink $ (x, y, z)

uncurry3 :: (a -> b -> c -> d) -> (a, b, c) -> d
uncurry3 f (a, b, c) = f a b c