{-# LANGUAGE CPP #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeApplications #-}
module Main where
import Data.Matrix.Static
import Test.Tasty
import Test.Tasty.HUnit
main :: IO ()
main = defaultMain tests
tests :: TestTree
tests = testGroup "Unit Tests" [ docExamples ]
docExamples :: TestTree
docExamples =
let mat33 = fromListUnsafe @3 @3 @Int [1..9]
in testGroup "Doc examples"
[ testCase "mapRowUnsafe" $
mapRowUnsafe (\_ x -> x + 1) 2 mat33 @?=
fromListUnsafe [1,2,3,5,6,7,7,8,9]
, testCase "mapRow" $
mapRow @2 (\_ x -> x + 1) mat33 @?=
fromListUnsafe [1,2,3,5,6,7,7,8,9]
, testCase "mapColUnsafe" $
mapColUnsafe (\_ x -> x + 1) 2 mat33 @?=
fromListUnsafe [1,3,3,4,6,6,7,9,9]
, testCase "mapCol" $
mapCol @2 (\_ x -> x + 1) mat33 @?=
fromListUnsafe [1,3,3,4,6,6,7,9,9]
#if MIN_VERSION_matrix(0,3,6)
, testCase "mapPos" $
mapPos (\(r,c) _ -> r - c) mat33 @?=
fromListUnsafe [0,(-1),(-2),1,0,(-1),2,1,0]
#endif
, testCase "zero" $
zero @2 @2 @Int @?= fromListUnsafe [0,0,0,0]
, testCase "matrix" $
(matrix (\(i,j) -> 2*i-j) :: Matrix 2 4 Int) @?=
fromListUnsafe [1,0,(-1),(-2),3,2,1,0]
, testCase "identity" $
identity @3 @Int @?=
fromListUnsafe [1,0,0,0,1,0,0,0,1]
, testCase "fromList" $
(fromList [1..9] :: Maybe (Matrix 3 3 Int)) @?=
(Just $ fromListUnsafe [1,2,3,4,5,6,7,8,9])
, testCase "fromLists" $
(fromLists [[1,2,3],[4,5,6],[7,8,9]] :: Maybe (Matrix 3 3 Int)) @?=
(Just $ fromListUnsafe [1,2,3,4,5,6,7,8,9])
, testCase "fromListsUnsafe" $
(fromListsUnsafe [[1,2,3],[4,5,6],[7,8,9]] :: Matrix 3 3 Int) @?=
fromListUnsafe [1,2,3,4,5,6,7,8,9]
, testCase "toList" $
toList mat33 @?= [1..9]
, testCase "toLists" $
toLists mat33 @?= [[1,2,3],[4,5,6],[7,8,9]]
, testCase "permMatrix" $
permMatrix @3 @2 @3 @Int @?= fromListUnsafe [1,0,0,0,0,1,0,1,0]
, testCase "permMatrixUnsafe" $
permMatrixUnsafe @3 @Int 2 3 @?= fromListUnsafe [1,0,0,0,0,1,0,1,0]
, testCase "getElem" $
getElem @2 @1 (fromListUnsafe @2 @2 [1..4]) @?= (3 :: Int)
, testCase "unsafeGet" $
unsafeGet 2 1 (fromListUnsafe @2 @2 [1..4]) @?= (3 :: Int)
, testCase "setElem" $
setElem @1 @2 0 (fromListUnsafe @1 @3 @Int [1,2,3]) @?=
fromListUnsafe [1,0,3]
, testCase "transpose" $
transpose mat33 @?= fromListUnsafe [1,4,7,2,5,8,3,6,9]
, testCase "extendTo" $
extendTo @4 @5 0 mat33 @?=
fromListUnsafe [1,2,3,0,0,4,5,6,0,0,7,8,9,0,0,0,0,0,0,0]
, testCase "submatrixUnsafe" $
submatrixUnsafe @2 @2 1 2 mat33 @?= fromListUnsafe [2,3,5,6]
, testCase "minorMatrixUnsafe" $
minorMatrixUnsafe 2 2 mat33 @?= fromListUnsafe [1,3,7,9]
, testCase "minorMatrix" $
minorMatrix @2 @2 mat33 @?= fromListUnsafe [1,3,7,9]
, testCase "splitAndJoin" $
joinBlocks (splitBlocks @2 @2 mat33) @?= mat33
, testCase "<|>" $
fromListUnsafe @2 @2 [1,2,3,4] <|> fromListUnsafe @2 @2 [6,7,8,9] @?=
fromListUnsafe @2 @4 @Int [1,2,6,7,3,4,8,9]
, testCase "<->" $
fromListUnsafe @2 @2 [1,2,3,4] <-> fromListUnsafe @2 @2 [6,7,8,9] @?=
fromListUnsafe @4 @2 @Int [1,2,3,4,6,7,8,9]
, testCase "scaleMatrix" $
scaleMatrix 2 mat33 @?= fromListUnsafe [2,4,6,8,10,12,14,16,18]
, testCase "scaleRowUnsafe" $
scaleRowUnsafe 3 2 mat33 @?= fromListUnsafe [1,2,3,12,15,18,7,8,9]
, testCase "scaleRow" $
scaleRow @2 3 mat33 @?= fromListUnsafe [1,2,3,12,15,18,7,8,9]
, testCase "ombineRowsUnsafe" $
combineRowsUnsafe 2 2 1 mat33 @?= fromListUnsafe [1,2,3,6,9,12,7,8,9]
, testCase "combineRows" $
combineRows @2 @1 2 mat33 @?= fromListUnsafe [1,2,3,6,9,12,7,8,9]
, testCase "switchRowsUnsafe" $
switchRowsUnsafe 1 2 mat33 @?= fromListUnsafe [4,5,6,1,2,3,7,8,9]
, testCase "switchRows" $
switchRows @1 @2 mat33 @?= fromListUnsafe [4,5,6,1,2,3,7,8,9]
, testCase "switchColsUnsafe" $
switchColsUnsafe 1 2 mat33 @?= fromListUnsafe [2,1,3,5,4,6,8,7,9]
, testCase "switchCols" $
switchCols @1 @2 mat33 @?= fromListUnsafe [2,1,3,5,4,6,8,7,9]
, testCase "luDecomp" $
(luDecomp $ fromListUnsafe @3 @3 @Double [1,2,0,0,2,1,2,0,2]) @?=
Just ( fromListUnsafe [2,0,2,0,2,(-1),0,0,2]
, fromListUnsafe [1,0,0,(1/2),1,0,0,1,1]
, fromListUnsafe [0,0,1,1,0,0,0,1,0]
, 1 )
, testCase "luDecomp'" $
(luDecomp' $ fromListUnsafe @3 @2 @Double [1,0,0,2,2,1]) @?=
Just ( fromListUnsafe [2,1,0,2,0,0]
, fromListUnsafe [1,0,0,0,1,0,(1/2),(-1/4),1]
, fromListUnsafe [0,0,1,0,1,0,1,0,0]
, fromListUnsafe [1,0,0,1]
, -1
, 1 )
-- TODO: Test case for cholDecomp
, testCase "trace" $
trace mat33 @?= 15
, testCase "diagProd" $
diagProd mat33 @?= 45
]