import Control.Arrow import Data.Dependency import qualified Data.Map as M import qualified Data.Set as S import Test.Hspec free :: Dependency free = Dependency "free" mempty mempty comonad :: Dependency comonad = Dependency "comonad" mempty mempty lens :: Dependency lens = Dependency "lens" mempty ["free", "comonad"] deps :: [Dependency] deps = [free, lens, comonad] mapSingles :: [(d, b)] -> [(d, S.Set b)] mapSingles = fmap (second S.singleton) set :: PackageSet Dependency set = PackageSet $ M.fromList (mapSingles [("lens", lens), ("comonad", comonad), ("free", free)]) main :: IO () main = hspec $ parallel $ do describe "buildSequence" $ it "correctly orders dependencies" $ buildSequence deps `shouldBe` [[free, comonad], [lens]] describe "resolveDependencies" $ it "correctly resolves dependencies in a package set" $ resolveDependencies set (buildSequence [lens]) `shouldBe` Just [[free, comonad], [lens]]