module Edges.Gens where import Edges.Prelude hiding (choose) import Edges.Data import Test.QuickCheck.Gen nodeWithLimit :: Int -> Gen (Node a) nodeWithLimit max = Node <$> choose (0, max) bipartiteEdgesWithLimits :: Int -> Int -> Gen (Edges a b, Edges b a) bipartiteEdgesWithLimits nodeLimit edgeLimit = do aMaxIndex <- choose (0, pred nodeLimit) bMaxIndex <- choose (0, pred nodeLimit) edgesAmount <- choose (0, edgeLimit) if aMaxIndex == 0 || bMaxIndex == 0 then return (primListBipartiteEdges []) else do edges <- replicateM edgesAmount $ (,) <$> choose (0, aMaxIndex) <*> choose (0, bMaxIndex) return (primListBipartiteEdges edges)