[Python-checkins] r88733 - in python/branches/py3k: Doc/library/stdtypes.rst Lib/test/test_bytes.py Misc/NEWS Objects/bytearrayobject.c

eli.bendersky python-checkins at python.org
Thu Mar 3 19:21:02 CET 2011


Author: eli.bendersky
Date: Thu Mar  3 19:21:02 2011
New Revision: 88733

Log:
Issue #10516: added copy() and clear() methods to bytearrays as well



Modified:
   python/branches/py3k/Doc/library/stdtypes.rst
   python/branches/py3k/Lib/test/test_bytes.py
   python/branches/py3k/Misc/NEWS
   python/branches/py3k/Objects/bytearrayobject.c

Modified: python/branches/py3k/Doc/library/stdtypes.rst
==============================================================================
--- python/branches/py3k/Doc/library/stdtypes.rst	(original)
+++ python/branches/py3k/Doc/library/stdtypes.rst	Thu Mar  3 19:21:02 2011
@@ -1675,10 +1675,10 @@
 | ``s.extend(x)``              | same as ``s[len(s):len(s)] =   | \(2)                |
 |                              | x``                            |                     |
 +------------------------------+--------------------------------+---------------------+
-| ``s.clear()``                | remove all items from ``s``    | \(8)                |
+| ``s.clear()``                | remove all items from ``s``    |                     |
 |                              |                                |                     |
 +------------------------------+--------------------------------+---------------------+
-| ``s.copy()``                 | return a shallow copy of ``s`` | \(8)                |
+| ``s.copy()``                 | return a shallow copy of ``s`` |                     |
 |                              |                                |                     |
 +------------------------------+--------------------------------+---------------------+
 | ``s.count(x)``               | return number of *i*'s for     |                     |
@@ -1757,8 +1757,7 @@
       detect that the list has been mutated during a sort.
 
 (8)
-   :meth:`clear`, :meth:`!copy` and :meth:`sort` are not supported by
-   :class:`bytearray` objects.
+   :meth:`sort` is not supported by :class:`bytearray` objects.
 
     .. versionadded:: 3.3
        :meth:`clear` and :meth:`!copy` methods.

Modified: python/branches/py3k/Lib/test/test_bytes.py
==============================================================================
--- python/branches/py3k/Lib/test/test_bytes.py	(original)
+++ python/branches/py3k/Lib/test/test_bytes.py	Thu Mar  3 19:21:02 2011
@@ -564,6 +564,39 @@
         b.reverse()
         self.assertFalse(b)
 
+    def test_clear(self):
+        b = bytearray(b'python')
+        b.clear()
+        self.assertEqual(b, b'')
+
+        b = bytearray(b'')
+        b.clear()
+        self.assertEqual(b, b'')
+
+        b = bytearray(b'')
+        b.append(ord('r'))
+        b.clear()
+        b.append(ord('p'))
+        self.assertEqual(b, b'p')
+
+    def test_copy(self):
+        b = bytearray(b'abc')
+        bb = b.copy()
+        self.assertEqual(bb, b'abc')
+
+        b = bytearray(b'')
+        bb = b.copy()
+        self.assertEqual(bb, b'')
+
+        # test that it's indeed a copy and not a reference
+        b = bytearray(b'abc')
+        bb = b.copy()
+        self.assertEqual(b, bb)
+        self.assertIsNot(b, bb)
+        bb.append(ord('d'))
+        self.assertEqual(bb, b'abcd')
+        self.assertEqual(b, b'abc')
+
     def test_regexps(self):
         def by(s):
             return bytearray(map(ord, s))

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Thu Mar  3 19:21:02 2011
@@ -47,7 +47,7 @@
 
 - Check for NULL result in PyType_FromSpec.
 
-- Issue #10516: New copy() and clear() methods for lists.
+- Issue #10516: New copy() and clear() methods for lists and bytearrays.
 
 Library
 -------

Modified: python/branches/py3k/Objects/bytearrayobject.c
==============================================================================
--- python/branches/py3k/Objects/bytearrayobject.c	(original)
+++ python/branches/py3k/Objects/bytearrayobject.c	Thu Mar  3 19:21:02 2011
@@ -1148,6 +1148,30 @@
     return count_obj;
 }
 
+PyDoc_STRVAR(clear__doc__,
+"B.clear() -> None\n\
+\n\
+Remove all items from B.");
+
+static PyObject * 
+bytearray_clear(PyByteArrayObject *self)
+{
+    if (PyByteArray_Resize((PyObject *)self, 0) < 0)
+        return NULL;
+    Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(copy__doc__,
+"B.copy() -> bytearray\n\
+\n\
+Return a copy of B.");
+
+static PyObject *
+bytearray_copy(PyByteArrayObject *self)
+{
+    return PyByteArray_FromStringAndSize(PyByteArray_AS_STRING((PyObject *)self),
+                                         PyByteArray_GET_SIZE(self));
+}
 
 PyDoc_STRVAR(index__doc__,
 "B.index(sub[, start[, end]]) -> int\n\
@@ -2730,6 +2754,8 @@
     {"capitalize", (PyCFunction)stringlib_capitalize, METH_NOARGS,
      _Py_capitalize__doc__},
     {"center", (PyCFunction)stringlib_center, METH_VARARGS, center__doc__},
+    {"clear", (PyCFunction)bytearray_clear, METH_NOARGS, clear__doc__},
+    {"copy", (PyCFunction)bytearray_copy, METH_NOARGS, copy__doc__},
     {"count", (PyCFunction)bytearray_count, METH_VARARGS, count__doc__},
     {"decode", (PyCFunction)bytearray_decode, METH_VARARGS | METH_KEYWORDS, decode_doc},
     {"endswith", (PyCFunction)bytearray_endswith, METH_VARARGS, endswith__doc__},


More information about the Python-checkins mailing list