arithmoi-0.5.0.0: test-suite/Math/NumberTheory/Primes/FactorisationTests.hs
-- |
-- Module: Math.NumberTheory.Primes.FactorisationTests
-- Copyright: (c) 2017 Andrew Lelechenko
-- Licence: MIT
-- Maintainer: Andrew Lelechenko <andrew.lelechenko@gmail.com>
-- Stability: Provisional
--
-- Tests for Math.NumberTheory.Primes.Factorisation
--
{-# OPTIONS_GHC -fno-warn-type-defaults #-}
module Math.NumberTheory.Primes.FactorisationTests
( testSuite
) where
import Test.Tasty
import Test.Tasty.HUnit
import Math.NumberTheory.Primes.Factorisation
import Math.NumberTheory.Primes.Testing
import Math.NumberTheory.TestUtils
factoriseProperty1 :: Assertion
factoriseProperty1 = assertEqual "0" [] (factorise 1)
factoriseProperty2 :: Positive Integer -> Bool
factoriseProperty2 (Positive n) = (-1, 1) : factorise n == factorise (negate n)
factoriseProperty3 :: Positive Integer -> Bool
factoriseProperty3 (Positive n) = all (isPrime . fst) (factorise n)
factoriseProperty4 :: Positive Integer -> Bool
factoriseProperty4 (Positive n) = product (map (uncurry (^)) (factorise n)) == n
testSuite :: TestTree
testSuite = testGroup "Factorisation"
[ testGroup "factorise"
[ testCase "0" factoriseProperty1
, testSmallAndQuick "negate" factoriseProperty2
, testSmallAndQuick "bases are prime" factoriseProperty3
, testSmallAndQuick "factorback" factoriseProperty4
]
]