packages feed

numeric-prelude-0.4.3.3: test/Test/Algebra/PrincipalIdealDomain.hs

-- Do not edit! Automatically created with doctest-extract from src/Algebra/PrincipalIdealDomain.hs
{-# LINE 64 "src/Algebra/PrincipalIdealDomain.hs" #-}

module Test.Algebra.PrincipalIdealDomain where

import Test.DocTest.Base
import qualified Test.DocTest.Driver as DocTest

{-# LINE 65 "src/Algebra/PrincipalIdealDomain.hs" #-}
import     qualified Algebra.PrincipalIdealDomain as PID
import     Test.NumericPrelude.Utility ((/\))
import     qualified Test.QuickCheck as QC

genResidueClass     :: QC.Gen (Integer,Integer)
genResidueClass     = do
       m <- fmap QC.getNonZero $ QC.arbitrary
       a <- QC.choose (min 0 $ 1+m, max 0 $ m-1)
       return (m,a)

test :: DocTest.T ()
test = do
 DocTest.printPrefix "Algebra.PrincipalIdealDomain:305: "
{-# LINE 305 "src/Algebra/PrincipalIdealDomain.hs" #-}
 DocTest.property
{-# LINE 305 "src/Algebra/PrincipalIdealDomain.hs" #-}
     (QC.listOf genResidueClass /\ \xs -> case PID.chineseRemainderMulti xs of Nothing -> True; Just (n,b) -> abs n == abs (foldl lcm 1 (map fst xs)) && map snd xs == map (mod b . fst) xs)
 DocTest.printPrefix "Algebra.PrincipalIdealDomain:306: "
{-# LINE 306 "src/Algebra/PrincipalIdealDomain.hs" #-}
 DocTest.property
{-# LINE 306 "src/Algebra/PrincipalIdealDomain.hs" #-}
     (\(QC.NonEmpty ms) b -> let xs = map (\(QC.NonZero m) -> (m, mod b m)) ms in case PID.chineseRemainderMulti xs of Nothing -> False; Just (n,c) -> abs n == abs (foldl lcm 1 (map QC.getNonZero ms)) && mod b n == (c::Integer))
 DocTest.printPrefix "Algebra.PrincipalIdealDomain:298: "
{-# LINE 298 "src/Algebra/PrincipalIdealDomain.hs" #-}
 DocTest.example
{-# LINE 298 "src/Algebra/PrincipalIdealDomain.hs" #-}
   (PID.chineseRemainderMulti [(100,21), (10000,2021::Integer)])
  [ExpectedLine [LineChunk "Just (10000,2021)"]]
 DocTest.printPrefix "Algebra.PrincipalIdealDomain:300: "
{-# LINE 300 "src/Algebra/PrincipalIdealDomain.hs" #-}
 DocTest.example
{-# LINE 300 "src/Algebra/PrincipalIdealDomain.hs" #-}
   (PID.chineseRemainderMulti [(97,90),(99,10),(100,0::Integer)])
  [ExpectedLine [LineChunk "Just (960300,100000)"]]
 DocTest.printPrefix "Algebra.PrincipalIdealDomain:302: "
{-# LINE 302 "src/Algebra/PrincipalIdealDomain.hs" #-}
 DocTest.example
{-# LINE 302 "src/Algebra/PrincipalIdealDomain.hs" #-}
   (PID.chineseRemainderMulti [(95,30),(97,27),(98,8),(99,1::Integer)])
  [ExpectedLine [LineChunk "Just (89403930,1000000)"]]