Author: Tim Felgentreff <[email protected]>
Branch: bitblt
Changeset: r205:058fd41f1539
Date: 2013-03-18 13:39 +0100
http://bitbucket.org/pypy/lang-smalltalk/changeset/058fd41f1539/

Log:    add tests for BE_DISPLAY and the DisplayBitmap object

diff --git a/spyvm/model.py b/spyvm/model.py
--- a/spyvm/model.py
+++ b/spyvm/model.py
@@ -560,10 +560,10 @@
         word = r_uint(0)
         pos = n * pixel_per_word * 4
         for i in xrange(32):
+            word <<= 1
             red = self.pixelbuffer[pos]
             if red == '\0': # Black
                 word |= r_uint(1)
-            word <<= 1
             pos += 4
         return word
 
diff --git a/spyvm/test/test_model.py b/spyvm/test/test_model.py
--- a/spyvm/test/test_model.py
+++ b/spyvm/test/test_model.py
@@ -266,3 +266,26 @@
     assert target.gethash() == model.W_Float(1.1).gethash()
     target.store(space, 0, space.wrap_int(42))
     assert target.gethash() != model.W_Float(1.1).gethash()
+
+def test_display_bitmap():
+    target = model.W_DisplayBitmap(space.w_Array, 100, 1, None)
+    target.setword(0, 0xFF00)
+    assert bin(target.getword(0)) == bin(0xFF00)
+    target.setword(0, 0x00FF00FF)
+    assert bin(target.getword(0)) == bin(0x00FF00FF)
+    target.setword(0, 0xFF00FF00)
+    assert bin(target.getword(0)) == bin(0xFF00FF00)
+    for i in xrange(32):
+        if (i + 1) % 4 == 0:
+            assert target.pixelbuffer[i] == "\xff"
+        else:
+            assert target.pixelbuffer[i] == "\x00"
+    for i in xrange(32, 64):
+        assert target.pixelbuffer[i] == "\xff"    
+    for i in xrange(64, 96):
+        if (i + 1) % 4 == 0:
+            assert target.pixelbuffer[i] == "\xff"
+        else:
+            assert target.pixelbuffer[i] == "\x00"
+    for i in xrange(96, 128):
+        assert target.pixelbuffer[i] == "\xff"    
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
@@ -3,7 +3,7 @@
 import math
 from spyvm.primitives import prim_table, PrimitiveFailedError
 from spyvm import model, shadow, interpreter
-from spyvm import constants, primitives, objspace, wrapper
+from spyvm import constants, primitives, objspace, wrapper, display
 
 from rpython.rlib.rfloat import INFINITY, NAN, isinf, isnan
 
@@ -610,6 +610,39 @@
     assert w_2.getclass(space) is space.w_Array
     assert w_1 is not w_2
 
+def test_primitive_be_display():
+    assert space.objtable["w_display"] is None
+    mock_display = model.W_PointersObject(space.w_Point, 4)
+    w_wordbmp = model.W_WordsObject(space.w_Array, 100)
+    mock_display.store(space, 0, w_wordbmp) # bitmap
+    mock_display.store(space, 1, space.wrap_int(32)) # width
+    mock_display.store(space, 2, space.wrap_int(10)) # height
+    mock_display.store(space, 3, space.wrap_int(1))  # depth
+    prim(primitives.BE_DISPLAY, [mock_display])
+    assert space.objtable["w_display"] is mock_display
+    w_bitmap = mock_display.fetch(space, 0)
+    assert w_bitmap is not w_wordbmp
+    assert isinstance(w_bitmap, model.W_DisplayBitmap)
+    sdldisplay = w_bitmap.display
+    assert isinstance(sdldisplay, display.SDLDisplay)
+
+    mock_display2 = model.W_PointersObject(space.w_Point, 4)
+    mock_display2.store(space, 0, model.W_WordsObject(space.w_Array, 100)) # 
bitmap
+    mock_display2.store(space, 1, space.wrap_int(32)) # width
+    mock_display2.store(space, 2, space.wrap_int(10)) # height
+    mock_display2.store(space, 3, space.wrap_int(1))  # depth
+    prim(primitives.BE_DISPLAY, [mock_display2])
+    assert space.objtable["w_display"] is mock_display2
+    w_bitmap2 = mock_display.fetch(space, 0)
+    assert isinstance(w_bitmap2, model.W_DisplayBitmap)
+    assert w_bitmap.display is w_bitmap2.display
+    assert sdldisplay.width == 32
+    assert sdldisplay.height == 10
+
+    prim(primitives.BE_DISPLAY, [mock_display])
+    assert space.objtable["w_display"] is mock_display
+    assert mock_display.fetch(space, 0) is w_bitmap
+
 # Note:
 #   primitives.NEXT is unimplemented as it is a performance optimization
 #   primitives.NEXT_PUT is unimplemented as it is a performance optimization
@@ -619,4 +652,3 @@
 #   primitives.VALUE_WITH_ARGS is tested in test_interpreter
 #   primitives.OBJECT_AT is tested in test_interpreter
 #   primitives.OBJECT_AT_PUT is tested in test_interpreter
-
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to