Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_memoryview.py @ 78069:a8aa77458e12 3.2
Add c_size_t and c_ssize_t to the ctypes summary table.
| author | Antoine Pitrou <solipsis@pitrou.net> |
|---|---|
| date | Thu, 12 Jul 2012 20:31:50 +0200 |
| parents | 3c9232a684ae |
| children | 215690b782f8 |
| rev | line source |
|---|---|
|
43793
2d8d6855a602
Fixed memoryview constructor. It allowed arbitrary keyword arguments. The bug was found by mykhal from #python. I've also added a small test case in the new test_memoryview.py
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1 """Unit tests for the memoryview |
|
2d8d6855a602
Fixed memoryview constructor. It allowed arbitrary keyword arguments. The bug was found by mykhal from #python. I've also added a small test case in the new test_memoryview.py
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2 |
|
2d8d6855a602
Fixed memoryview constructor. It allowed arbitrary keyword arguments. The bug was found by mykhal from #python. I've also added a small test case in the new test_memoryview.py
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
3 XXX We need more tests! Some tests are in test_bytes |
|
2d8d6855a602
Fixed memoryview constructor. It allowed arbitrary keyword arguments. The bug was found by mykhal from #python. I've also added a small test case in the new test_memoryview.py
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
4 """ |
|
2d8d6855a602
Fixed memoryview constructor. It allowed arbitrary keyword arguments. The bug was found by mykhal from #python. I've also added a small test case in the new test_memoryview.py
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
5 |
|
2d8d6855a602
Fixed memoryview constructor. It allowed arbitrary keyword arguments. The bug was found by mykhal from #python. I've also added a small test case in the new test_memoryview.py
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
6 import unittest |
|
47201
9c930a32cebb
#2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents:
43793
diff
changeset
|
7 import test.support |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
8 import sys |
|
48928
696f5d8419f2
#3712: The memoryview object had a reference leak and didn't support cyclic garbage collection.
Antoine Pitrou <solipsis@pitrou.net>
parents:
48782
diff
changeset
|
9 import gc |
|
696f5d8419f2
#3712: The memoryview object had a reference leak and didn't support cyclic garbage collection.
Antoine Pitrou <solipsis@pitrou.net>
parents:
48782
diff
changeset
|
10 import weakref |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
11 import array |
|
67676
2fde5abfb5f1
Merged revisions 88097 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66340
diff
changeset
|
12 import io |
|
43793
2d8d6855a602
Fixed memoryview constructor. It allowed arbitrary keyword arguments. The bug was found by mykhal from #python. I've also added a small test case in the new test_memoryview.py
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
13 |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
14 |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
15 class AbstractMemoryTests: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
16 source_bytes = b"abcdef" |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
17 |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
18 @property |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
19 def _source(self): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
20 return self.source_bytes |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
21 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
22 @property |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
23 def _types(self): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
24 return filter(None, [self.ro_type, self.rw_type]) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
25 |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
26 def check_getitem_with_type(self, tp): |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
27 item = self.getitem_type |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
28 b = tp(self._source) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
29 oldrefcount = sys.getrefcount(b) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
30 m = self._view(b) |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
31 self.assertEqual(m[0], item(b"a")) |
|
58473
71acd4482e65
Merged revisions 77727 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
55593
diff
changeset
|
32 self.assertIsInstance(m[0], bytes) |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
33 self.assertEqual(m[5], item(b"f")) |
|
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
34 self.assertEqual(m[-1], item(b"f")) |
|
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
35 self.assertEqual(m[-6], item(b"a")) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
36 # Bounds checking |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
37 self.assertRaises(IndexError, lambda: m[6]) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
38 self.assertRaises(IndexError, lambda: m[-7]) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
39 self.assertRaises(IndexError, lambda: m[sys.maxsize]) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
40 self.assertRaises(IndexError, lambda: m[-sys.maxsize]) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
41 # Type checking |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
42 self.assertRaises(TypeError, lambda: m[None]) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
43 self.assertRaises(TypeError, lambda: m[0.0]) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
44 self.assertRaises(TypeError, lambda: m["a"]) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
45 m = None |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
46 self.assertEqual(sys.getrefcount(b), oldrefcount) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
47 |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
48 def test_getitem(self): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
49 for tp in self._types: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
50 self.check_getitem_with_type(tp) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
51 |
|
54828
b4d0c020e357
Issue 6329: Fix iteration for memoryviews.
Raymond Hettinger <python@rcn.com>
parents:
50490
diff
changeset
|
52 def test_iter(self): |
|
b4d0c020e357
Issue 6329: Fix iteration for memoryviews.
Raymond Hettinger <python@rcn.com>
parents:
50490
diff
changeset
|
53 for tp in self._types: |
|
b4d0c020e357
Issue 6329: Fix iteration for memoryviews.
Raymond Hettinger <python@rcn.com>
parents:
50490
diff
changeset
|
54 b = tp(self._source) |
|
b4d0c020e357
Issue 6329: Fix iteration for memoryviews.
Raymond Hettinger <python@rcn.com>
parents:
50490
diff
changeset
|
55 m = self._view(b) |
|
b4d0c020e357
Issue 6329: Fix iteration for memoryviews.
Raymond Hettinger <python@rcn.com>
parents:
50490
diff
changeset
|
56 self.assertEqual(list(m), [m[i] for i in range(len(m))]) |
|
b4d0c020e357
Issue 6329: Fix iteration for memoryviews.
Raymond Hettinger <python@rcn.com>
parents:
50490
diff
changeset
|
57 |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
58 def test_setitem_readonly(self): |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
59 if not self.ro_type: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
60 return |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
61 b = self.ro_type(self._source) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
62 oldrefcount = sys.getrefcount(b) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
63 m = self._view(b) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
64 def setitem(value): |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
65 m[0] = value |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
66 self.assertRaises(TypeError, setitem, b"a") |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
67 self.assertRaises(TypeError, setitem, 65) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
68 self.assertRaises(TypeError, setitem, memoryview(b"a")) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
69 m = None |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
70 self.assertEqual(sys.getrefcount(b), oldrefcount) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
71 |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
72 def test_setitem_writable(self): |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
73 if not self.rw_type: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
74 return |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
75 tp = self.rw_type |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
76 b = self.rw_type(self._source) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
77 oldrefcount = sys.getrefcount(b) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
78 m = self._view(b) |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
79 m[0] = tp(b"0") |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
80 self._check_contents(tp, b, b"0bcdef") |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
81 m[1:3] = tp(b"12") |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
82 self._check_contents(tp, b, b"012def") |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
83 m[1:1] = tp(b"") |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
84 self._check_contents(tp, b, b"012def") |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
85 m[:] = tp(b"abcdef") |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
86 self._check_contents(tp, b, b"abcdef") |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
87 |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
88 # Overlapping copies of a view into itself |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
89 m[0:3] = m[2:5] |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
90 self._check_contents(tp, b, b"cdedef") |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
91 m[:] = tp(b"abcdef") |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
92 m[2:5] = m[0:3] |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
93 self._check_contents(tp, b, b"ababcf") |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
94 |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
95 def setitem(key, value): |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
96 m[key] = tp(value) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
97 # Bounds checking |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
98 self.assertRaises(IndexError, setitem, 6, b"a") |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
99 self.assertRaises(IndexError, setitem, -7, b"a") |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
100 self.assertRaises(IndexError, setitem, sys.maxsize, b"a") |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
101 self.assertRaises(IndexError, setitem, -sys.maxsize, b"a") |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
102 # Wrong index/slice types |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
103 self.assertRaises(TypeError, setitem, 0.0, b"a") |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
104 self.assertRaises(TypeError, setitem, (0,), b"a") |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
105 self.assertRaises(TypeError, setitem, "a", b"a") |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
106 # Trying to resize the memory object |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
107 self.assertRaises(ValueError, setitem, 0, b"") |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
108 self.assertRaises(ValueError, setitem, 0, b"ab") |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
109 self.assertRaises(ValueError, setitem, slice(1,1), b"a") |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
110 self.assertRaises(ValueError, setitem, slice(0,2), b"a") |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
111 |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
112 m = None |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
113 self.assertEqual(sys.getrefcount(b), oldrefcount) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
114 |
|
64362
4547b1491169
Merged revisions 84408-84409 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55593
diff
changeset
|
115 def test_delitem(self): |
|
4547b1491169
Merged revisions 84408-84409 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55593
diff
changeset
|
116 for tp in self._types: |
|
4547b1491169
Merged revisions 84408-84409 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55593
diff
changeset
|
117 b = tp(self._source) |
|
4547b1491169
Merged revisions 84408-84409 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55593
diff
changeset
|
118 m = self._view(b) |
|
4547b1491169
Merged revisions 84408-84409 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55593
diff
changeset
|
119 with self.assertRaises(TypeError): |
|
4547b1491169
Merged revisions 84408-84409 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55593
diff
changeset
|
120 del m[1] |
|
4547b1491169
Merged revisions 84408-84409 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55593
diff
changeset
|
121 with self.assertRaises(TypeError): |
|
4547b1491169
Merged revisions 84408-84409 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55593
diff
changeset
|
122 del m[1:4] |
|
4547b1491169
Merged revisions 84408-84409 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55593
diff
changeset
|
123 |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
124 def test_tobytes(self): |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
125 for tp in self._types: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
126 m = self._view(tp(self._source)) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
127 b = m.tobytes() |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
128 # This calls self.getitem_type() on each separate byte of b"abcdef" |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
129 expected = b"".join( |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
130 self.getitem_type(bytes([c])) for c in b"abcdef") |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
131 self.assertEqual(b, expected) |
|
58473
71acd4482e65
Merged revisions 77727 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
55593
diff
changeset
|
132 self.assertIsInstance(b, bytes) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
133 |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
134 def test_tolist(self): |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
135 for tp in self._types: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
136 m = self._view(tp(self._source)) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
137 l = m.tolist() |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
138 self.assertEqual(l, list(b"abcdef")) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
139 |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
140 def test_compare(self): |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
141 # memoryviews can compare for equality with other objects |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
142 # having the buffer interface. |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
143 for tp in self._types: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
144 m = self._view(tp(self._source)) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
145 for tp_comp in self._types: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
146 self.assertTrue(m == tp_comp(b"abcdef")) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
147 self.assertFalse(m != tp_comp(b"abcdef")) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
148 self.assertFalse(m == tp_comp(b"abcde")) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
149 self.assertTrue(m != tp_comp(b"abcde")) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
150 self.assertFalse(m == tp_comp(b"abcde1")) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
151 self.assertTrue(m != tp_comp(b"abcde1")) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
152 self.assertTrue(m == m) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
153 self.assertTrue(m == m[:]) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
154 self.assertTrue(m[0:6] == m[:]) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
155 self.assertFalse(m[0:5] == m) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
156 |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
157 # Comparison with objects which don't support the buffer API |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
158 self.assertFalse(m == "abcdef") |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
159 self.assertTrue(m != "abcdef") |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
160 self.assertFalse("abcdef" == m) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
161 self.assertTrue("abcdef" != m) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
162 |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
163 # Unordered comparisons |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
164 for c in (m, b"abcdef"): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
165 self.assertRaises(TypeError, lambda: m < c) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
166 self.assertRaises(TypeError, lambda: c <= m) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
167 self.assertRaises(TypeError, lambda: m >= c) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
168 self.assertRaises(TypeError, lambda: c > m) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
169 |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
170 def check_attributes_with_type(self, tp): |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
171 m = self._view(tp(self._source)) |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
172 self.assertEqual(m.format, self.format) |
|
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
173 self.assertEqual(m.itemsize, self.itemsize) |
|
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
174 self.assertEqual(m.ndim, 1) |
|
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
175 self.assertEqual(m.shape, (6,)) |
|
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
176 self.assertEqual(len(m), 6) |
|
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
177 self.assertEqual(m.strides, (self.itemsize,)) |
|
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
178 self.assertEqual(m.suboffsets, None) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
179 return m |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
180 |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
181 def test_attributes_readonly(self): |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
182 if not self.ro_type: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
183 return |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
184 m = self.check_attributes_with_type(self.ro_type) |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
185 self.assertEqual(m.readonly, True) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
186 |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
187 def test_attributes_writable(self): |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
188 if not self.rw_type: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
189 return |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
190 m = self.check_attributes_with_type(self.rw_type) |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
191 self.assertEqual(m.readonly, False) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
192 |
|
48928
696f5d8419f2
#3712: The memoryview object had a reference leak and didn't support cyclic garbage collection.
Antoine Pitrou <solipsis@pitrou.net>
parents:
48782
diff
changeset
|
193 def test_getbuffer(self): |
|
696f5d8419f2
#3712: The memoryview object had a reference leak and didn't support cyclic garbage collection.
Antoine Pitrou <solipsis@pitrou.net>
parents:
48782
diff
changeset
|
194 # Test PyObject_GetBuffer() on a memoryview object. |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
195 for tp in self._types: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
196 b = tp(self._source) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
197 oldrefcount = sys.getrefcount(b) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
198 m = self._view(b) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
199 oldviewrefcount = sys.getrefcount(m) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
200 s = str(m, "utf-8") |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
201 self._check_contents(tp, b, s.encode("utf-8")) |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
202 self.assertEqual(sys.getrefcount(m), oldviewrefcount) |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
203 m = None |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
204 self.assertEqual(sys.getrefcount(b), oldrefcount) |
|
48928
696f5d8419f2
#3712: The memoryview object had a reference leak and didn't support cyclic garbage collection.
Antoine Pitrou <solipsis@pitrou.net>
parents:
48782
diff
changeset
|
205 |
|
696f5d8419f2
#3712: The memoryview object had a reference leak and didn't support cyclic garbage collection.
Antoine Pitrou <solipsis@pitrou.net>
parents:
48782
diff
changeset
|
206 def test_gc(self): |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
207 for tp in self._types: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
208 if not isinstance(tp, type): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
209 # If tp is a factory rather than a plain type, skip |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
210 continue |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
211 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
212 class MySource(tp): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
213 pass |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
214 class MyObject: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
215 pass |
|
48928
696f5d8419f2
#3712: The memoryview object had a reference leak and didn't support cyclic garbage collection.
Antoine Pitrou <solipsis@pitrou.net>
parents:
48782
diff
changeset
|
216 |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
217 # Create a reference cycle through a memoryview object |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
218 b = MySource(tp(b'abc')) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
219 m = self._view(b) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
220 o = MyObject() |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
221 b.m = m |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
222 b.o = o |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
223 wr = weakref.ref(o) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
224 b = m = o = None |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
225 # The cycle must be broken |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
226 gc.collect() |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54828
diff
changeset
|
227 self.assertTrue(wr() is None, wr()) |
|
48928
696f5d8419f2
#3712: The memoryview object had a reference leak and didn't support cyclic garbage collection.
Antoine Pitrou <solipsis@pitrou.net>
parents:
48782
diff
changeset
|
228 |
|
64584
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
229 def _check_released(self, m, tp): |
|
66581
38bec90fd8ab
#10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
66310
diff
changeset
|
230 check = self.assertRaisesRegex(ValueError, "released") |
|
64584
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
231 with check: bytes(m) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
232 with check: m.tobytes() |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
233 with check: m.tolist() |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
234 with check: m[0] |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
235 with check: m[0] = b'x' |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
236 with check: len(m) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
237 with check: m.format |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
238 with check: m.itemsize |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
239 with check: m.ndim |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
240 with check: m.readonly |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
241 with check: m.shape |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
242 with check: m.strides |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
243 with check: |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
244 with m: |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
245 pass |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
246 # str() and repr() still function |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
247 self.assertIn("released memory", str(m)) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
248 self.assertIn("released memory", repr(m)) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
249 self.assertEqual(m, m) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
250 self.assertNotEqual(m, memoryview(tp(self._source))) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
251 self.assertNotEqual(m, tp(self._source)) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
252 |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
253 def test_contextmanager(self): |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
254 for tp in self._types: |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
255 b = tp(self._source) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
256 m = self._view(b) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
257 with m as cm: |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
258 self.assertIs(cm, m) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
259 self._check_released(m, tp) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
260 m = self._view(b) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
261 # Can release explicitly inside the context manager |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
262 with m: |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
263 m.release() |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
264 |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
265 def test_release(self): |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
266 for tp in self._types: |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
267 b = tp(self._source) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
268 m = self._view(b) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
269 m.release() |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
270 self._check_released(m, tp) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
271 # Can be called a second time (it's a no-op) |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
272 m.release() |
|
ba54096b7a42
Issue #9757: memoryview objects get a release() method to release the
Antoine Pitrou <solipsis@pitrou.net>
parents:
64360
diff
changeset
|
273 self._check_released(m, tp) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
274 |
|
67676
2fde5abfb5f1
Merged revisions 88097 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66340
diff
changeset
|
275 def test_writable_readonly(self): |
|
2fde5abfb5f1
Merged revisions 88097 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66340
diff
changeset
|
276 # Issue #10451: memoryview incorrectly exposes a readonly |
|
2fde5abfb5f1
Merged revisions 88097 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66340
diff
changeset
|
277 # buffer as writable causing a segfault if using mmap |
|
2fde5abfb5f1
Merged revisions 88097 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66340
diff
changeset
|
278 tp = self.ro_type |
|
2fde5abfb5f1
Merged revisions 88097 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66340
diff
changeset
|
279 if tp is None: |
|
2fde5abfb5f1
Merged revisions 88097 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66340
diff
changeset
|
280 return |
|
2fde5abfb5f1
Merged revisions 88097 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66340
diff
changeset
|
281 b = tp(self._source) |
|
2fde5abfb5f1
Merged revisions 88097 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66340
diff
changeset
|
282 m = self._view(b) |
|
2fde5abfb5f1
Merged revisions 88097 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66340
diff
changeset
|
283 i = io.BytesIO(b'ZZZZ') |
|
2fde5abfb5f1
Merged revisions 88097 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66340
diff
changeset
|
284 self.assertRaises(TypeError, i.readinto, m) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
285 |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
286 # Variations on source objects for the buffer: bytes-like objects, then arrays |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
287 # with itemsize > 1. |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
288 # NOTE: support for multi-dimensional objects is unimplemented. |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
289 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
290 class BaseBytesMemoryTests(AbstractMemoryTests): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
291 ro_type = bytes |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
292 rw_type = bytearray |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
293 getitem_type = bytes |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
294 itemsize = 1 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
295 format = 'B' |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
296 |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
297 class BaseArrayMemoryTests(AbstractMemoryTests): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
298 ro_type = None |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
299 rw_type = lambda self, b: array.array('i', list(b)) |
|
64355
fa8b57f987c5
Issue #8990: array.fromstring() and array.tostring() get renamed to
Antoine Pitrou <solipsis@pitrou.net>
parents:
58473
diff
changeset
|
300 getitem_type = lambda self, b: array.array('i', list(b)).tobytes() |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
301 itemsize = array.array('i').itemsize |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
302 format = 'i' |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
303 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
304 def test_getbuffer(self): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
305 # XXX Test should be adapted for non-byte buffers |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
306 pass |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
307 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
308 def test_tolist(self): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
309 # XXX NotImplementedError: tolist() only supports byte views |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
310 pass |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
311 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
312 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
313 # Variations on indirection levels: memoryview, slice of memoryview, |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
314 # slice of slice of memoryview. |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
315 # This is important to test allocation subtleties. |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
316 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
317 class BaseMemoryviewTests: |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
318 def _view(self, obj): |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
319 return memoryview(obj) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
320 |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
321 def _check_contents(self, tp, obj, contents): |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
322 self.assertEqual(obj, tp(contents)) |
|
43793
2d8d6855a602
Fixed memoryview constructor. It allowed arbitrary keyword arguments. The bug was found by mykhal from #python. I've also added a small test case in the new test_memoryview.py
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
323 |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
324 class BaseMemorySliceTests: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
325 source_bytes = b"XabcdefY" |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
326 |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
327 def _view(self, obj): |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
328 m = memoryview(obj) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
329 return m[1:7] |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
330 |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
331 def _check_contents(self, tp, obj, contents): |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
332 self.assertEqual(obj[1:7], tp(contents)) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
333 |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
334 def test_refs(self): |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
335 for tp in self._types: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
336 m = memoryview(tp(self._source)) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
337 oldrefcount = sys.getrefcount(m) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
338 m[1:2] |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
339 self.assertEqual(sys.getrefcount(m), oldrefcount) |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
340 |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
341 class BaseMemorySliceSliceTests: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
342 source_bytes = b"XabcdefY" |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
343 |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
344 def _view(self, obj): |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
345 m = memoryview(obj) |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
346 return m[:7][1:] |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
347 |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
348 def _check_contents(self, tp, obj, contents): |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
349 self.assertEqual(obj[1:7], tp(contents)) |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
350 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
351 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
352 # Concrete test classes |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
353 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
354 class BytesMemoryviewTest(unittest.TestCase, |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
355 BaseMemoryviewTests, BaseBytesMemoryTests): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
356 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
357 def test_constructor(self): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
358 for tp in self._types: |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
359 ob = tp(self._source) |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54828
diff
changeset
|
360 self.assertTrue(memoryview(ob)) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54828
diff
changeset
|
361 self.assertTrue(memoryview(object=ob)) |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
362 self.assertRaises(TypeError, memoryview) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
363 self.assertRaises(TypeError, memoryview, ob, ob) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
364 self.assertRaises(TypeError, memoryview, argument=ob) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
365 self.assertRaises(TypeError, memoryview, ob, argument=True) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
366 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
367 class ArrayMemoryviewTest(unittest.TestCase, |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
368 BaseMemoryviewTests, BaseArrayMemoryTests): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
369 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
370 def test_array_assign(self): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
371 # Issue #4569: segfault when mutating a memoryview with itemsize != 1 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
372 a = array.array('i', range(10)) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
373 m = memoryview(a) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
374 new_a = array.array('i', range(9, -1, -1)) |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
375 m[:] = new_a |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64362
diff
changeset
|
376 self.assertEqual(a, new_a) |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
377 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
378 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
379 class BytesMemorySliceTest(unittest.TestCase, |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
380 BaseMemorySliceTests, BaseBytesMemoryTests): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
381 pass |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
382 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
383 class ArrayMemorySliceTest(unittest.TestCase, |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
384 BaseMemorySliceTests, BaseArrayMemoryTests): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
385 pass |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
386 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
387 class BytesMemorySliceSliceTest(unittest.TestCase, |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
388 BaseMemorySliceSliceTests, BaseBytesMemoryTests): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
389 pass |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
390 |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
391 class ArrayMemorySliceSliceTest(unittest.TestCase, |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
392 BaseMemorySliceSliceTests, BaseArrayMemoryTests): |
|
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
393 pass |
|
48782
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
394 |
|
501256c54c84
Issue #2394: implement more of the memoryview API.
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
395 |
|
43793
2d8d6855a602
Fixed memoryview constructor. It allowed arbitrary keyword arguments. The bug was found by mykhal from #python. I've also added a small test case in the new test_memoryview.py
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
396 def test_main(): |
|
50490
26045ed0c26e
Merged revisions 68200 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50083
diff
changeset
|
397 test.support.run_unittest(__name__) |
|
43793
2d8d6855a602
Fixed memoryview constructor. It allowed arbitrary keyword arguments. The bug was found by mykhal from #python. I've also added a small test case in the new test_memoryview.py
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
398 |
|
2d8d6855a602
Fixed memoryview constructor. It allowed arbitrary keyword arguments. The bug was found by mykhal from #python. I've also added a small test case in the new test_memoryview.py
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
399 if __name__ == "__main__": |
|
2d8d6855a602
Fixed memoryview constructor. It allowed arbitrary keyword arguments. The bug was found by mykhal from #python. I've also added a small test case in the new test_memoryview.py
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
400 test_main() |
