Commit 3fd1072a authored by Walter Dörwald's avatar Walter Dörwald

Fix array.array.insert(), so that it treats negative indices as

being relative to the end of the array, just like list.insert() does.
This closes SF bug #739313.
parent 4fe26d10
......@@ -145,7 +145,8 @@ the first occurence of \var{x} in the array.
\begin{methoddesc}[array]{insert}{i, x}
Insert a new item with value \var{x} in the array before position
\var{i}.
\var{i}. Negative values are treated as being relative to the end
of the array.
\end{methoddesc}
\begin{methoddesc}[array]{pop}{\optional{i}}
......
......@@ -82,6 +82,30 @@ class BaseTest(unittest.TestCase):
self.assertRaises(TypeError, a.insert, None)
self.assertRaises(TypeError, a.insert, 0, None)
a = array.array(self.typecode, self.example)
a.insert(-1, self.example[0])
self.assertEqual(
a,
array.array(
self.typecode,
self.example[:-1] + self.example[:1] + self.example[-1:]
)
)
a = array.array(self.typecode, self.example)
a.insert(-1000, self.example[0])
self.assertEqual(
a,
array.array(self.typecode, self.example[:1] + self.example)
)
a = array.array(self.typecode, self.example)
a.insert(1000, self.example[0])
self.assertEqual(
a,
array.array(self.typecode, self.example + self.example[:1])
)
def test_tofromfile(self):
a = array.array(self.typecode, 2*self.example)
self.assertRaises(TypeError, a.tofile)
......
......@@ -26,6 +26,9 @@ Core and builtins
Extension modules
-----------------
- array.array.insert() now treats negative indices as being relative
to the end of the array, just like list.insert() does. (SF bug #739313)
- The datetime module classes datetime, time, and timedelta are now
properly subclassable.
......
......@@ -470,8 +470,11 @@ ins1(arrayobject *self, int where, PyObject *v)
PyErr_NoMemory();
return -1;
}
if (where < 0)
where = 0;
if (where < 0) {
where += self->ob_size;
if (where < 0)
where = 0;
}
if (where > self->ob_size)
where = self->ob_size;
memmove(items + (where+1)*self->ob_descr->itemsize,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment