diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/clojure/contrib/graph.clj | 11 | ||||
-rw-r--r-- | src/clojure/contrib/test_contrib/test_graph.clj | 10 |
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)))) |