[pypy-svn] r40559 - in pypy/branch/jit-virtual-world/pypy/translator/tool: . test
pedronis at codespeak.net
pedronis at codespeak.net
Thu Mar 15 23:04:21 CET 2007
Author: pedronis
Date: Thu Mar 15 23:04:19 2007
New Revision: 40559
Modified:
pypy/branch/jit-virtual-world/pypy/translator/tool/taskengine.py
pypy/branch/jit-virtual-world/pypy/translator/tool/test/test_taskengine.py
Log:
Make the SimpleTaskEngine a bit more expressive: now it can distinguish between
optional and suggested or purely optional task dependencies.
Add a test for this that shows that this should be good enough for modeling timeshifting tasks,
for the driver.
Modified: pypy/branch/jit-virtual-world/pypy/translator/tool/taskengine.py
==============================================================================
--- pypy/branch/jit-virtual-world/pypy/translator/tool/taskengine.py (original)
+++ pypy/branch/jit-virtual-world/pypy/translator/tool/taskengine.py Thu Mar 15 23:04:19 2007
@@ -29,7 +29,11 @@
def subgoals(task_name):
taskcallable, deps = self.tasks[task_name]
for dep in deps:
- if dep.startswith('?'):
+ if dep.startswith('??'): # optional
+ dep = dep[2:]
+ if dep not in goals:
+ continue
+ if dep.startswith('?'): # suggested
dep = dep[1:]
if dep in skip:
continue
Modified: pypy/branch/jit-virtual-world/pypy/translator/tool/test/test_taskengine.py
==============================================================================
--- pypy/branch/jit-virtual-world/pypy/translator/tool/test/test_taskengine.py (original)
+++ pypy/branch/jit-virtual-world/pypy/translator/tool/test/test_taskengine.py Thu Mar 15 23:04:19 2007
@@ -99,3 +99,50 @@
assert test(['B', 'A'], ['C']) == trace(['B', 'A'])
assert test(['B', 'A', 'C']) == trace(['B', 'C', 'A'])
assert test(['B', 'A', 'C'], ['C']) == trace(['B', 'C', 'A'])
+
+def test_driver():
+ class Drv(SimpleTaskEngine):
+
+ def task_A():
+ pass
+ task_A.task_deps = []
+
+ def task_R():
+ pass
+ task_R.task_deps = ['A']
+
+ def task_b():
+ pass
+ task_b.task_deps = ['R']
+
+ def task_H():
+ pass
+ task_H.task_deps = ['b']
+
+ def task_T():
+ pass
+ task_T.task_deps = ['H']
+
+ def task_B():
+ pass
+ task_B.task_deps = ['R', '??T']
+
+ def task_D():
+ pass
+ task_D.task_deps = ['R', '?B', '?A', '??T']
+
+ drv = Drv()
+ assert drv._plan(['R']) == ['A', 'R']
+ assert drv._plan(['B']) == ['A', 'R', 'B']
+ assert drv._plan(['D']) == ['A', 'R', 'B', 'D']
+ assert drv._plan(['D'], skip=['B']) == ['A', 'R', 'D']
+ assert drv._plan(['D', 'R']) == ['A', 'R', 'B', 'D']
+
+
+ assert drv._plan(['H', 'R']) == ['A', 'R', 'b', 'H']
+ assert drv._plan(['H']) == ['A', 'R', 'b', 'H']
+ assert drv._plan(['T', 'B']) == ['A', 'R', 'b', 'H', 'T', 'B']
+ assert drv._plan(['D', 'T']) == ['A', 'R', 'b', 'H', 'T', 'B', 'D']
+ assert drv._plan(['D', 'T', 'R']) == ['A', 'R', 'b', 'H', 'T', 'B', 'D']
+ assert drv._plan(['D', 'T']) == ['A', 'R', 'b', 'H', 'T', 'B', 'D']
+ assert drv._plan(['D', 'T'], skip=['B']) == ['A', 'R', 'b', 'H', 'T', 'D']
More information about the Pypy-commit
mailing list