[pypy-svn] r28991 - pypy/dist/pypy/module/_stackless/test
pedronis at codespeak.net
pedronis at codespeak.net
Tue Jun 20 13:47:48 CEST 2006
Author: pedronis
Date: Tue Jun 20 13:47:47 2006
New Revision: 28991
Modified:
pypy/dist/pypy/module/_stackless/test/test_pickle.py
Log:
some more tests. 2 pass, 1 fails and 1 segfauls, o joy.
Modified: pypy/dist/pypy/module/_stackless/test/test_pickle.py
==============================================================================
--- pypy/dist/pypy/module/_stackless/test/test_pickle.py (original)
+++ pypy/dist/pypy/module/_stackless/test/test_pickle.py Tue Jun 20 13:47:47 2006
@@ -42,3 +42,145 @@
''' in mod.__dict__
finally:
del sys.modules['mod']
+
+ def test_closure(self):
+ import new, sys
+
+ mod = new.module('mod')
+ sys.modules['mod'] = mod
+ try:
+ exec '''
+output = []
+import _stackless
+def example():
+ main_coro = _stackless.coroutine.getcurrent()
+ sub_coro = _stackless.coroutine()
+ y = 3
+ def f(coro, n, x):
+ if n == 0:
+ coro.switch()
+ return
+ f(coro, n-1, 2*x)
+ output.append(x+y)
+
+ sub_coro.bind(f, main_coro, 5, 1)
+ sub_coro.switch()
+
+ import pickle
+ pckl = pickle.dumps(sub_coro)
+ new_coro = pickle.loads(pckl)
+
+ new_coro.switch()
+
+example()
+assert output == [19, 11, 7, 5, 4]
+''' in mod.__dict__
+ finally:
+ del sys.modules['mod']
+
+ def test_exception(self):
+ skip("saving of exceptions is not working")
+ import new, sys
+
+ mod = new.module('mod')
+ sys.modules['mod'] = mod
+ try:
+ exec '''
+output = []
+import _stackless
+def f(coro):
+ try:
+ raise ValueError
+ except:
+ coro.switch()
+ import sys
+ t, v, tb = sys.exc_info()
+ output.append(t)
+
+def example():
+ main_coro = _stackless.coroutine.getcurrent()
+ sub_coro = _stackless.coroutine()
+
+ sub_coro.bind(f, main_coro)
+ sub_coro.switch()
+
+ import pickle
+ pckl = pickle.dumps(sub_coro)
+ new_coro = pickle.loads(pckl)
+
+ new_coro.switch()
+
+example()
+assert output == [ValueError]
+''' in mod.__dict__
+ finally:
+ del sys.modules['mod']
+
+ def test_loop(self):
+ skip("happily segfaulting")
+ import new, sys
+
+ mod = new.module('mod')
+ sys.modules['mod'] = mod
+ try:
+ exec '''
+output = []
+import _stackless
+def f(coro):
+ for x in (1,2,3):
+ coro.switch()
+ output.append(x)
+
+def example():
+ main_coro = _stackless.coroutine.getcurrent()
+ sub_coro = _stackless.coroutine()
+
+ sub_coro.bind(f, main_coro)
+ sub_coro.switch()
+
+ import pickle
+ pckl = pickle.dumps(sub_coro)
+ new_coro = pickle.loads(pckl)
+
+ new_coro.switch()
+ new_coro.switch()
+
+example()
+assert output == [1, 2, 3]
+''' in mod.__dict__
+ finally:
+ del sys.modules['mod']
+
+ def test_exec_and_locals(self):
+ import new, sys
+
+ mod = new.module('mod')
+ sys.modules['mod'] = mod
+ try:
+ exec '''
+output = []
+import _stackless
+
+def f(coro):
+ x = None
+ exec "x = 9"
+ coro.switch()
+ output.append(x)
+
+def example():
+ main_coro = _stackless.coroutine.getcurrent()
+ sub_coro = _stackless.coroutine()
+ sub_coro.bind(f, main_coro)
+ sub_coro.switch()
+
+ import pickle
+ pckl = pickle.dumps(sub_coro)
+ new_coro = pickle.loads(pckl)
+
+ new_coro.switch()
+
+example()
+assert output == [9]
+''' in mod.__dict__
+ finally:
+ del sys.modules['mod']
More information about the Pypy-commit
mailing list