units-2.2: Tests/Vector.hs
{-# LANGUAGE TypeFamilies #-}
{- Test the property of vector quantity
Copyright (c) 2014 Richard Eisenberg
-}
module Tests.Vector where
import Data.Metrology.Vector
import Data.Metrology.Show ()
import Data.Metrology.SI.Poly
import Data.VectorSpace
import Test.Tasty
import Test.Tasty.HUnit
len1 :: Length SI Rational
len1 = 1 % Meter
type V2 = Length SI (Rational, Rational)
vec1 :: V2
vec1 = (2,3) % Meter
linearCompose :: (VectorSpace n, a ~ Scalar n) => a -> a -> Qu d l n -> Qu d l n -> Qu d l n
linearCompose a b x y = a *| x |+| b *| y
tests :: TestTree
tests = testGroup "Show"
[ testCase "Identity" $ vec1 @?= vec1
, testCase "Addition" $ vec1 |+| vec1 @?= 2 *| vec1
, testCase "Summation of multiple quantities" $
qSum [vec1,vec1,vec1] @?= 3 *| vec1
, testCase "Linear composition" $
linearCompose 0.2 0.8 vec1 vec1 @?= vec1
, testCase "Multiplication from right" $ 4 *| vec1 @?= vec1 |* 4
, testCase "Division by scalar" $ 10 *| vec1 @?= vec1 |/ 0.1
, testCase "scalar product" $
(5 % Meter) |*^| vec1 @?= ((10, 15) % (Meter :^ sTwo))
]