[pypy-svn] r20939 - pypy/dist/pypy/translator/c/test

rxe at codespeak.net rxe at codespeak.net
Fri Dec 9 15:35:05 CET 2005


Author: rxe
Date: Fri Dec  9 15:35:00 2005
New Revision: 20939

Modified:
   pypy/dist/pypy/translator/c/test/test_tasklets.py
Log:
Hacking in progress...



Modified: pypy/dist/pypy/translator/c/test/test_tasklets.py
==============================================================================
--- pypy/dist/pypy/translator/c/test/test_tasklets.py	(original)
+++ pypy/dist/pypy/translator/c/test/test_tasklets.py	Fri Dec  9 15:35:00 2005
@@ -1,7 +1,8 @@
 import os
+
 from pypy.rpython.memory.lladdress import NULL
 from pypy.rpython.rstack import yield_current_frame_to_caller
-import os
+
 # ____________________________________________________________
 # For testing
 
@@ -73,6 +74,7 @@
         Resumable.__init__(self, fn)
         self.name = name
         self.blocked = False
+        self.data = -1
         
         # propogates round suspend-resume to tell scheduler in run()
         # XXX too late to think this thru
@@ -104,34 +106,32 @@
             t = self.queue.pop(0)
             t.data = value
             t.blocked = 0
-
-            # XXX Wrong - should run immediately
-            scheduler.add_tasklet(t)
+            scheduler.run_immediately(tasklet)
             scheduler.schedule()
             
         else:
             t = getcurrent()
+            assert isinstance(t, Tasklet)
             # let it wait for a receiver to come along
-            self.queue.append((t, value))
+            self.queue.append(t)
             t.blocked = 1
             scheduler.schedule_remove()
-
     
     def receive(self):
         self.balance -= 1
         # good to go
-        if self.balance > 0:
-            t, value = self.queue.pop(0)
+        if self.balance >= 0:
+            t = self.queue.pop(0)
             t.blocked = 0
             scheduler.add_tasklet(t)
-            return value
-
-        # block until ready
-        t = getcurrent()
-        self.queue.append(t)
-        t.blocked = -1
-        scheduler.schedule_remove()
 
+        else:
+            # block until ready
+            t = getcurrent()
+            self.queue.append(t)
+            t.blocked = -1
+            scheduler.schedule_remove()
+    
 class Scheduler(object):
     def __init__(self):
         self.runnables = []
@@ -295,4 +295,25 @@
     res = wrap_stackless_function(f)
     assert res == '1'
 
+def test_channels():
+    ch = Channel()
         
+    def f1(name):
+        for ii in range(5):
+            ch.send(ii)
+        debug("done sending")
+            
+    def f2(name):
+        while True:
+            ch.receive()
+            debug("received")
+
+    def f():
+        start_tasklet(Tasklet("f2", f2))
+        start_tasklet(Tasklet("f1", f1))
+        run()
+
+        return 0
+    
+    res = wrap_stackless_function(f)
+    assert res == '1'



More information about the Pypy-commit mailing list