1 (in-package cl-graph-test)
3 ;;; ---------------------------------------------------------------------------
5 ;;; ---------------------------------------------------------------------------
7 (defun make-simple-test-graph ()
8 (let ((g (make-container 'graph-container)))
9 (loop for v in '(a b c d e) do
11 (loop for (v1 . v2) in '((a . b) (a . c) (b . d) (c . e)) do
12 (add-edge-between-vertexes g v1 v2))
15 ;;; ---------------------------------------------------------------------------
17 ;;; ---------------------------------------------------------------------------
19 (deftestsuite test-graph-container () ())
21 ;;; ---------------------------------------------------------------------------
23 (addtest (test-graph-container)
25 (let ((g1 (make-simple-test-graph))
27 (setf g2 (copy-top-level g1))
28 (ensure-same (size g1) (size g2))
31 (ensure (find-vertex g2 (value v)))))
34 (ensure (find-edge-between-vertexes
35 g2 (value (source-vertex e))
36 (value (target-vertex e))))))))
38 ;;; ---------------------------------------------------------------------------
40 ;; fails because find-edge-between-vertexes for graph containers doesn't
41 ;; care about the graph...
42 (addtest (test-graph-container)
43 test-find-edge-between-vertexes
44 (let ((g1 (make-simple-test-graph))
46 (setf g2 (copy-top-level g1))
49 (find-edge-between-vertexes g2 (find-vertex g1 'a) (find-vertex g1 'b))))))
51 ;;; ---------------------------------------------------------------------------
53 (addtest (test-graph-container)
55 (let ((g1 (make-simple-test-graph)))
57 (ensure-same (size g1) 0)))
59 ;;; ---------------------------------------------------------------------------
61 ;;; ---------------------------------------------------------------------------
63 ;;?? should be in test-graph and work for every graph container type
65 (addtest (test-graph-container)
67 (let ((g (make-container 'graph-container)))
68 (loop for (src dst) in '((a b) (a c) (c d) (a d) (d e) (e f) (b f)) do
69 (add-edge-between-vertexes g (list src) (list dst)))
70 (ensure-same (size g) 14 :test '=)))
72 (addtest (test-graph-container)
74 (let ((g (make-container 'graph-container :vertex-test #'equal)))
75 (loop for (src dst) in '((a b) (a c) (c d) (a d) (d e) (e f) (b f)) do
76 (add-edge-between-vertexes g (list src) (list dst)))
77 (ensure-same (size g) 6 :test '=)))