packages feed

computational-algebra-0.4.0.0: tests/matrix.hs

module Main where
import           Algebra.Algorithms.ZeroDim
import           Algebra.Ring.Polynomial.Quotient
import qualified Data.Matrix                      as M
import           Data.Type.Monomorphic            (liftPoly)
import           Data.Type.Natural
import qualified Data.Vector                      as V
import           Test.Hspec
import           Test.Hspec.QuickCheck
import           Test.QuickCheck
import           Utils

main :: IO ()
main = hspec $ do
  describe "matRepr'" $ do
    prop "coincids with matrixRep" $ checkForArity [1..3] prop_matrixRep
  return ()

prop_matrixRep :: SingI n => SNat n -> Property
prop_matrixRep sn =
  forAll arbitrary $ \(ZeroDimIdeal ideal) ->
  forAll (polyOfDim sn) $ \poly ->
  reifyQuotient ideal $ \pxy ->
  let f = modIdeal' pxy poly
  in matrixRep f == matToLists (matRepr' f)

matToLists :: M.Matrix a -> [[a]]
matToLists mat = [ V.toList $ M.getRow i mat | i <- [1..M.nrows mat] ]