packages feed

matrix-sized-0.0.3: tests/Main.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE FlexibleInstances #-}

module Main where

import Test.Tasty
import Data.Matrix.Static.LinearAlgebra
import qualified Data.Matrix.Static.Dense as D
import qualified Data.Matrix.Static.Sparse as S
import Data.Singletons
import Data.Vector.Storable (Storable)
import GHC.TypeNats (KnownNat)
import Control.Monad.IO.Class (liftIO)

import Test.Tasty.QuickCheck

instance (Arbitrary a, KnownNat m, KnownNat n) => Arbitrary (Matrix m n a) where
    arbitrary = D.fromList <$> vector (m*n)
      where
        m = fromIntegral $ fromSing (sing :: Sing m)
        n = fromIntegral $ fromSing (sing :: Sing n)
    shrink _v = []

{-
propTranspose :: Matrix 50 100 Double -> Bool
propTranspose m = D.transpose (D.transpose m) == m && 
    D.convertAny (S.transpose $ S.transpose (D.convertAny m)) == m
-}

main :: IO ()
main = defaultMain $ testGroup "Main"
    [ testProperty "" square
    ]