packages feed

crocodile-0.1.2: app/src/Tests/VectorTest.hs

module Tests.VectorTest where

import PolymorphicNum
import Vector
import Test.HUnit

test_Add = TestCase (assertEqual "Vector addition" expectedResult (v1 <+> v2))
    where
      v1 = Vector 1 2 3 4
      v2 = Vector 10 20 30 40
      expectedResult = Vector 11 22 33 44

test_Sub = TestCase (assertEqual "Vector subtraction" expectedResult (v1 <-> v2))
    where
      v1 = Vector 10 20 30 40
      v2 = Vector 1 2 3 4
      expectedResult = Vector 9 18 27 36

test_Mul = TestCase (assertEqual "Vector multiplication" expectedResult (v1 <*> v2))
    where
      v1 = Vector 1 0 2 3
      v2 = Vector 1 10 (-2) 3
      expectedResult = Vector 1 0 (-4) 9

test_Madd = TestCase (assertEqual "Vector madd" expectedResult (madd pos dir k))
    where
      pos = Vector 1 2 3 1
      dir = Vector 0.5 0 1 0
      k = 10
      expectedResult = Vector 6 2 13 1

test_ScalarMul = TestCase (assertEqual "Vector-scalar mul" expectedResult (vec <*> k))
    where
      vec = Vector 1 2 (-3) 1
      k = 2 :: Double
      expectedResult = Vector 2 4 (-6) 2

test_ScalarDiv = TestCase (assertEqual "Vector-scalar div" expectedResult (vec </> k))
    where
      vec = Vector 10 20 (-30) 40
      k = 2 :: Double
      expectedResult = Vector 5 10 (-15) 20

test_ScalarDot3 = TestCase (assertEqual "dot3" expectedResult (v1 `dot3` v2))
    where
      v1 = Vector 1 2 0 1
      v2 = Vector (-2) 4 (-5) 1
      expectedResult = 6

test_ScalarDot4 = TestCase (assertEqual "dot4" expectedResult (v1 `dot4` v2))
    where
      v1 = Vector 1 2 0 1
      v2 = Vector (-2) 4 (-5) 1
      expectedResult = 7

test_SatScalarDot3 = TestCase (assertEqual "sdot3" expectedResult (v1 `sdot3` v2))
    where
      v1 = Vector 1 2 0 1
      v2 = Vector (-2) 4 (-5) 1
      expectedResult = 1

test_SatScalarDot4 = TestCase (assertEqual "sdot4" expectedResult (v1 `sdot4` v2) )
    where
      v1 = Vector 1 2 0 1
      v2 = Vector (-2) (-4) (-5) 1
      expectedResult = 0

test_Cross = TestCase (assertEqual "cross" expectedResult (v1 `cross` v2))
    where
      v1 = Vector 1 0 0 0
      v2 = Vector 0 1 0 0
      expectedResult = Vector 0 0 1 0

test_Magnitude = TestCase (assertEqual "magnitude" expectedResult (magnitude v1))
    where
      v1 = Vector 3 4 0 0
      expectedResult = 5

test_MagnitudeSq = TestCase (assertEqual "magnitudeSq" expectedResult (magnitudeSq v1))
    where
      v1 = Vector 3 4 0 0
      expectedResult = 25

test_Normalise = TestCase (assertEqual "normalise" expectedResult (normalise v1))
    where
      v1 = Vector 1 (-1) 1 0
      expectedResult = Vector 0.5773502691896258 (-0.5773502691896258) 0.5773502691896258 0

test_Reflect = undefined
test_Refract = undefined

test_LargestAxis = TestCase (assertEqual "largestAxis" expectedResult (largestAxis v1))
    where
      v1 = Vector (-1) 2 (-3) 0
      expectedResult = 2

test_Min = TestCase (assertEqual "min" expectedResult (v1 `Vector.min` v2))
    where
      v1 = Vector (-1) 2 (-3) 8
      v2 = Vector 10 (-20) 50 2
      expectedResult = Vector (-1) (-20) (-3) 2

test_Max = TestCase (assertEqual "max" expectedResult (v1 `Vector.max` v2))
    where
      v1 = Vector (-1) 2 (-3) 8
      v2 = Vector 10 (-20) 50 2
      expectedResult = Vector 10 2 50 8

tests_Vector = TestList [
                TestLabel "Addition" test_Add, 
                TestLabel "Subtraction" test_Sub,
                TestLabel "Multiplication" test_Mul,
                TestLabel "Madd" test_Madd,
                TestLabel "Vector * scalar" test_ScalarMul,
                TestLabel "Vector / scalar" test_ScalarDiv,
                TestLabel "Dot3" test_ScalarDot3,
                TestLabel "Dot4" test_ScalarDot4,
                TestLabel "Sdot3" test_SatScalarDot3,
                TestLabel "Sdot4" test_SatScalarDot4,
                TestLabel "Cross" test_Cross,
                TestLabel "Magnitude" test_Magnitude,
                TestLabel "MagnitudeSq" test_MagnitudeSq,
                TestLabel "Normalise" test_Normalise,
                TestLabel "LargestAxis" test_LargestAxis,
                TestLabel "Min" test_Min,
                TestLabel "Max" test_Max
               ]