[pypy-commit] pypy ffi-backend: Reimport test_c.
arigo
noreply at buildbot.pypy.org
Tue Jun 26 11:27:18 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch: ffi-backend
Changeset: r55830:75f47e25f74a
Date: 2012-06-26 11:26 +0200
http://bitbucket.org/pypy/pypy/changeset/75f47e25f74a/
Log: Reimport test_c.
diff --git a/pypy/module/_ffi_backend/test/_backend_test_c.py b/pypy/module/_ffi_backend/test/_backend_test_c.py
--- a/pypy/module/_ffi_backend/test/_backend_test_c.py
+++ b/pypy/module/_ffi_backend/test/_backend_test_c.py
@@ -38,11 +38,11 @@
def test_cast_to_signed_char():
p = new_primitive_type("signed char")
x = cast(p, -65 + 17*256)
- assert repr(x) == "<cdata 'signed char'>"
+ assert repr(x) == "<cdata 'signed char' -65>"
assert repr(type(x)) == "<type '_ffi_backend.CData'>"
assert int(x) == -65
x = cast(p, -66 + (1<<199)*256)
- assert repr(x) == "<cdata 'signed char'>"
+ assert repr(x) == "<cdata 'signed char' -66>"
assert int(x) == -66
assert (x == cast(p, -66)) is False
assert (x != cast(p, -66)) is True
@@ -65,7 +65,7 @@
assert int(cast(p, max)) == max
assert int(cast(p, min - 1)) == max
assert int(cast(p, max + 1)) == min
- assert int(cast(p, None)) == 0
+ py.test.raises(TypeError, cast, p, None)
assert long(cast(p, min - 1)) == max
for name in ['char', 'short', 'int', 'long', 'long long']:
p = new_primitive_type('unsigned ' + name)
@@ -108,7 +108,7 @@
assert repr(float(cast(p, -0.0))) == '-0.0'
assert float(cast(p, '\x09')) == 9.0
assert float(cast(p, True)) == 1.0
- assert float(cast(p, None)) == 0.0
+ py.test.raises(TypeError, cast, p, None)
def test_character_type():
p = new_primitive_type("char")
@@ -119,6 +119,9 @@
assert type(int(cast(p, 'A'))) is int
assert type(long(cast(p, 'A'))) is long
assert str(cast(p, 'A')) == 'A'
+ assert repr(cast(p, 'A')) == "<cdata 'char' 'A'>"
+ assert repr(cast(p, 255)) == r"<cdata 'char' '\xff'>"
+ assert repr(cast(p, 0)) == r"<cdata 'char' '\x00'>"
def test_pointer_type():
p = new_primitive_type("int")
@@ -132,22 +135,23 @@
def test_pointer_to_int():
BInt = new_primitive_type("int")
+ py.test.raises(TypeError, newp, BInt)
py.test.raises(TypeError, newp, BInt, None)
BPtr = new_pointer_type(BInt)
+ p = newp(BPtr)
+ assert repr(p) == "<cdata 'int *' owning %d bytes>" % size_of_int()
p = newp(BPtr, None)
assert repr(p) == "<cdata 'int *' owning %d bytes>" % size_of_int()
p = newp(BPtr, 5000)
assert repr(p) == "<cdata 'int *' owning %d bytes>" % size_of_int()
q = cast(BPtr, p)
- assert repr(q) == "<cdata 'int *'>"
+ assert repr(q).startswith("<cdata 'int *' 0x")
assert p == q
assert hash(p) == hash(q)
def test_pointer_bool():
BInt = new_primitive_type("int")
BPtr = new_pointer_type(BInt)
- p = cast(BPtr, None)
- assert bool(p) is False
p = cast(BPtr, 0)
assert bool(p) is False
p = cast(BPtr, 42)
@@ -223,14 +227,22 @@
py.test.raises(TypeError, cast, BChar, 'foo')
def test_reading_pointer_to_pointer():
+ BVoidP = new_pointer_type(new_void_type())
+ BCharP = new_pointer_type(new_primitive_type("char"))
BInt = new_primitive_type("int")
BIntPtr = new_pointer_type(BInt)
BIntPtrPtr = new_pointer_type(BIntPtr)
q = newp(BIntPtr, 42)
assert q[0] == 42
p = newp(BIntPtrPtr, None)
- assert p[0] is None
+ assert p[0] is not None
+ assert p[0] == cast(BVoidP, 0)
+ assert p[0] == cast(BCharP, 0)
+ assert p[0] != None
+ assert repr(p[0]) == "<cdata 'int *' NULL>"
p[0] = q
+ assert p[0] != cast(BVoidP, 0)
+ assert p[0] != cast(BCharP, 0)
assert p[0][0] == 42
q[0] += 1
assert p[0][0] == 43
@@ -380,10 +392,10 @@
a = newp(p2, [range(n, n+5) for n in [100, 200, 300]])
assert repr(a) == "<cdata 'int[3][5]' owning %d bytes>" % (
3*5*size_of_int(),)
- assert repr(a + 0) == "<cdata 'int(*)[5]'>"
- assert repr(a[0]) == "<cdata 'int[5]'>"
- assert repr((a + 0)[0]) == "<cdata 'int[5]'>"
- assert repr(a[0] + 0) == "<cdata 'int *'>"
+ assert repr(a + 0).startswith("<cdata 'int(*)[5]' 0x")
+ assert repr(a[0]).startswith("<cdata 'int[5]' 0x")
+ assert repr((a + 0)[0]).startswith("<cdata 'int[5]' 0x")
+ assert repr(a[0] + 0).startswith("<cdata 'int *' 0x")
assert type(a[0][0]) is int
assert type((a[0] + 0)[0]) is int
@@ -464,12 +476,11 @@
f = cast(BIntP, int(d))
assert f[3] == 43
#
- for null in [0, None]:
- b = cast(BShortP, null)
- assert not b
- c = cast(BIntP, b)
- assert not c
- assert int(cast(BLongLong, c)) == 0
+ b = cast(BShortP, 0)
+ assert not b
+ c = cast(BIntP, b)
+ assert not c
+ assert int(cast(BLongLong, c)) == 0
def test_alignof():
BInt = new_primitive_type("int")
@@ -543,7 +554,7 @@
BInt = new_primitive_type("int")
BStruct = new_struct_type("foo")
BStructPtr = new_pointer_type(BStruct)
- p = cast(BStructPtr, None)
+ p = cast(BStructPtr, 0)
py.test.raises(AttributeError, "p.a1") # opaque
complete_struct_or_union(BStruct, [('a1', BInt, -1),
('a2', BInt, -1)])
@@ -580,23 +591,36 @@
assert p.a2 == 123
def test_struct_init_list():
+ BVoidP = new_pointer_type(new_void_type())
BInt = new_primitive_type("int")
BStruct = new_struct_type("foo")
BStructPtr = new_pointer_type(BStruct)
complete_struct_or_union(BStruct, [('a1', BInt, -1),
('a2', BInt, -1),
- ('a3', BInt, -1)])
+ ('a3', BInt, -1),
+ ('p4', new_pointer_type(BInt), -1)])
s = newp(BStructPtr, [123, 456])
assert s.a1 == 123
assert s.a2 == 456
assert s.a3 == 0
+ assert s.p4 == cast(BVoidP, 0)
#
s = newp(BStructPtr, {'a2': 41122, 'a3': -123})
assert s.a1 == 0
assert s.a2 == 41122
assert s.a3 == -123
+ assert s.p4 == cast(BVoidP, 0)
#
py.test.raises(KeyError, newp, BStructPtr, {'foobar': 0})
+ #
+ p = newp(new_pointer_type(BInt), 14141)
+ s = newp(BStructPtr, [12, 34, 56, p])
+ assert s.p4 == p
+ #
+ s = newp(BStructPtr, [12, 34, 56, cast(BVoidP, 0)])
+ assert s.p4 == cast(BVoidP, 0)
+ #
+ py.test.raises(TypeError, newp, BStructPtr, [12, 34, 56, None])
def test_array_in_struct():
BInt = new_primitive_type("int")
@@ -605,7 +629,7 @@
complete_struct_or_union(BStruct, [('a1', BArrayInt5, -1)])
s = newp(new_pointer_type(BStruct), [[20, 24, 27, 29, 30]])
assert s.a1[2] == 27
- assert repr(s.a1) == "<cdata 'int[5]'>"
+ assert repr(s.a1).startswith("<cdata 'int[5]' 0x")
def test_offsetof():
BInt = new_primitive_type("int")
@@ -738,6 +762,7 @@
assert f(1, cast(BInt, 42)) == 42
assert f(2, cast(BInt, 40), cast(BInt, 2)) == 42
py.test.raises(TypeError, f, 1, 42)
+ py.test.raises(TypeError, f, 2, None)
def test_new_charp():
BChar = new_primitive_type("char")
@@ -774,8 +799,9 @@
BVoidP = new_pointer_type(new_void_type())
ll = find_and_load_library('c')
stderr = ll.read_variable(BVoidP, "stderr")
- ll.write_variable(BVoidP, "stderr", None)
- assert ll.read_variable(BVoidP, "stderr") is None
+ ll.write_variable(BVoidP, "stderr", cast(BVoidP, 0))
+ assert ll.read_variable(BVoidP, "stderr") is not None
+ assert not ll.read_variable(BVoidP, "stderr")
ll.write_variable(BVoidP, "stderr", stderr)
assert ll.read_variable(BVoidP, "stderr") == stderr
@@ -812,7 +838,7 @@
def test_cast_to_enum():
BEnum = new_enum_type("foo", ('def', 'c', 'ab'), (0, 1, -20))
e = cast(BEnum, 0)
- assert repr(e) == "<cdata 'enum foo'>"
+ assert repr(e) == "<cdata 'enum foo' 'def'>"
assert str(e) == 'def'
assert str(cast(BEnum, -20)) == 'ab'
assert str(cast(BEnum, 'c')) == 'c'
@@ -821,6 +847,8 @@
assert int(cast(BEnum, -242 + 2**128)) == -242
assert str(cast(BEnum, -242 + 2**128)) == '#-242'
assert str(cast(BEnum, '#-20')) == 'ab'
+ assert repr(cast(BEnum, '#-20')) == "<cdata 'enum foo' 'ab'>"
+ assert repr(cast(BEnum, '#-21')) == "<cdata 'enum foo' '#-21'>"
def test_enum_in_struct():
BEnum = new_enum_type("foo", ('def', 'c', 'ab'), (0, 1, -20))
@@ -1037,6 +1065,7 @@
assert str(a) == "hello"
p = a + 2
assert str(p) == "llo"
+ py.test.raises(RuntimeError, str, cast(BCharP, 0))
def test_bug_convert_to_ptr():
BChar = new_primitive_type("char")
@@ -1044,3 +1073,18 @@
BDouble = new_primitive_type("double")
x = cast(BDouble, 42)
py.test.raises(TypeError, newp, new_pointer_type(BCharP), x)
+
+def test_set_struct_fields():
+ BChar = new_primitive_type("char")
+ BCharP = new_pointer_type(BChar)
+ BCharArray10 = new_array_type(BCharP, 10)
+ BStruct = new_struct_type("foo")
+ BStructPtr = new_pointer_type(BStruct)
+ complete_struct_or_union(BStruct, [('a1', BCharArray10, -1)])
+ p = newp(BStructPtr, None)
+ assert str(p.a1) == ''
+ p.a1 = 'foo'
+ assert str(p.a1) == 'foo'
+ assert list(p.a1) == ['f', 'o', 'o'] + ['\x00'] * 7
+ p.a1 = ['x', 'y']
+ assert str(p.a1) == 'xyo'
More information about the pypy-commit
mailing list