vector-space-opengl 0.1 → 0.2
raw patch · 4 files changed
+113/−79 lines, 4 filesdep +QuickCheckdep +ieee754dep +test-frameworkdep −template-haskelldep ~OpenGLdep ~basedep ~vector-space
Dependencies added: QuickCheck, ieee754, test-framework, test-framework-quickcheck2, test-framework-th
Dependencies removed: template-haskell
Dependency ranges changed: OpenGL, base, vector-space
Files
- src/Data/VectorSpace/OpenGL.hs +0/−49
- src/Data/VectorSpace/OpenGL/TH.hs +0/−23
- test/Tests.hs +95/−0
- vector-space-opengl.cabal +18/−7
src/Data/VectorSpace/OpenGL.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} @@ -21,8 +20,6 @@ module Data.VectorSpace.OpenGL where -import Data.VectorSpace.OpenGL.TH- import Control.Applicative import qualified Data.Foldable as F @@ -31,52 +28,6 @@ import Data.VectorSpace import Graphics.Rendering.OpenGL------------------------------------------------------------------------------------- Scalar instances--deriveScalar [ ''GLbyte- , ''GLshort- , ''GLint- , ''GLfloat- , ''GLdouble- ]--instance VectorSpace GLbyte where- type Scalar GLbyte = GLbyte; (*^) = (*)-instance VectorSpace GLshort where- type Scalar GLshort = GLshort; (*^) = (*)-instance VectorSpace GLint where- type Scalar GLint = GLint; (*^) = (*)-instance VectorSpace GLfloat where- type Scalar GLfloat = GLfloat; (*^) = (*)-instance VectorSpace GLdouble where- type Scalar GLdouble = GLdouble; (*^) = (*)---instance InnerSpace GLfloat where (<.>) = (*)-instance InnerSpace GLdouble where (<.>) = (*)--instance AffineSpace GLbyte where- type Diff GLbyte = GLbyte- (.-.) = (-)- (.+^) = (+)-instance AffineSpace GLshort where- type Diff GLshort = GLshort- (.-.) = (-)- (.+^) = (+)-instance AffineSpace GLint where- type Diff GLint = GLint- (.-.) = (-)- (.+^) = (+)-instance AffineSpace GLfloat where- type Diff GLfloat = GLfloat- (.-.) = (-)- (.+^) = (+)-instance AffineSpace GLdouble where- type Diff GLdouble = GLdouble- (.-.) = (-)- (.+^) = (+) -------------------------------------------------------------------------------- -- Vector instances
− src/Data/VectorSpace/OpenGL/TH.hs
@@ -1,23 +0,0 @@-{-# OPTIONS_GHC -ddump-splices #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE TypeFamilies #-}-module Data.VectorSpace.OpenGL.TH where--import Control.Applicative-import Control.Monad-import Data.AdditiveGroup-import Data.VectorSpace--import Language.Haskell.TH--deriveScalar ts = concat <$> forM (map conT ts) (\t -> [d| - instance AdditiveGroup $t where zeroV = 0; (^+^) = (+); negateV = negate- |])--{- http://stackoverflow.com/questions/8410761/using-template-haskell-how-can-i-splice-the-same-type-into-multiple-locations--deriveScalarVectorSpace ts = concat <$> forM (map conT ts) (\t -> [d| - instance VectorSpace $t where type Scalar $t = $t; (*^) = (*)- |])--}
+ test/Tests.hs view
@@ -0,0 +1,95 @@+{-# LANGUAGE TemplateHaskell #-}++import Data.VectorSpace+import Graphics.Rendering.OpenGL.GL++import Control.Applicative+import Data.AEq+import Data.Int+import Foreign.C.Types++import Test.Framework+import Test.Framework.TH+import Test.Framework.Providers.QuickCheck2+import Test.QuickCheck+import Test.QuickCheck.All++addAssoc a b c = (a ^+^ b) ^+^ c ~== a ^+^ (b ^+^ c)+addId a = (a ^+^ zeroV) ~== a+addNeg a = x ~== y && y ~== zeroV+ where x = a ^+^ negateV a+ y = negateV a ^+^ a+addComm a b = (a ^+^ b) ~== (b ^+^ a)++prop_addAssocShort = addAssoc :: GLshort -> GLshort -> GLshort -> Bool+prop_addIdShort = addId :: GLshort -> Bool+prop_addNegShort = addNeg :: GLshort -> Bool+prop_addCommShort = addComm :: GLshort -> GLshort -> Bool++prop_addAssocInt = addAssoc :: GLint -> GLint -> GLint -> Bool+prop_addIdInt = addId :: GLint -> Bool+prop_addNegInt = addNeg :: GLint -> Bool+prop_addCommInt = addComm :: GLint -> GLint -> Bool++prop_addAssocFloat = addAssoc :: GLfloat -> GLfloat -> GLfloat -> Bool+prop_addIdFloat = addId :: GLfloat -> Bool+prop_addNegFloat = addNeg :: GLfloat -> Bool+prop_addCommFloat = addComm :: GLfloat -> GLfloat -> Bool++prop_addAssocDouble = addAssoc :: GLdouble -> GLdouble -> GLdouble -> Bool+prop_addIdDouble = addId :: GLdouble -> Bool+prop_addNegDouble = addNeg :: GLdouble -> Bool+prop_addCommDouble = addComm :: GLdouble -> GLdouble -> Bool++scMulDistr1 s v1 v2 = + s *^ (v1 ^+^ v2) ~== (s *^ v1) + (s *^ v2)+scMulDistr2 s1 s2 v =+ (s1 + s2) *^ v ~== (s1 *^ v) + (s2 *^ v)+scMulRespect s1 s2 v =+ s1 *^ (s2 *^ v) ~== (s1 * s2) *^ v+scMulId v = 1 *^ v ~== v++prop_scMulDistr1Short = scMulDistr1 :: GLshort -> GLshort -> GLshort -> Bool+prop_scMulDistr2Short = scMulDistr2 :: GLshort -> GLshort -> GLshort -> Bool+prop_scMulRespectShort = scMulRespect :: GLshort -> GLshort -> GLshort -> Bool+prop_scMulIdShort = scMulId :: GLshort -> Bool++prop_scMulDistr1Int = scMulDistr1 :: GLint -> GLint -> GLint -> Bool+prop_scMulDistr2Int = scMulDistr2 :: GLint -> GLint -> GLint -> Bool+prop_scMulRespectInt = scMulRespect :: GLint -> GLint -> GLint -> Bool+prop_scMulIdInt = scMulId :: GLint -> Bool++prop_scMulDistr1Float = scMulDistr1 :: GLfloat -> GLfloat -> GLfloat -> Bool+prop_scMulDistr2Float = scMulDistr2 :: GLfloat -> GLfloat -> GLfloat -> Bool+prop_scMulRespectFloat = scMulRespect :: GLfloat -> GLfloat -> GLfloat -> Bool+prop_scMulIdFloat = scMulId :: GLfloat -> Bool++prop_scMulDistr1Double = scMulDistr1 :: GLdouble -> GLdouble -> GLdouble -> Bool+prop_scMulDistr2Double = scMulDistr2 :: GLdouble -> GLdouble -> GLdouble -> Bool+prop_scMulRespectDouble = scMulRespect :: GLdouble -> GLdouble -> GLdouble -> Bool+prop_scMulIdDouble = scMulId :: GLdouble -> Bool++innerSym x y = (x <.> y) ~== (y <.> x)+innerLinMul a x y = ((a *^ x) <.> y) ~== a * (x <.> y)+innerLinAdd x y z = ((x ^+^ y) <.> z) ~== (x <.> z) + (y <.> z)++prop_innerSymFloat = innerSym :: GLfloat -> GLfloat -> Bool+prop_innerLinMulFloat = innerLinMul :: GLfloat -> GLfloat -> GLfloat -> Bool+prop_innerLinAddFloat = innerLinAdd :: GLfloat -> GLfloat -> GLfloat -> Bool++prop_innerSymDouble = innerSym :: GLdouble -> GLdouble -> Bool+prop_innerLinMulDouble = innerLinMul :: GLdouble -> GLdouble -> GLdouble -> Bool+prop_innerLinAddDouble = innerLinAdd :: GLdouble -> GLdouble -> GLdouble -> Bool+++instance Arbitrary CShort where+ arbitrary = fromIntegral <$> (arbitrary :: Gen Int16)+instance Arbitrary CInt where+ arbitrary = fromIntegral <$> (arbitrary :: Gen Int32)+instance Arbitrary CFloat where+ arbitrary = realToFrac <$> (arbitrary :: Gen Float)+instance Arbitrary CDouble where+ arbitrary = realToFrac <$> (arbitrary :: Gen Double)++main :: IO ()+main = $(defaultMainGenerator)
vector-space-opengl.cabal view
@@ -1,5 +1,5 @@ Name: vector-space-opengl-Version: 0.1+Version: 0.2 Synopsis: Instances of vector-space classes for OpenGL types Description: Instances of <http://hackage.haskell.org/package/vector-space> classes for 'OpenGL' types. License: BSD3@@ -12,10 +12,21 @@ Library exposed-modules: Data.VectorSpace.OpenGL- other-modules: Data.VectorSpace.OpenGL.TH hs-source-dirs: src- extensions: TemplateHaskell, TypeFamilies, UndecidableInstances- build-depends: base == 4.*,- OpenGL == 2.4.*,- template-haskell == 2.6.*,- vector-space == 0.8.*+ extensions: TypeFamilies, UndecidableInstances+ build-depends: base >= 4.0 && < 5,+ OpenGL >= 2.6.0,+ vector-space >= 0.8.0++Test-Suite test-vector-space-opengl+ type: exitcode-stdio-1.0+ hs-source-dirs: test+ main-is: Tests.hs+ build-depends: base,+ OpenGL,+ ieee754,+ vector-space,+ QuickCheck >= 2.5,+ test-framework >= 0.8,+ test-framework-quickcheck2 >= 0.3,+ test-framework-th >= 0.2