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

Reply via email to