FiniteCategories-0.2.0.0: test/CheckAllFiniteCategories.hs
{-| Module : FiniteCategories
Description : Check the structure of every finite categories defined in this package.
Copyright : Guillaume Sabbagh 2021
License : GPL-3
Maintainer : guillaumesabbagh@protonmail.com
Stability : experimental
Portability : portable
Check the structure of every finite categories defined in this package.
-}
module CheckAllFiniteCategories
(
main
)
where
import Math.FiniteCategory
import Math.FiniteCategoryError
import Math.Categories
import Math.FiniteCategories
import Data.WeakSet (Set)
import qualified Data.WeakSet as Set
import Data.WeakSet.Safe
import Data.WeakMap (Map)
import qualified Data.WeakMap as Map
import Data.WeakMap.Safe
import Math.PureSet
import Data.Text (Text, pack)
import Data.Maybe (fromJust)
import Numeric.Natural
assert :: (Show c, Show m, Show o, Eq m, Eq o, FiniteCategory c m o, Morphism m o) => c -> IO ()
assert cat
| null check = putStrLn $ (show cat)++" passed"
| otherwise = do
putStrLn $ (show cat)++" failed: "++(show err)
error "Assertion failed"
where
check = checkFiniteCategory cat
Just err = check
-- | Check the structure of every finite categories defined in this package.
main = do
putStrLn "Start of CheckAllFiniteCategories"
assert $ V
assert $ Hat
assert $ Parallel
assert $ discreteCategory $ set [1,2,3,4 :: Int]
assert $ numberCategory 5
assert $ Square
assert $ ens.(Set.powerSet).set $ "ABC"
assert $ (FullSubcategory FinGrph $ (underlyingGraphFormat id (const.pack $ "")).numberCategory <$> set [0..2] :: FullSubcategory (FinGrph Natural Text) (GraphHomomorphism Natural Text) (Graph Natural Text))
assert $ (Op (ens.(Set.powerSet).set $ "ABC"))
assert $ (FullSubcategory FinCat (numberCategory <$> (set [0..3])) :: FullSubcategory (FinCat NumberCategory NumberCategoryMorphism Natural) (FinFunctor NumberCategory NumberCategoryMorphism Natural) NumberCategory)
assert $ FunctorCategory (numberCategory 2) (numberCategory 4)
assert $ (unsafeCompositionGraph (unsafeGraph (set [1 :: Int,2,3]) (set [Arrow{sourceArrow=1,targetArrow=1,labelArrow='a'},Arrow{sourceArrow=1,targetArrow=2,labelArrow='b'},Arrow{sourceArrow=2,targetArrow=3,labelArrow='c'}])) (weakMap [([Arrow{sourceArrow=1,targetArrow=1,labelArrow='a'},Arrow{sourceArrow=1,targetArrow=1,labelArrow='a'}],[Arrow{sourceArrow=1,targetArrow=1,labelArrow='a'}])]))
assert $ (tgt (finiteCategoryToCompositionGraph (ens.(Set.powerSet).set $ "AB")))
assert $ (unsafeSafeCompositionGraph (unsafeGraph (set [1 :: Int]) (set [Arrow{sourceArrow=1,targetArrow=1,labelArrow='a'}])) (weakMap []) 3)
assert $ fromJust $ sliceCategory (numberCategory 4) 2
assert $ fromJust $ cosliceCategory (numberCategory 4) 2
assert $ arrowCategory (numberCategory 4)
assert $ One
let diag = completeDiagram Diagram{src=V,tgt=Square,omap=weakMap [(VA,SquareD),(VB,SquareB),(VC,SquareC)], mmap=weakMap [(VF,SquareH),(VG,SquareI)]}
assert $ coneCategory diag
let diag2 = completeDiagram Diagram{src=Hat,tgt=Square,omap=weakMap [(HatA,SquareA),(HatB,SquareB),(HatC,SquareC)], mmap=weakMap [(HatF,SquareF),(HatG,SquareG)]}
assert $ coconeCategory diag2
assert $ (embeddingToSubcategory.yonedaEmbedding $ Square)
putStrLn "End of CheckAllFiniteCategories"