1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
from rpython.jit.backend.ppc.field import Field
from py.test import raises
import random
maxppcint = 0x7fffffff
class TestFields(object):
def test_decode(self):
# this test is crappy
field = Field("test", 0, 31)
for i in range(100):
j = random.randrange(maxppcint)
assert field.decode(j) == j
field = Field("test", 0, 31-4)
for i in range(100):
j = random.randrange(maxppcint)
assert field.decode(j) == j>>4
assert field.decode(j) == j>>4
field = Field("test", 3, 31-4)
for i in range(100):
j = random.randrange(maxppcint>>3)
assert field.decode(j) == j>>4
def test_decode_unsigned(self):
field = Field("test", 16, 31)
for i in range(1000):
hi = long(random.randrange(0x10000)) << 16
lo = long(random.randrange(0x10000))
assert field.decode(hi|lo) == lo
def test_decode_signed(self):
field = Field("test", 16, 31, 'signed')
for i in range(1000):
hi = long(random.randrange(0x10000)) << 16
lo = long(random.randrange(0x10000))
word = hi|lo
if lo & 0x8000:
lo |= ~0xFFFF
assert field.decode(word) == lo
def test_error_checking_unsigned(self):
for b in range(0, 17):
field = Field("test", b, 15+b)
assert field.decode(field.encode(0)) == 0
assert field.decode(field.encode(32768)) == 32768
assert field.decode(field.encode(65535)) == 65535
raises(ValueError, field.encode, -32768)
raises(ValueError, field.encode, -1)
raises(ValueError, field.encode, 65536)
def test_error_checking_signed(self):
for b in range(0, 17):
field = Field("test", b, 15+b, 'signed')
assert field.decode(field.encode(0)) == 0
assert field.decode(field.encode(-32768)) == -32768
assert field.decode(field.encode(32767)) == 32767
raises(ValueError, field.encode, 32768)
raises(ValueError, field.encode, -32769)
|