Setting a test suite at last
[cl-graph.git] / unit-tests / test-graph-container.lisp
1 (in-package metabang.graph)
2
3 ;;; ---------------------------------------------------------------------------
4 ;;; utilities
5 ;;; ---------------------------------------------------------------------------
6
7 (defun make-simple-test-graph ()
8   (let ((g (make-container 'graph-container))) 
9     (loop for v in '(a b c d e) do
10           (add-vertex g v))
11     (loop for (v1 . v2) in '((a . b) (a . c) (b . d) (c . e)) do
12           (add-edge-between-vertexes g v1 v2))
13     g))
14
15 ;;; ---------------------------------------------------------------------------
16 ;;; tests
17 ;;; --------------------------------------------------------------------------- 
18
19 (deftestsuite test-graph-container () ())
20
21 ;;; ---------------------------------------------------------------------------
22
23 (addtest (test-graph-container)
24   test-simple-copying
25   (let ((g1 (make-simple-test-graph))
26         (g2 nil))
27     (setf g2 (copy-top-level g1))
28     (ensure-same (size g1) (size g2))
29     (iterate-vertexes
30      g1 (lambda (v)
31           (ensure (find-vertex g2 (value v)))))
32     (iterate-edges 
33      g1 (lambda (e)
34           (ensure (find-edge-between-vertexes 
35                    g2 (value (source-vertex e))
36                    (value (target-vertex e))))))))
37
38 ;;; ---------------------------------------------------------------------------
39
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))
45         (g2 nil))
46     (setf g2 (copy-top-level g1))
47     
48     (ensure (not 
49              (find-edge-between-vertexes g2 (find-vertex g1 'a) (find-vertex g1 'b))))))
50
51 ;;; ---------------------------------------------------------------------------
52
53 (addtest (test-graph-container)
54   test-empty!
55   (let ((g1 (make-simple-test-graph)))
56     (empty! g1)
57     (ensure-same (size g1) 0)))
58
59 ;;; ---------------------------------------------------------------------------
60 ;;; vertex test 
61 ;;; ---------------------------------------------------------------------------
62
63 ;;?? should be in test-graph and work for every graph container type
64
65 (addtest (test-graph-container)
66   no-vertex-test
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 '=)))
71
72 (addtest (test-graph-container)
73   vertex-test
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 '=)))