{-| 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"