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 */
_______________________________________________
Python-3000-checkins mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000-checkins

Reply via email to