packages feed

immutaball-core-0.1.0.4.1: Test/Immutaball/Share/Math/Core/Orphans.hs

{-# OPTIONS_GHC -fno-warn-tabs #-}  -- Support tab indentation better, for a better default of no warning if tabs are used: https://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces .
-- Enable warnings:
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

-- Test.hs.

{-# LANGUAGE Haskell2010 #-}
{-# LANGUAGE TemplateHaskell #-}

{-# OPTIONS_GHC -Wno-orphans #-}

module Test.Immutaball.Share.Math.Core.Orphans
	(
	) where

import Prelude ()
import Immutaball.Prelude

import Test.QuickCheck

import Immutaball.Share.Math

instance (Arbitrary a) => Arbitrary (Vec2 a) where
	arbitrary = Vec2 <$> arbitrary <*> arbitrary
	shrink (Vec2 x y) = [Vec2 x' y' | (x', y') <- shrink (x, y)]

instance (Arbitrary a) => Arbitrary (Vec3 a) where
	arbitrary = Vec3 <$> arbitrary <*> arbitrary <*> arbitrary
	shrink (Vec3 x y z) = [Vec3 x' y' z' | (x', y', z') <- shrink (x, y, z)]

instance (Arbitrary a) => Arbitrary (Vec4 a) where
	arbitrary = Vec4 <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
	shrink (Vec4 x y z w) = [Vec4 x' y' z' w' | (x', y', z', w') <- shrink (x, y, z, w)]

instance (Arbitrary a) => Arbitrary (Mat3 a) where
	arbitrary = Mat3 <$> arbitrary
	shrink (Mat3 rows) = Mat3 <$> shrink rows

instance (Arbitrary a) => Arbitrary (Mat4 a) where
	arbitrary = Mat4 <$> arbitrary
	shrink (Mat4 rows) = Mat4 <$> shrink rows