diff options
author | Ludovic Courtès <ludo@gnu.org> | 2016-05-23 23:03:23 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2016-05-24 00:06:01 +0200 |
commit | e144e3427da93b962c7620ce2bd64add8c83cfdc (patch) | |
tree | 2f1cd6dd65e764e8dab09d5fa97f86a62664617d | |
parent | 623e4df42abd024e0a62ef0b30f9b550f37cba57 (diff) | |
download | guix-e144e3427da93b962c7620ce2bd64add8c83cfdc.tar guix-e144e3427da93b962c7620ce2bd64add8c83cfdc.tar.gz |
graph: Add 'node-reachable-count'.
* guix/graph.scm (node-reachable-count): New procedure.
* tests/graph.scm ("node-reachable-count"): New test.
-rw-r--r-- | guix/graph.scm | 8 | ||||
-rw-r--r-- | tests/graph.scm | 13 |
2 files changed, 21 insertions, 0 deletions
diff --git a/guix/graph.scm b/guix/graph.scm index af589c5c67..735d340c2c 100644 --- a/guix/graph.scm +++ b/guix/graph.scm @@ -39,6 +39,7 @@ node-back-edges traverse/depth-first node-transitive-edges + node-reachable-count %graphviz-backend graph-backend? @@ -126,6 +127,13 @@ procedure that, given a node, returns its list of direct dependents; it is typically returned by 'node-edges' or 'node-back-edges'." (traverse/depth-first cons '() nodes node-edges)) +(define (node-reachable-count nodes node-edges) + "Return the number of nodes reachable from NODES along NODE-EDGES." + (traverse/depth-first (lambda (_ count) + (+ 1 count)) + 0 + nodes node-edges)) + ;;; ;;; Graphviz export. diff --git a/tests/graph.scm b/tests/graph.scm index 32317195d7..1ce06cc817 100644 --- a/tests/graph.scm +++ b/tests/graph.scm @@ -275,4 +275,17 @@ edges." (return (lset= eq? (node-transitive-edges (list p2) edges) (list p1a p1b p0))))))) +(test-equal "node-reachable-count" + '(3 3) + (run-with-store %store + (let* ((p0 (dummy-package "p0")) + (p1a (dummy-package "p1a" (inputs `(("p0" ,p0))))) + (p1b (dummy-package "p1b" (inputs `(("p0" ,p0))))) + (p2 (dummy-package "p2" (inputs `(("p1a" ,p1a) ("p1b" ,p1b)))))) + (mlet* %store-monad ((all -> (list p2 p1a p1b p0)) + (edges (node-edges %package-node-type all)) + (back (node-back-edges %package-node-type all))) + (return (list (node-reachable-count (list p2) edges) + (node-reachable-count (list p0) back))))))) + (test-end "graph") |