[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