arithmoi-0.13.4.0: test-suite/Math/NumberTheory/Moduli/SingletonTests.hs
-- |
-- Module: Math.NumberTheory.Moduli.SingletonTests
-- Copyright: (c) 2019 Andrew Lelechenko
-- Licence: MIT
-- Maintainer: Andrew Lelechenko <andrew.lelechenko@gmail.com>
--
-- Tests for Math.NumberTheory.Moduli.Singleton
--
{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_GHC -fno-warn-type-defaults #-}
module Math.NumberTheory.Moduli.SingletonTests
( testSuite
) where
import Test.Tasty
import qualified Data.Map as M
import Math.NumberTheory.Moduli.Singleton
import Math.NumberTheory.Primes
import Math.NumberTheory.TestUtils
someSFactorsProperty1
:: (Ord a, Num a)
=> [(Prime a, Word)]
-> Bool
someSFactorsProperty1 xs = case someSFactors xs of
Some sm -> unSFactors sm == M.assocs (M.fromListWith (+) xs)
cyclicGroupFromModuloProperty1
:: (Integral a, UniqueFactorisation a)
=> Positive a
-> Bool
cyclicGroupFromModuloProperty1 (Positive m) = mcg1 == mcg2
where
mcg1 = cyclicGroupFromModulo m
mcg2 = cyclicGroupFromFactors (factorise m)
testSuite :: TestTree
testSuite = testGroup "Singleton"
[ testSmallAndQuick "unSFactors . someSFactors = id" (someSFactorsProperty1 @Integer)
, testIntegralPropertyNoLarge "cyclicGroupFromModulo = cyclicGroupFromFactors . factorise" cyclicGroupFromModuloProperty1
]