diff options
author | Mike Gerwitz <gerwitm@lovullo.com> | 2016-07-05 16:14:57 -0400 |
---|---|---|
committer | Mike Gerwitz <gerwitm@lovullo.com> | 2016-07-06 00:16:12 -0400 |
commit | e5da6f8ce10f9b7cd5e11ffe7a3ba4302ba6c216 (patch) | |
tree | 0b6424d2d57b408495af2c92bc18bc0db2a3d4a0 | |
parent | 641147cd8ff84755b640869e55c8be48cc566b31 (diff) | |
download | tame-e5da6f8ce10f9b7cd5e11ffe7a3ba4302ba6c216.tar.gz tame-e5da6f8ce10f9b7cd5e11ffe7a3ba4302ba6c216.tar.bz2 tame-e5da6f8ce10f9b7cd5e11ffe7a3ba4302ba6c216.zip |
Add graph:make-from-vertices
* src/graph.xsl (graph:make-from-vertices): Added
* test/graph-test.xsl (foo:graph-with-dupes): Added duplicate edges
* test/graph.xspec: Added tests
-rw-r--r-- | src/graph.xsl | 24 | ||||
-rw-r--r-- | test/graph-test.xsl | 2 | ||||
-rw-r--r-- | test/graph.xspec | 36 |
3 files changed, 61 insertions, 1 deletions
diff --git a/src/graph.xsl b/src/graph.xsl index 6950c03..25fdad6 100644 --- a/src/graph.xsl +++ b/src/graph.xsl @@ -29,6 +29,7 @@ <import href="../hoxsl/src/apply.xsl" /> + <!-- @node Dependency Graph @section Dependency Graph @@ -51,6 +52,29 @@ use the node QNames for type checks.} --> + +<!-- + Create a graph from the given vertex set @var{$vertices}. + The resulting graph will be normalized with duplicate vertices and + edges removed, + making it suitable for ad hoc graph generation.@c + @footnote{This is done by calling @ref{graph:union}.} +--> +<function name="graph:make-from-vertices" + as="element( preproc:sym-deps )"> + <param name="vertices" as="element( preproc:sym-dep )*" /> + + <variable name="graph" as="element( preproc:sym-deps )"> + <preproc:sym-deps> + <sequence select="$vertices" /> + </preproc:sym-deps> + </variable> + + <!-- dedupe/normalize --> + <sequence select="graph:union( $graph )" /> +</function> + + <!-- Produce a new graph that is the transpose of @var{$graph}@mdash{}that is, diff --git a/test/graph-test.xsl b/test/graph-test.xsl index e8f7b5b..eaa654d 100644 --- a/test/graph-test.xsl +++ b/test/graph-test.xsl @@ -146,9 +146,9 @@ <variable name="foo:graph-vtwo-vthree" as="element( preproc:sym-deps )"> <preproc:sym-deps> <preproc:sym-dep name="a"> - <preproc:sym-ref name="a" attr1="foo" /> <preproc:sym-ref name="b" attr1="foo" attr2="bar" /> <preproc:sym-ref name="c" /> + <preproc:sym-ref name="a" attr1="foo" /> </preproc:sym-dep> <preproc:sym-dep name="b"> diff --git a/test/graph.xspec b/test/graph.xspec index 7c823f0..209f965 100644 --- a/test/graph.xspec +++ b/test/graph.xspec @@ -29,6 +29,42 @@ stylesheet="graph-test.xsl"> + <scenario label="graph:make-from-vertices"> + <scenario label="with no vertices"> + <call function="graph:make-from-vertices"> + <param name="vertices" + select="()" /> + </call> + + <expect label="produces an empty graph"> + <preproc:sym-deps /> + </expect> + </scenario> + + + <scenario label="with vertices"> + <call function="graph:make-from-vertices"> + <param name="vertices" + select="$foo:graph-vtwo/preproc:sym-dep" /> + </call> + + <expect label="produces a graph containing those vertices" + select="$foo:graph-vtwo" /> + </scenario> + + + <scenario label="with duplicate vertices"> + <call function="graph:make-from-vertices"> + <param name="vertices" + select="$foo:graph-with-dupes/preproc:sym-dep" /> + </call> + + <expect label="removes duplicate vertices and edges" + select="$foo:graph-deduped" /> + </scenario> + </scenario> + + <scenario label="graph:reverse on a disconnected DAG"> <call function="graph:reverse"> <param name="graph" |