Copyright | (c) Ivan Lazar Miljenovic |
---|---|
License | BSD3 |
Maintainer | Ivan.Miljenovic@gmail.com |
Safe Haskell | None |
Language | Haskell2010 |
This module provides default definitions for use with QuickCheck's
Arbitrary
class.
- arbitraryGraph :: (Graph gr, Arbitrary a, Arbitrary b) => Gen (gr a b)
- arbitraryGraphWith :: (Graph gr, Arbitrary a, Arbitrary b) => ([LEdge b] -> [LEdge b]) -> Gen (gr a b)
- shrinkGraph :: Graph gr => gr a b -> [gr a b]
- shrinkGraphWith :: Graph gr => gr a b -> [(Node, gr a b)]
- class DynGraph (BaseGraph ag) => ArbGraph ag where
- type BaseGraph ag :: * -> * -> *
- toBaseGraph :: ag a b -> BaseGraph ag a b
- fromBaseGraph :: BaseGraph ag a b -> ag a b
- edgeF :: Proxy ag -> [LEdge b] -> [LEdge b]
- shrinkFWith :: ag a b -> [(Node, ag a b)]
- shrinkF :: ArbGraph ag => ag a b -> [ag a b]
- arbitraryGraphBy :: forall ag a b. (ArbGraph ag, Arbitrary a, Arbitrary b) => Gen (ag a b)
- newtype NoMultipleEdges gr a b = NME {
- nmeGraph :: gr a b
- newtype NoLoops gr a b = NL {
- looplessGraph :: gr a b
- type SimpleGraph gr a b = NoLoops (NoMultipleEdges gr) a b
- newtype Undirected gr a b = UG {
- undirGraph :: gr a b
- data Connected ag a b
- connGraph :: ArbGraph ag => Connected ag a b -> BaseGraph ag a b
- arbitraryNodes :: Arbitrary a => Gen [LNode a]
- arbitraryEdges :: Arbitrary b => [LNode a] -> Gen [LEdge b]
- data GraphNodesEdges a b = GNEs {
- graphNodes :: [LNode a]
- graphEdges :: [LEdge b]
Documentation
arbitraryGraph :: (Graph gr, Arbitrary a, Arbitrary b) => Gen (gr a b) Source
Generate an arbitrary graph. Multiple edges are allowed.
arbitraryGraphWith :: (Graph gr, Arbitrary a, Arbitrary b) => ([LEdge b] -> [LEdge b]) -> Gen (gr a b) Source
Generate an arbitrary graph, using the specified function to manipulate the generated list of edges (e.g. remove multiple edges).
shrinkGraph :: Graph gr => gr a b -> [gr a b] Source
For a graph with at least two nodes, return every possible way of deleting a single node (i.e. will never shrink to an empty graph).
shrinkGraphWith :: Graph gr => gr a b -> [(Node, gr a b)] Source
Types of graphs
class DynGraph (BaseGraph ag) => ArbGraph ag where Source
Representation of generating arbitrary graph structures.
Typically, you would only use this for the toBaseGraph
function
or if you wanted to make a custom graph wrapper.
toBaseGraph :: ag a b -> BaseGraph ag a b Source
fromBaseGraph :: BaseGraph ag a b -> ag a b Source
edgeF :: Proxy ag -> [LEdge b] -> [LEdge b] Source
Any manipulation of edges that should be done to satisfy the requirements of the specified wrapper.
shrinkFWith :: ag a b -> [(Node, ag a b)] Source
Shrinking function (assuming only one node is removed at a time) which also returns the node that is removed.
arbitraryGraphBy :: forall ag a b. (ArbGraph ag, Arbitrary a, Arbitrary b) => Gen (ag a b) Source
Generate an instance of ArbGraph
using the class methods.
Specific graph structures
newtype NoMultipleEdges gr a b Source
A newtype wrapper to generate a graph without multiple edges (loops allowed).
ArbGraph gr => ArbGraph (NoMultipleEdges gr) Source | |
Eq (gr a b) => Eq (NoMultipleEdges gr a b) Source | |
Read (gr a b) => Read (NoMultipleEdges gr a b) Source | |
Show (gr a b) => Show (NoMultipleEdges gr a b) Source | |
(ArbGraph gr, Arbitrary a, Arbitrary b) => Arbitrary (NoMultipleEdges gr a b) Source | |
type BaseGraph (NoMultipleEdges gr) = BaseGraph gr Source |
A newtype wrapper to generate a graph without loops (multiple edges allowed).
NL | |
|
ArbGraph gr => ArbGraph (NoLoops gr) Source | |
Eq (gr a b) => Eq (NoLoops gr a b) Source | |
Read (gr a b) => Read (NoLoops gr a b) Source | |
Show (gr a b) => Show (NoLoops gr a b) Source | |
(ArbGraph gr, Arbitrary a, Arbitrary b) => Arbitrary (NoLoops gr a b) Source | |
type BaseGraph (NoLoops gr) = BaseGraph gr Source |
type SimpleGraph gr a b = NoLoops (NoMultipleEdges gr) a b Source
A wrapper to generate a graph without multiple edges and no loops.
newtype Undirected gr a b Source
A newtype wrapper such that each (non-loop) edge also has its reverse in the graph.
Note that there is no way to guarantee this after any additional edges are added or removed.
You should also apply this wrapper after NoMultipleEdges
or
else the wrong reverse edge might be removed.
UG | |
|
ArbGraph gr => ArbGraph (Undirected gr) Source | |
Eq (gr a b) => Eq (Undirected gr a b) Source | |
Read (gr a b) => Read (Undirected gr a b) Source | |
Show (gr a b) => Show (Undirected gr a b) Source | |
(ArbGraph gr, Arbitrary a, Arbitrary b) => Arbitrary (Undirected gr a b) Source | |
type BaseGraph (Undirected gr) = BaseGraph gr Source |
Connected graphs
A brute-force approach to generating connected graphs.
Note that this is not an instance of ArbGraph
as it is not
possible to arbitrarily layer a transformer on top of this.
Node and edge lists
arbitraryNodes :: Arbitrary a => Gen [LNode a] Source
Generally a list of labelled nodes.
arbitraryEdges :: Arbitrary b => [LNode a] -> Gen [LEdge b] Source
Given a specified list of nodes, generate a list of edges.
data GraphNodesEdges a b Source
Defined so as to be able to generate valid arbitrary
node and
edge lists.
If any specific structure (no multiple edges, no loops, etc.) is required then you will need to post-process this after generating it.
GNEs | |
|
(Eq a, Eq b) => Eq (GraphNodesEdges a b) Source | |
(Ord a, Ord b) => Ord (GraphNodesEdges a b) Source | |
(Read a, Read b) => Read (GraphNodesEdges a b) Source | |
(Show a, Show b) => Show (GraphNodesEdges a b) Source | |
(Arbitrary a, Arbitrary b) => Arbitrary (GraphNodesEdges a b) Source |