packages feed

computational-algebra-0.4.0.0: tests/multi-table.hs

{-# LANGUAGE DataKinds, NoMonomorphismRestriction, OverloadedStrings #-}
module Main where
import           Algebra.Ring.Ideal
import           Algebra.Ring.Polynomial
import           Algebra.Ring.Polynomial.Quotient
import           Data.Type.Natural
import           Test.Hspec
import qualified Test.Hspec.QuickCheck            as QC
import           Test.QuickCheck                  (Arbitrary (..))
import qualified Test.QuickCheck                  as QC
import           Utils

main :: IO ()
main = hspec spec

i1 :: Ideal (OrderedPolynomial (Fraction Integer) Lex Two)
i1 = toIdeal []

spec :: Spec
spec = do
  describe "Table multiplication" $ do
    it "coincides with ordinary multiplication" $ QC.property prop01

prop01 :: QC.Property
prop01 =
    QC.forAll (QC.resize 4 arbitrary `QC.suchThat` isNonTrivial) $ \(ZeroDimIdeal ideal) ->
        QC.forAll (QC.resize 6 $ polyOfDim sThree) $ \f -> QC.forAll (QC.resize 6 $ polyOfDim sThree) $ \g ->
          withQuotient ideal (modIdeal f * modIdeal g)
            == withQuotient ideal (multWithTable (modIdeal f) (modIdeal g))