Contact: fumanchu@aminus.org

Log in as guest/dejavu to create tickets

I think I've seen this ORM somewhere before...

root/branches/crazycache/dejavu/test/test_containers.py

Revision 96 (checked in by fumanchu, 6 years ago)

Lots of changes to the test suite. Partially fixes #23.

  • Property svn:eol-style set to native
Line 
1 import operator
2 import unittest
3 from dejavu import containers
4
5
6 class WarehouseTests(unittest.TestCase):
7    
8     def test_builtin_types(self):
9         # ints
10         avail, rem = containers.warehouse([1,2,3])
11         self.assertEqual([avail.next() for x in xrange(5)], [1,2,3,0,0])
12        
13         avail, rem = containers.warehouse([1,2,3])
14         self.assertEqual([avail.next() for x in xrange(2)], [1,2])
15         self.assertEqual([x for x in rem], [3])
16        
17         # strings
18         avail, rem = containers.warehouse(['fish', 'bananas', 'old pyjamas'])
19         self.assertEqual([avail.next() for x in xrange(5)], ['fish', 'bananas', 'old pyjamas', '', ''])
20        
21         avail, rem = containers.warehouse(['fish', 'bananas', 'old pyjamas'])
22         self.assertEqual([avail.next() for x in xrange(2)], ['fish', 'bananas'])
23         self.assertEqual([x for x in rem], ['old pyjamas'])
24        
25         # Empty seq
26         avail, rem = containers.warehouse([])
27         self.assertRaises(ValueError, avail.next)
28    
29     def test_custom_classes(self):
30         class Thing:
31             def __init__(self, value=None):
32                 self.value = value
33        
34         things = Thing(1), Thing(2), Thing(3), Thing(4)
35         avail, rem = containers.warehouse(things)
36         self.assertEqual([avail.next().value for x in xrange(5)],
37                          [1, 2, 3, 4, None])
38        
39         avail, rem = containers.warehouse(things)
40         self.assertEqual([avail.next().value for x in xrange(2)], [1, 2])
41         self.assertEqual([x for x in rem], [things[2], things[3]])
42        
43         # Empty seq
44         avail, rem = containers.warehouse([], Thing)
45         self.assertEqual([avail.next().value for x in xrange(2)], [None, None])
46         self.assertEqual([x for x in rem], [])
47
48
49 class GraphTests(unittest.TestCase):
50    
51     def test_creation(self):
52         g = containers.Graph()
53         self.assertEqual(g, {})
54        
55         g = containers.Graph({'a': []})
56         self.assertEqual(g, {'a': []})
57        
58         g = containers.Graph({'a': []}, True)
59         self.assertEqual(g, {'a': []})
60    
61     def test_connect(self):
62         g = containers.Graph()
63         g.connect('A', 'B')
64         self.assertEqual(g, {'A': ['B'],
65                              'B': ['A'],
66                              })
67         g.connect('C', ('A', 'B'))
68         self.assertEqual(g, {'A': ['B', 'C'],
69                              'B': ['A', 'C'],
70                              'C': ['A', 'B'],
71                              })
72    
73     def test_chain(self):
74         # Form the undirected graph:
75         #   A--B--C--D
76         #   |  |\   /
77         #   |  | \ /
78         #   E--F--G
79         g = containers.Graph()
80         g.chain('A', 'B', 'C', 'D', 'G', 'F', 'E', 'A')
81         g.chain('B', 'F', 'G', 'B')
82         self.assertEqual(g, {'A': ['B', 'E'],
83                              'B': ['A', 'C', 'F', 'G'],
84                              'C': ['B', 'D'],
85                              'D': ['C', 'G'],
86                              'E': ['F', 'A'],
87                              'F': ['G', 'E', 'B'],
88                              'G': ['D', 'F', 'B'],
89                              })
90        
91         # Form the directed graph:
92         #   A-->B->C->D
93         #   |   |     |
94         #   +>E-+->F--+->G
95         g = containers.Graph(directed=True)
96         g.chain('A', 'B', 'C', 'D', 'G')
97         g.chain('A', 'E', 'F', 'G')
98         g.chain('B', 'F')
99         self.assertEqual(g, {'A': ['B', 'E'],
100                              'B': ['C', 'F'],
101                              'C': ['D'],
102                              'D': ['G'],
103                              'E': ['F'],
104                              'F': ['G'],
105                              })
106    
107     def test_shortest_path(self):
108         # Form the graph:
109         #   A--B--C--D
110         #   |  |\   /
111         #   |  | \ /
112         #   E--F--G
113         g = containers.Graph()
114         g.connect('A', ('B', 'E'))
115         g.connect('B', ('C', 'F', 'G'))
116         g.connect('D', ('C', 'G'))
117         g.connect('E', 'F')
118         g.connect('F', 'G')
119        
120         self.assertEqual(g.shortest_path('A', 'D'), ['A', 'B', 'C', 'D'])
121         self.assertEqual(g.shortest_path('B', 'A'), ['B', 'A'])
122         self.assertEqual(g.shortest_path('E', 'C'), ['E', 'A', 'B', 'C'])
123         self.assertEqual(g.shortest_path('A', 'G'), ['A', 'B', 'G'])
124        
125         # Do the same test again to see if caching works.
126         self.assertEqual(g.shortest_path('A', 'D'), ['A', 'B', 'C', 'D'])
127         self.assertEqual(g.shortest_path('B', 'A'), ['B', 'A'])
128         self.assertEqual(g.shortest_path('E', 'C'), ['E', 'A', 'B', 'C'])
129         self.assertEqual(g.shortest_path('A', 'G'), ['A', 'B', 'G'])
130        
131         # Test invalid paths.
132         self.assertRaises(KeyError, g.shortest_path, 'R', 'D')
133         self.assertEqual(g.shortest_path('D', 'R'), None)
134    
135     def test_shortest_path_directed(self):
136         # Form the graph:
137         #   A-->B->C->D
138         #   |   |     |
139         #   +>E-+->F--+->G
140         g = containers.Graph(directed=True)
141         g.connect('A', ('B', 'E'))
142         g.connect('B', ('C', 'F'))
143         g.connect('C', 'D')
144         g.connect('D', 'G')
145         g.connect('E', 'F')
146         g.connect('F', 'G')
147        
148         self.assertEqual(g, {'A': ['B', 'E'],
149                              'B': ['C', 'F'],
150                              'C': ['D'],
151                              'D': ['G'],
152                              'E': ['F'],
153                              'F': ['G'],
154                              })
155        
156         self.assertEqual(g.shortest_path('A', 'D'), ['A', 'B', 'C', 'D'])
157         self.assertEqual(g.shortest_path('B', 'A'), None)
158         self.assertEqual(g.shortest_path('E', 'C'), None)
159         self.assertEqual(g.shortest_path('A', 'G'), ['A', 'B', 'F', 'G'])
160
161
162 if __name__ == "__main__":
163     unittest.main(__name__)
164
Note: See TracBrowser for help on using the browser.