[Python-3000-checkins] r51344 - in python/branches/p3yk: Lib/test/test_str.py Lib/test/test_unicode.py Objects/stringobject.c Objects/unicodeobject.c
guido.van.rossum
python-3000-checkins at python.org
Thu Aug 17 23:11:48 CEST 2006
Author: guido.van.rossum
Date: Thu Aug 17 23:11:47 2006
New Revision: 51344
Modified:
python/branches/p3yk/Lib/test/test_str.py
python/branches/p3yk/Lib/test/test_unicode.py
python/branches/p3yk/Objects/stringobject.c
python/branches/p3yk/Objects/unicodeobject.c
Log:
Make the it_index field in the str/unicode iterators Py_ssize_t's.
Test the new iterators on str/unicode.
Modified: python/branches/p3yk/Lib/test/test_str.py
==============================================================================
--- python/branches/p3yk/Lib/test/test_str.py (original)
+++ python/branches/p3yk/Lib/test/test_str.py Thu Aug 17 23:11:47 2006
@@ -19,6 +19,14 @@
string_tests.MixinStrUnicodeUserStringTest.test_formatting(self)
self.assertRaises(OverflowError, '%c'.__mod__, 0x1234)
+ def test_iterators(self):
+ # Make sure str objects have an __iter__ method
+ it = "abc".__iter__()
+ self.assertEqual(it.next(), "a")
+ self.assertEqual(it.next(), "b")
+ self.assertEqual(it.next(), "c")
+ self.assertRaises(StopIteration, it.next)
+
def test_conversion(self):
# Make sure __str__() behaves properly
class Foo0:
Modified: python/branches/p3yk/Lib/test/test_unicode.py
==============================================================================
--- python/branches/p3yk/Lib/test/test_unicode.py (original)
+++ python/branches/p3yk/Lib/test/test_unicode.py Thu Aug 17 23:11:47 2006
@@ -93,6 +93,14 @@
testrepr = repr(u''.join(map(unichr, xrange(256))))
self.assertEqual(testrepr, latin1repr)
+ def test_iterators(self):
+ # Make sure unicode objects have an __iter__ method
+ it = u"\u1111\u2222\u3333".__iter__()
+ self.assertEqual(it.next(), u"\u1111")
+ self.assertEqual(it.next(), u"\u2222")
+ self.assertEqual(it.next(), u"\u3333")
+ self.assertRaises(StopIteration, it.next)
+
def test_count(self):
string_tests.CommonTest.test_count(self)
# check mixed argument types
Modified: python/branches/p3yk/Objects/stringobject.c
==============================================================================
--- python/branches/p3yk/Objects/stringobject.c (original)
+++ python/branches/p3yk/Objects/stringobject.c Thu Aug 17 23:11:47 2006
@@ -4992,7 +4992,7 @@
typedef struct {
PyObject_HEAD
- long it_index;
+ Py_ssize_t it_index;
PyStringObject *it_seq; /* Set to NULL when iterator is exhausted */
} striterobject;
@@ -5024,7 +5024,8 @@
assert(PyString_Check(seq));
if (it->it_index < PyString_GET_SIZE(seq)) {
- item = PyString_FromStringAndSize(PyString_AS_STRING(seq)+it->it_index, 1);
+ item = PyString_FromStringAndSize(
+ PyString_AS_STRING(seq)+it->it_index, 1);
if (item != NULL)
++it->it_index;
return item;
@@ -5044,18 +5045,20 @@
return PyInt_FromSsize_t(len);
}
-PyDoc_STRVAR(length_hint_doc, "Private method returning an estimate of len(list(it)).");
+PyDoc_STRVAR(length_hint_doc,
+ "Private method returning an estimate of len(list(it)).");
static PyMethodDef striter_methods[] = {
- {"__length_hint__", (PyCFunction)striter_len, METH_NOARGS, length_hint_doc},
+ {"__length_hint__", (PyCFunction)striter_len, METH_NOARGS,
+ length_hint_doc},
{NULL, NULL} /* sentinel */
};
PyTypeObject PyStringIter_Type = {
PyObject_HEAD_INIT(&PyType_Type)
0, /* ob_size */
- "striterator", /* tp_name */
- sizeof(striterobject), /* tp_basicsize */
+ "striterator", /* tp_name */
+ sizeof(striterobject), /* tp_basicsize */
0, /* tp_itemsize */
/* methods */
(destructor)striter_dealloc, /* tp_dealloc */
Modified: python/branches/p3yk/Objects/unicodeobject.c
==============================================================================
--- python/branches/p3yk/Objects/unicodeobject.c (original)
+++ python/branches/p3yk/Objects/unicodeobject.c Thu Aug 17 23:11:47 2006
@@ -7969,7 +7969,7 @@
typedef struct {
PyObject_HEAD
- long it_index;
+ Py_ssize_t it_index;
PyUnicodeObject *it_seq; /* Set to NULL when iterator is exhausted */
} unicodeiterobject;
@@ -8001,7 +8001,8 @@
assert(PyUnicode_Check(seq));
if (it->it_index < PyUnicode_GET_SIZE(seq)) {
- item = PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(seq)+it->it_index, 1);
+ item = PyUnicode_FromUnicode(
+ PyUnicode_AS_UNICODE(seq)+it->it_index, 1);
if (item != NULL)
++it->it_index;
return item;
@@ -8024,7 +8025,8 @@
PyDoc_STRVAR(length_hint_doc, "Private method returning an estimate of len(list(it)).");
static PyMethodDef unicodeiter_methods[] = {
- {"__length_hint__", (PyCFunction)unicodeiter_len, METH_NOARGS, length_hint_doc},
+ {"__length_hint__", (PyCFunction)unicodeiter_len, METH_NOARGS,
+ length_hint_doc},
{NULL, NULL} /* sentinel */
};
@@ -8035,7 +8037,7 @@
sizeof(unicodeiterobject), /* tp_basicsize */
0, /* tp_itemsize */
/* methods */
- (destructor)unicodeiter_dealloc, /* tp_dealloc */
+ (destructor)unicodeiter_dealloc, /* tp_dealloc */
0, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
More information about the Python-3000-checkins
mailing list