Author: Armin Rigo <[email protected]>
Branch:
Changeset: r211:d45b3ca636ab
Date: 2014-12-19 17:10 +0100
http://bitbucket.org/cffi/creflect/changeset/d45b3ca636ab/
Log: more tests
diff --git a/zeffir/test/test_c.py b/zeffir/test/test_c.py
--- a/zeffir/test/test_c.py
+++ b/zeffir/test/test_c.py
@@ -419,3 +419,102 @@
py.test.raises(OverflowError, ffi.typeof, "int[%d]" % (sys.maxsize + 1))
py.test.raises(OverflowError, ffi.typeof, "int[%d]" % sys.maxsize)
py.test.raises(OverflowError, ffi.typeof, "int[%d]" % (sys.maxsize // 3))
+
+def test_inspect_array_type():
+ ffi = support.new_ffi()
+ p1 = ffi.typeof("int[]")
+ assert p1.kind == "array"
+ assert p1.cname == "int[]"
+ assert p1.item is ffi.typeof("int")
+ assert p1.length is None
+ check_dir(p1, ['cname', 'kind', 'item', 'length'])
+ p1 = ffi.typeof("int[42]")
+ assert p1.kind == "array"
+ assert p1.cname == "int[42]"
+ assert p1.item is ffi.typeof("int")
+ assert p1.length == 42
+ check_dir(p1, ['cname', 'kind', 'item', 'length'])
+
+def test_array_instance():
+ ffi = support.new_ffi()
+ LENGTH = 1423
+ p1 = ffi.typeof("int[%d]" % LENGTH)
+ a = ffi.new(p1)
+ assert repr(a) == "<cdata 'int[%d]' owning %d bytes>" % (
+ LENGTH, LENGTH * size_of_int())
+ assert len(a) == LENGTH
+ for i in range(LENGTH):
+ assert a[i] == 0
+ py.test.raises(IndexError, "a[LENGTH]")
+ py.test.raises(IndexError, "a[-1]")
+ for i in range(LENGTH):
+ a[i] = i * i + 1
+ for i in range(LENGTH):
+ assert a[i] == i * i + 1
+ e = py.test.raises(IndexError, "a[LENGTH+100] = 500")
+ assert ('(expected %d < %d)' % (LENGTH+100, LENGTH)) in str(e.value)
+ py.test.raises(TypeError, int, a)
+
+def test_array_of_unknown_length_instance():
+ ffi = support.new_ffi()
+ p1 = ffi.typeof("int[]")
+ py.test.raises(TypeError, ffi.new, p1)
+ py.test.raises(ValueError, ffi.new, p1, -42)
+ a = ffi.new(p1, 42)
+ assert len(a) == 42
+ for i in range(42):
+ a[i] -= i
+ for i in range(42):
+ assert a[i] == -i
+ py.test.raises(IndexError, "a[42]")
+ py.test.raises(IndexError, "a[-1]")
+ py.test.raises(IndexError, "a[42] = 123")
+ py.test.raises(IndexError, "a[-1] = 456")
+
+def test_array_of_unknown_length_instance_with_initializer():
+ ffi = support.new_ffi()
+ a = ffi.new("int[]", list(range(42)))
+ assert len(a) == 42
+ a = ffi.new("int[]", tuple(range(142)))
+ assert len(a) == 142
+ assert a[99] == 99
+
+def test_array_initializer():
+ ffi = support.new_ffi()
+ a = ffi.new("int[42]", list(range(100, 142)))
+ for i in range(42):
+ assert a[i] == 100 + i
+ #
+ a = ffi.new("int[44]", tuple(range(100, 142)))
+ for i in range(42):
+ assert a[i] == 100 + i
+ assert a[42] == 0 # extra uninitialized items
+ assert a[43] == 0
+
+def test_array_add():
+ ffi = support.new_ffi()
+ p2 = ffi.typeof("int[3][5]")
+ a = ffi.new(p2, [list(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).startswith("<cdata 'int(*)[5]' 0x")
+ assert 0 + a == a + 0 != 1 + a == a + 1
+ 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
+
+def test_array_sub():
+ ffi = support.new_ffi()
+ a = ffi.new("int[5]")
+ p = a + 1
+ assert p - a == 1
+ assert p - (a+0) == 1
+ assert a == (p - 1)
+ q = ffi.new("short *")
+ py.test.raises(TypeError, "p - q")
+ py.test.raises(TypeError, "q - p")
+ py.test.raises(TypeError, "a - q")
+ e = py.test.raises(TypeError, "q - a")
+ assert str(e.value) == "cannot subtract cdata 'short *' and cdata 'int *'"
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit