packages feed

units-2.2: Tests/Linearity.hs

{- Test the property of quantity as linear space
   Copyright (c) 2014 Richard Eisenberg
-}

module Tests.Linearity where

import Data.Metrology.Poly
import Data.Metrology.Show ()
import Data.Metrology.SI.Poly

import Test.Tasty
import Test.Tasty.HUnit

len1 :: Length SI Rational
len1 = 1 % Meter

linearCompose :: (Fractional a) => a -> a -> Qu d l a  -> Qu d l a -> Qu d l a 
linearCompose a b x y = a *| x |+| b *| y


tests :: TestTree
tests = testGroup "Show"
  [ testCase "Identity" $ len1 @?= len1
  , testCase "Addition" $ len1 |+| len1 @?= 2 *| len1 
  , testCase "Summation of multiple quantities" $ 
      qSum [len1,len1,len1] @?= 3 *| len1 
  , testCase "Linear composition" $ 
      linearCompose 0.2 0.8 len1 len1 @?= len1
  ]