diff options
author | Josh Gao <jmgao@google.com> | 2015-09-23 20:45:19 -0700 |
---|---|---|
committer | Josh Gao <jmgao@google.com> | 2015-09-23 20:46:13 -0700 |
commit | f79bdee20cacc521d7ec3a8720a43087b47326d6 (patch) | |
tree | ee9330bdc29d1af5a033ca862a10a33e5e1c1b7f /lib/python2.7/ctypes/test/test_frombuffer.py | |
parent | df5f01881b6d4e9c59be106b4063247433737773 (diff) | |
download | linux-x86-f79bdee20cacc521d7ec3a8720a43087b47326d6.tar.gz |
Import gdb 7.10 linux-x86_64 prebuilt.
Taken from aosp-master-ndk build 2274331.
Bug: http://b/21920612
Change-Id: I2129ab5b85c96273bdb97ee9ca82116bb4db87fa
Diffstat (limited to 'lib/python2.7/ctypes/test/test_frombuffer.py')
-rw-r--r-- | lib/python2.7/ctypes/test/test_frombuffer.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/lib/python2.7/ctypes/test/test_frombuffer.py b/lib/python2.7/ctypes/test/test_frombuffer.py new file mode 100644 index 0000000..624fb70 --- /dev/null +++ b/lib/python2.7/ctypes/test/test_frombuffer.py @@ -0,0 +1,81 @@ +from ctypes import * +import array +import gc +import unittest + +class X(Structure): + _fields_ = [("c_int", c_int)] + init_called = False + def __init__(self): + self._init_called = True + +class Test(unittest.TestCase): + def test_fom_buffer(self): + a = array.array("i", range(16)) + x = (c_int * 16).from_buffer(a) + + y = X.from_buffer(a) + self.assertEqual(y.c_int, a[0]) + self.assertFalse(y.init_called) + + self.assertEqual(x[:], a.tolist()) + + a[0], a[-1] = 200, -200 + self.assertEqual(x[:], a.tolist()) + + self.assertTrue(a in x._objects.values()) + + self.assertRaises(ValueError, + c_int.from_buffer, a, -1) + + expected = x[:] + del a; gc.collect(); gc.collect(); gc.collect() + self.assertEqual(x[:], expected) + + self.assertRaises(TypeError, + (c_char * 16).from_buffer, "a" * 16) + + def test_fom_buffer_with_offset(self): + a = array.array("i", range(16)) + x = (c_int * 15).from_buffer(a, sizeof(c_int)) + + self.assertEqual(x[:], a.tolist()[1:]) + self.assertRaises(ValueError, lambda: (c_int * 16).from_buffer(a, sizeof(c_int))) + self.assertRaises(ValueError, lambda: (c_int * 1).from_buffer(a, 16 * sizeof(c_int))) + + def test_from_buffer_copy(self): + a = array.array("i", range(16)) + x = (c_int * 16).from_buffer_copy(a) + + y = X.from_buffer_copy(a) + self.assertEqual(y.c_int, a[0]) + self.assertFalse(y.init_called) + + self.assertEqual(x[:], range(16)) + + a[0], a[-1] = 200, -200 + self.assertEqual(x[:], range(16)) + + self.assertEqual(x._objects, None) + + self.assertRaises(ValueError, + c_int.from_buffer, a, -1) + + del a; gc.collect(); gc.collect(); gc.collect() + self.assertEqual(x[:], range(16)) + + x = (c_char * 16).from_buffer_copy("a" * 16) + self.assertEqual(x[:], "a" * 16) + + def test_fom_buffer_copy_with_offset(self): + a = array.array("i", range(16)) + x = (c_int * 15).from_buffer_copy(a, sizeof(c_int)) + + self.assertEqual(x[:], a.tolist()[1:]) + self.assertRaises(ValueError, + (c_int * 16).from_buffer_copy, a, sizeof(c_int)) + self.assertRaises(ValueError, + (c_int * 1).from_buffer_copy, a, 16 * sizeof(c_int)) + +if __name__ == '__main__': + unittest.main() |