summaryrefslogtreecommitdiff
path: root/test/base/test_dependency.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-07-11 13:41:38 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2010-07-11 13:41:38 -0400
commitf2b43da1a8e3fa8f2afc49e04ec16479a6e7da64 (patch)
tree90f12adf613f4a97c8ad5861560f86abd8263ccb /test/base/test_dependency.py
parenta6b62cc3fed5f06d3428b1f6ee13756175ded61b (diff)
downloadsqlalchemy-f2b43da1a8e3fa8f2afc49e04ec16479a6e7da64.tar.gz
tidy test/base, test/ex, test/ext
Diffstat (limited to 'test/base/test_dependency.py')
-rw-r--r--test/base/test_dependency.py197
1 files changed, 93 insertions, 104 deletions
diff --git a/test/base/test_dependency.py b/test/base/test_dependency.py
index c24c3e5e8..aa4410576 100644
--- a/test/base/test_dependency.py
+++ b/test/base/test_dependency.py
@@ -3,20 +3,18 @@ from sqlalchemy.test import TestBase
from sqlalchemy.test.testing import assert_raises, eq_
from sqlalchemy import exc, util
+
class DependencySortTest(TestBase):
+
def assert_sort(self, tuples, allitems=None):
-
if allitems is None:
allitems = self._nodes_from_tuples(tuples)
else:
allitems = self._nodes_from_tuples(tuples).union(allitems)
-
result = list(topological.sort(tuples, allitems))
-
deps = util.defaultdict(set)
for parent, child in tuples:
deps[parent].add(child)
-
assert len(result)
for i, node in enumerate(result):
for n in result[i:]:
@@ -27,7 +25,7 @@ class DependencySortTest(TestBase):
for tup in tups:
s.update(tup)
return s
-
+
def test_sort_one(self):
rootnode = 'root'
node2 = 'node2'
@@ -46,8 +44,8 @@ class DependencySortTest(TestBase):
(rootnode, node3),
(rootnode, node4),
(node4, subnode3),
- (node4, subnode4)
- ]
+ (node4, subnode4),
+ ]
self.assert_sort(tuples)
def test_sort_two(self):
@@ -58,13 +56,8 @@ class DependencySortTest(TestBase):
node5 = 'node5'
node6 = 'node6'
node7 = 'node7'
- tuples = [
- (node1, node2),
- (node3, node4),
- (node4, node5),
- (node5, node6),
- (node6, node2)
- ]
+ tuples = [(node1, node2), (node3, node4), (node4, node5),
+ (node5, node6), (node6, node2)]
self.assert_sort(tuples, [node7])
def test_sort_three(self):
@@ -72,12 +65,8 @@ class DependencySortTest(TestBase):
node2 = 'itemkeyowrds'
node3 = 'items'
node4 = 'hoho'
- tuples = [
- (node1, node2),
- (node4, node1),
- (node1, node3),
- (node3, node2)
- ]
+ tuples = [(node1, node2), (node4, node1), (node1, node3),
+ (node3, node2)]
self.assert_sort(tuples)
def test_raise_on_cycle_one(self):
@@ -92,70 +81,71 @@ class DependencySortTest(TestBase):
(node1, node2),
(node2, node3),
(node3, node1),
- (node4, node1)
- ]
+ (node4, node1),
+ ]
allitems = self._nodes_from_tuples(tuples)
- assert_raises(exc.CircularDependencyError, list, topological.sort(tuples, allitems))
+ assert_raises(exc.CircularDependencyError, list,
+ topological.sort(tuples, allitems))
# TODO: test find_cycles
def test_raise_on_cycle_two(self):
- # this condition was arising from ticket:362
- # and was not treated properly by topological sort
+
+ # this condition was arising from ticket:362 and was not treated
+ # properly by topological sort
+
node1 = 'node1'
node2 = 'node2'
node3 = 'node3'
node4 = 'node4'
- tuples = [
- (node1, node2),
- (node3, node1),
- (node2, node4),
- (node3, node2),
- (node2, node3)
- ]
+ tuples = [(node1, node2), (node3, node1), (node2, node4),
+ (node3, node2), (node2, node3)]
allitems = self._nodes_from_tuples(tuples)
- assert_raises(exc.CircularDependencyError, list, topological.sort(tuples, allitems))
+ assert_raises(exc.CircularDependencyError, list,
+ topological.sort(tuples, allitems))
# TODO: test find_cycles
def test_raise_on_cycle_three(self):
- question, issue, providerservice, answer, provider = "Question", "Issue", "ProviderService", "Answer", "Provider"
-
- tuples = [(question, issue), (providerservice, issue), (provider, question),
- (question, provider), (providerservice, question),
- (provider, providerservice), (question, answer), (issue, question)]
-
+ question, issue, providerservice, answer, provider = \
+ 'Question', 'Issue', 'ProviderService', 'Answer', 'Provider'
+ tuples = [
+ (question, issue),
+ (providerservice, issue),
+ (provider, question),
+ (question, provider),
+ (providerservice, question),
+ (provider, providerservice),
+ (question, answer),
+ (issue, question),
+ ]
allitems = self._nodes_from_tuples(tuples)
- assert_raises(exc.CircularDependencyError, list, topological.sort(tuples, allitems))
-
+ assert_raises(exc.CircularDependencyError, list,
+ topological.sort(tuples, allitems))
+
# TODO: test find_cycles
-
+
def test_large_sort(self):
tuples = [(i, i + 1) for i in range(0, 1500, 2)]
self.assert_sort(tuples)
def test_ticket_1380(self):
+
# ticket:1380 regression: would raise a KeyError
+
tuples = [(id(i), i) for i in range(3)]
self.assert_sort(tuples)
-
+
def test_find_cycle_one(self):
node1 = 'node1'
node2 = 'node2'
node3 = 'node3'
node4 = 'node4'
- tuples = [
- (node1, node2),
- (node3, node1),
- (node2, node4),
- (node3, node2),
- (node2, node3)
- ]
-
- eq_(
- topological.find_cycles(tuples, self._nodes_from_tuples(tuples)),
- set([node1, node2, node3])
- )
+ tuples = [(node1, node2), (node3, node1), (node2, node4),
+ (node3, node2), (node2, node3)]
+ eq_(topological.find_cycles(tuples,
+ self._nodes_from_tuples(tuples)), set([node1, node2,
+ node3]))
def test_find_multiple_cycles_one(self):
node1 = 'node1'
@@ -167,33 +157,41 @@ class DependencySortTest(TestBase):
node7 = 'node7'
node8 = 'node8'
node9 = 'node9'
- tuples = [
- # cycle 1
+ tuples = [ # cycle 1 cycle 2 cycle 3 cycle 4, but only if cycle
+ # 1 nodes are present
(node1, node2),
(node2, node4),
(node4, node1),
-
- # cycle 2
(node9, node9),
-
- # cycle 3
(node7, node5),
(node5, node7),
-
- # cycle 4, but only if cycle 1 nodes are present
(node1, node6),
(node6, node8),
(node8, node4),
-
(node3, node1),
(node3, node2),
- ]
-
- allnodes = set([node1, node2, node3, node4, node5, node6, node7, node8, node9])
- eq_(
- topological.find_cycles(tuples, allnodes),
- set(['node8', 'node1', 'node2', 'node5', 'node4', 'node7', 'node6', 'node9'])
- )
+ ]
+ allnodes = set([
+ node1,
+ node2,
+ node3,
+ node4,
+ node5,
+ node6,
+ node7,
+ node8,
+ node9,
+ ])
+ eq_(topological.find_cycles(tuples, allnodes), set([
+ 'node8',
+ 'node1',
+ 'node2',
+ 'node5',
+ 'node4',
+ 'node7',
+ 'node6',
+ 'node9',
+ ]))
def test_find_multiple_cycles_two(self):
node1 = 'node1'
@@ -202,24 +200,25 @@ class DependencySortTest(TestBase):
node4 = 'node4'
node5 = 'node5'
node6 = 'node6'
- tuples = [
- # cycle 1
+ tuples = [ # cycle 1 cycle 2
(node1, node2),
(node2, node4),
(node4, node1),
-
- # cycle 2
(node1, node6),
(node6, node2),
(node2, node4),
(node4, node1),
- ]
-
- allnodes = set([node1, node2, node3, node4, node5, node6])
- eq_(
- topological.find_cycles(tuples, allnodes),
- set(['node1', 'node2', 'node4'])
- )
+ ]
+ allnodes = set([
+ node1,
+ node2,
+ node3,
+ node4,
+ node5,
+ node6,
+ ])
+ eq_(topological.find_cycles(tuples, allnodes), set(['node1',
+ 'node2', 'node4']))
def test_find_multiple_cycles_three(self):
node1 = 'node1'
@@ -228,33 +227,23 @@ class DependencySortTest(TestBase):
node4 = 'node4'
node5 = 'node5'
node6 = 'node6'
- tuples = [
-
- # cycle 1
+ tuples = [ # cycle 1 cycle 2 cycle3 cycle4
(node1, node2),
(node2, node1),
-
- # cycle 2
(node2, node3),
(node3, node2),
-
- # cycle3
(node2, node4),
(node4, node2),
-
- # cycle4
(node2, node5),
(node5, node6),
- (node6, node2)
- ]
-
- allnodes = set([node1, node2, node3, node4, node5, node6])
- eq_(
- topological.find_cycles(tuples, allnodes),
- allnodes
- )
-
-
-
-
-
+ (node6, node2),
+ ]
+ allnodes = set([
+ node1,
+ node2,
+ node3,
+ node4,
+ node5,
+ node6,
+ ])
+ eq_(topological.find_cycles(tuples, allnodes), allnodes)