Author: Lars Wassermann <[email protected]>
Branch: 
Changeset: r82:e3c5446909d2
Date: 2013-02-22 10:28 +0100
http://bitbucket.org/pypy/lang-smalltalk/changeset/e3c5446909d2/

Log:    added more tests for block closures

diff --git a/spyvm/test/test_primitives.py b/spyvm/test/test_primitives.py
--- a/spyvm/test/test_primitives.py
+++ b/spyvm/test/test_primitives.py
@@ -455,19 +455,45 @@
     assert w_w_block.at0(1) == wrap(2)
     assert w_w_block.numArgs() is 2
 
-def test_primitive_closure_value():
+def build_up_closure_environment(args, copiedValues=[]):
     from test_interpreter import new_interpreter
     interp = new_interpreter("<never called, but used for method generation>",
         space=space)
     s_initial_context = interp.s_active_context()
     
-    closure = space.newClosure(interp.w_active_context(), 4, 0, [])
-    s_initial_context.push(closure)
+    size_arguments = len(args)
+    closure = space.newClosure(interp.w_active_context(), 4, #pc 
+                                size_arguments, copiedValues)
+    s_initial_context.push_all([closure] + args)
+    prim_table[201 + size_arguments](interp, size_arguments)
+    return interp, s_initial_context, closure, interp.s_active_context()
 
-    prim_table[201](interp, 0)
-    assert interp.s_active_context().w_closure_or_nil is closure
-    assert interp.s_active_context().s_sender() is s_initial_context
-    assert interp.s_active_context().w_receiver() is space.w_nil
+def test_primitive_closure_value():
+    interp, s_initial_context, closure, s_new_context = 
build_up_closure_environment([])
+
+    assert s_new_context.w_closure_or_nil is closure
+    assert s_new_context.s_sender() is s_initial_context
+    assert s_new_context.w_receiver() is space.w_nil
+
+def test_primitive_closure_value_value():
+    interp, s_initial_context, closure, s_new_context = 
build_up_closure_environment(["first arg", "second arg"])
+
+    assert s_new_context.w_closure_or_nil is closure
+    assert s_new_context.s_sender() is s_initial_context
+    assert s_new_context.w_receiver() is space.w_nil
+    assert s_new_context.gettemp(0) == "first arg"
+    assert s_new_context.gettemp(1) == "second arg"
+
+def test_primitive_closure_value_value_with_temps():
+    interp, s_initial_context, closure, s_new_context = 
build_up_closure_environment(["first arg", "second arg"],
+        copiedValues=['some value'])
+
+    assert s_new_context.w_closure_or_nil is closure
+    assert s_new_context.s_sender() is s_initial_context
+    assert s_new_context.w_receiver() is space.w_nil
+    assert s_new_context.gettemp(0) == "first arg"
+    assert s_new_context.gettemp(1) == "second arg"
+    assert s_new_context.gettemp(2) == "some value"
 
 # Note:
 #   primitives.NEXT is unimplemented as it is a performance optimization
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to