packages feed

matrices-0.5.0: tests/test.hs

import Test.Tasty
import qualified Data.Matrix.Unboxed as MU
import qualified Data.Matrix.Class as C
import qualified Data.Matrix.Sparse.Generic as MS
import qualified Data.Vector.Unboxed as U
import Test.Tasty.HUnit

main :: IO ()
main = defaultMain $ testGroup "Main"
    [ testCase "xx" testEqual
    , subMatrixTest
    , subMatrixEqual
    ]

subMatrixEqual :: TestTree
subMatrixEqual = testCase "submatrix equal" $ assertEqual "x" mat submat
  where
    mat = MU.fromLists [[1]] :: MU.Matrix Int
    submat = MU.subMatrix (0,0) (0,0) (MU.fromLists [[1,2],[3,4]]) :: MU.Matrix Int

testEqual :: Assertion
testEqual = do
    let xs = [0,0,0,0,1,2,3,0,0,0,0,0,4,5,67,0,0,2,40,0,2,0,0,20,0,0,0]
        m1 = MU.fromList (3,9) xs
        al = filter ((/=0) . snd) $ MU.toList $ MU.imap (\i v -> (i,v)) m1
        m2 = C.fromList (3,9) xs :: MS.CSR U.Vector Int
        m3 = MS.fromAscAL (3,9) (length al) al :: MS.CSR U.Vector Int

        row1 = C.toRows m1
        row2 = C.toRows m2

--    assertEqual "x" (MG.flatten m1) (MG.flatten m2)
    assertEqual "x" (C.flatten m2) (C.flatten m3)
    assertEqual "x" row1 row2

subMatrixTest :: TestTree
subMatrixTest = testGroup "subMatrix"
    [ testCase "case 1" $ [[5,6], [8,9]] @=? MU.toLists sub1
    , testCase "case 2" $ [[5,6]] @=? MU.toLists sub2
    , testCase "case 3" $ [[5], [8]] @=? MU.toLists sub3
    , testCase "case 4" $ [[6], [9]] @=? MU.toLists sub4
    , testCase "case 5" $ [[9]] @=? MU.toLists sub5
    , testCase "case 6" $ [[5]] @=? MU.toLists sub6
    , testCase "case 7" $ [[8]] @=? MU.toLists sub7
    ]
  where
    ori = MU.fromLists [[1, 2, 3], [4, 5, 6], [7, 8, 9]] :: MU.Matrix Int
    sub1 = MU.subMatrix (1,1) (2,2) ori
    sub2 = MU.subMatrix (0,0) (0,1) sub1
    sub3 = MU.subMatrix (0,0) (1,0) sub1
    sub4 = MU.subMatrix (0,1) (1,1) sub1
    sub5 = MU.subMatrix (1,1) (1,1) sub1
    sub6 = MU.subMatrix (0,0) (0,0) sub1
    sub7 = MU.subMatrix (1,0) (1,0) sub1