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