--- /dev/null
+(in-package metabang.graph)
+
+(deftestsuite test-connected-component ()
+ ())
+
+;;; ---------------------------------------------------------------------------
+
+(defun make-connected-component-graph-1 ()
+ (let ((g (make-container 'graph-container)))
+ (loop for label in '(wk-6-0 wp-5-1 wp-1-2 wp-2-3 wb-1-1
+ wp-4-4 bp-5-6 bk-6-5 bb-5-7 bp-2-4
+ bp-2-6 bp-1-5) do
+ (add-vertex g label))
+ (loop for (source target) in '((wk-6-0 wp-5-1)
+ (wp-1-2 wp-2-3)
+ (wb-1-1 wp-4-4)
+ (bp-5-6 bk-6-5)
+ (bk-6-5 bb-5-7)
+ (bb-5-7 bp-2-4)
+ (bp-2-6 bp-1-5)
+ (bp-1-5 bp-2-4)) do
+ (add-edge-between-vertexes g source target :edge-type :directed
+ :value :defend))
+ (loop for (source target) in '((bk-6-5 wp-4-4)) do
+ (add-edge-between-vertexes g source target :edge-type :directed
+ :value :attack))
+ (loop for (source target) in '((wp-2-3 bp-2-4)) do
+ (add-edge-between-vertexes g source target :edge-type :undirected))
+ g))
+
+;;; ---------------------------------------------------------------------------
+
+(addtest (test-connected-component)
+ test-1
+ (let ((g (make-connected-component-graph-1)))
+ (ensure-same
+ (mapcar #'size (find-connected-components g)) '(2 10) :test 'set-equal)))
+
+;;; ---------------------------------------------------------------------------
+
+(addtest (test-connected-component)
+ test-connected-component-count-1
+ (let ((g (make-connected-component-graph-1)))
+ (ensure-same (connected-component-count g) 2 :test '=)))