aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/clojure/contrib/graph.clj11
-rw-r--r--src/clojure/contrib/test_contrib/test_graph.clj10
2 files changed, 16 insertions, 5 deletions
diff --git a/src/clojure/contrib/graph.clj b/src/clojure/contrib/graph.clj
index 47d8e67e..28dc11ca 100644
--- a/src/clojure/contrib/graph.clj
+++ b/src/clojure/contrib/graph.clj
@@ -136,14 +136,17 @@
nm (into {} (map (fn [ns] [ns (find-neighbors ns)]) sccs))]
(struct directed-graph (set sccs) nm)))
+(defn recursive-component?
+ "Is the component (recieved from scc) self recursive?"
+ [g ns]
+ (or (> (count ns) 1)
+ (some ns (get-neighbors g (first ns)))))
+
(defn self-recursive-sets
"Returns, as a sequence of sets, the components of a graph that are
self-recursive."
[g]
- (let [recursive? (fn [ns]
- (or (> (count ns) 1)
- (some ns (get-neighbors g (first ns)))))]
- (filter recursive? (scc g))))
+ (filter (partial recursive-component? g) (scc g)))
;; Dependency Lists
diff --git a/src/clojure/contrib/test_contrib/test_graph.clj b/src/clojure/contrib/test_contrib/test_graph.clj
index 85983d28..09b3cc93 100644
--- a/src/clojure/contrib/test_contrib/test_graph.clj
+++ b/src/clojure/contrib/test_contrib/test_graph.clj
@@ -111,9 +111,17 @@
(is (= ecg empty-graph))))
+(deftest test-recursive-component?
+ (let [sccs (scc test-graph-2)]
+ (is (= (set (filter (partial recursive-component? test-graph-2) sccs))
+ #{#{:i :j} #{:b :c :a :d :e} #{:f}}))))
+
+
(deftest test-self-recursive-sets
(is (= (set (self-recursive-sets test-graph-2))
- #{#{:i :j} #{:b :c :a :d :e} #{:f}}))
+ (set (filter
+ (partial recursive-component? test-graph-2)
+ (scc test-graph-2)))))
(is (empty? (self-recursive-sets empty-graph))))