packages feed

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"