summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/TaskmasterTests.py
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2002-02-18 22:34:59 (GMT)
committerSteven Knight <knight@baldmt.com>2002-02-18 22:34:59 (GMT)
commit2db9879e1b4671c412b50a8a3c67eda1c6c95d93 (patch)
tree7d249871746d7775d3da397778778f0ffbea3308 /src/engine/SCons/TaskmasterTests.py
parentc71fa63caaa49aeeb7753a28a630d0d8de7e5606 (diff)
downloadSCons-2db9879e1b4671c412b50a8a3c67eda1c6c95d93.zip
SCons-2db9879e1b4671c412b50a8a3c67eda1c6c95d93.tar.gz
SCons-2db9879e1b4671c412b50a8a3c67eda1c6c95d93.tar.bz2
Efficiency: On the Taskmaster's Walker's out-of-date checks, don't return any children if the node itself has already been visited.
Diffstat (limited to 'src/engine/SCons/TaskmasterTests.py')
-rw-r--r--src/engine/SCons/TaskmasterTests.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/engine/SCons/TaskmasterTests.py b/src/engine/SCons/TaskmasterTests.py
index 0d7a7ad..32a1110 100644
--- a/src/engine/SCons/TaskmasterTests.py
+++ b/src/engine/SCons/TaskmasterTests.py
@@ -32,6 +32,7 @@ import SCons.Errors
built = None
executed = None
+scan_called = 0
class Node:
def __init__(self, name, kids = [], scans = []):
@@ -58,6 +59,8 @@ class Node:
return self.kids
def scan(self):
+ global scan_called
+ scan_called = scan_called + 1
self.kids = self.kids + self.scans
for scan in self.scans:
scan.parents.append(self)
@@ -240,6 +243,36 @@ class TaskmasterTestCase(unittest.TestCase):
assert t.get_target() == n3
t.executed()
assert tm.next_task() == None
+
+ n1 = Node("n1")
+ n2 = Node("n2")
+ n3 = Node("n3", [n1, n2])
+ n4 = Node("n4", [n3])
+ n5 = Node("n5", [n3])
+ global scan_called
+ scan_called = 0
+ tm = SCons.Taskmaster.Taskmaster([n4])
+ t = tm.next_task()
+ assert t.get_target() == n1
+ t.executed()
+ t = tm.next_task()
+ assert t.get_target() == n2
+ t.executed()
+ t = tm.next_task()
+ assert t.get_target() == n3
+ t.executed()
+ t = tm.next_task()
+ assert t.get_target() == n4
+ t.executed()
+ assert tm.next_task() == None
+ assert scan_called == 4, scan_called
+
+ tm = SCons.Taskmaster.Taskmaster([n5])
+ t = tm.next_task()
+ assert t.get_target() == n5, t.get_target()
+ t.executed()
+ assert tm.next_task() == None
+ assert scan_called == 5, scan_called
def test_cycle_detection(self):
n1 = Node("n1")