{-# LANGUAGE DataKinds, TypeFamilies, TypeOperators #-}
module Main where
import Data.Sized.Matrix
import QC.QC()
import Test.QuickCheck as QC
-- import qualified Data.Sized.Sparse.Matrix as SM
-- NatType equivalences required for the join tests.
--type instance (4 + 5) = 9
--type instance (3 + 7) = 10
-- Small first cut at tests.
main :: IO ()
main = do
quickCheck prop_mm1
quickCheck prop_fmap1
quickCheck prop_joins
putStrLn "[Done]"
prop_mm1 :: Vector2 3 4 Int
-> Vector2 4 5 Int
-> Vector2 5 2 Int
-> Bool
prop_mm1 m1 m2 m3 = ((m1 `mm` m2) `mm` m3) == (m1 `mm` (m2 `mm` m3))
where
_types = (m1 :: Vector2 3 4 Int,
m2 :: Vector2 4 5 Int,
m3 :: Vector2 5 2 Int)
prop_fmap1 :: Vector2 9 29 Int -> Bool
prop_fmap1 m1 = fmap (+1) m1 == forEach m1 (\ _i a -> a + 1)
where
_types = (m1 :: Vector2 9 29 Int)
prop_joins :: Vector2 3 4 Int
-> Vector2 3 5 Int
-> Vector2 7 4 Int
-> Vector2 7 5 Int
-> Bool
prop_joins m1 m2 m3 m4 = (m1 `above` m3) `beside` (m2 `above` m4)
== (m1 `beside` m2) `above` (m3 `beside` m4)
where _types = (m1 :: Vector2 3 4 Int,
m4 :: Vector2 7 5 Int)