7 _fields_
= [("c_int", c_int
)]
10 self
._init
_called
= True
12 class Test(unittest
.TestCase
):
13 def test_fom_buffer(self
):
14 a
= array
.array("i", range(16))
15 x
= (c_int
* 16).from_buffer(a
)
18 self
.assertEqual(y
.c_int
, a
[0])
19 self
.assertFalse(y
.init_called
)
21 self
.assertEqual(x
[:], a
.tolist())
23 a
[0], a
[-1] = 200, -200
24 self
.assertEqual(x
[:], a
.tolist())
26 self
.assertTrue(a
in x
._objects
.values())
28 self
.assertRaises(ValueError,
29 c_int
.from_buffer
, a
, -1)
32 del a
; gc
.collect(); gc
.collect(); gc
.collect()
33 self
.assertEqual(x
[:], expected
)
35 self
.assertRaises(TypeError,
36 (c_char
* 16).from_buffer
, "a" * 16)
38 def test_fom_buffer_with_offset(self
):
39 a
= array
.array("i", range(16))
40 x
= (c_int
* 15).from_buffer(a
, sizeof(c_int
))
42 self
.assertEqual(x
[:], a
.tolist()[1:])
43 self
.assertRaises(ValueError, lambda: (c_int
* 16).from_buffer(a
, sizeof(c_int
)))
44 self
.assertRaises(ValueError, lambda: (c_int
* 1).from_buffer(a
, 16 * sizeof(c_int
)))
46 def test_from_buffer_copy(self
):
47 a
= array
.array("i", range(16))
48 x
= (c_int
* 16).from_buffer_copy(a
)
50 y
= X
.from_buffer_copy(a
)
51 self
.assertEqual(y
.c_int
, a
[0])
52 self
.assertFalse(y
.init_called
)
54 self
.assertEqual(x
[:], range(16))
56 a
[0], a
[-1] = 200, -200
57 self
.assertEqual(x
[:], range(16))
59 self
.assertEqual(x
._objects
, None)
61 self
.assertRaises(ValueError,
62 c_int
.from_buffer
, a
, -1)
64 del a
; gc
.collect(); gc
.collect(); gc
.collect()
65 self
.assertEqual(x
[:], range(16))
67 x
= (c_char
* 16).from_buffer_copy("a" * 16)
68 self
.assertEqual(x
[:], "a" * 16)
70 def test_fom_buffer_copy_with_offset(self
):
71 a
= array
.array("i", range(16))
72 x
= (c_int
* 15).from_buffer_copy(a
, sizeof(c_int
))
74 self
.assertEqual(x
[:], a
.tolist()[1:])
75 self
.assertRaises(ValueError,
76 (c_int
* 16).from_buffer_copy
, a
, sizeof(c_int
))
77 self
.assertRaises(ValueError,
78 (c_int
* 1).from_buffer_copy
, a
, 16 * sizeof(c_int
))
80 if __name__
== '__main__':