[Jython-checkins] jython (merge 2.5 -> default): Merge 2.5.

frank.wierzbicki jython-checkins at python.org
Fri Apr 13 23:08:26 CEST 2012


http://hg.python.org/jython/rev/15effb1ed703
changeset:   6579:15effb1ed703
parent:      6577:6bc032612d2e
parent:      6578:b0d1a8983efa
user:        Frank Wierzbicki <fwierzbicki at gmail.com>
date:        Fri Apr 13 13:44:31 2012 -0700
summary:
  Merge 2.5.

files:
  Lib/test/test_list_jy.py                       |  103 +++++++++-
  src/org/python/core/SequenceIndexDelegate.java |    2 +-
  2 files changed, 102 insertions(+), 3 deletions(-)


diff --git a/Lib/test/test_list_jy.py b/Lib/test/test_list_jy.py
--- a/Lib/test/test_list_jy.py
+++ b/Lib/test/test_list_jy.py
@@ -104,9 +104,108 @@
                 self.assert_(lst[1] in (1,10))
         self.run_threads(tester)
 
+class ExtendedSliceTestCase(unittest.TestCase):
+    '''Really thrash extended slice operations on list.'''
+    type2test = list
+
+    def test_extended_slice_delete(self):
+        # Based on list_tests.CommonTest.test_extendedslicing .
+        # In the cited test case, the stop value is nearly always the default
+        # (None), meaning the end of the list, and often the start value is too.
+        # This contributed to the release of http://bugs.jython.org/issue1873 .
+        # This is a supplementary test focused on correct stopping.
+
+        initial =                  [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13]
+        expected1 = self.type2test([ 0, 1, 2, 3, 4, 5,            10,11,12,13])
+        expected2 = self.type2test([ 0, 1, 2,    4,    6,    8,   10,   12,13])
+        expected4 = self.type2test([ 0, 1,    3, 4, 5,    7, 8, 9,   11,12,13])
+
+        # Positive step
+        a = self.type2test(initial)
+        del a[6:10:1]
+        self.assertEqual(a, expected1)
+        a = self.type2test(initial)
+        del a[3:13:2]
+        self.assertEqual(a, expected2)
+        a = self.type2test(initial)
+        del a[3:12:2]
+        self.assertEqual(a, expected2)
+        a = self.type2test(initial)
+        del a[2:11:4]
+        self.assertEqual(a, expected4)
+        a = self.type2test(initial)
+        del a[2::4]
+        self.assertEqual(a, expected4)
+
+        # Negative step (same results)
+        a = self.type2test(initial)
+        del a[9:5:-1]
+        self.assertEqual(a, expected1)
+        a = self.type2test(initial)
+        del a[11:1:-2]
+        self.assertEqual(a, expected2)
+        a = self.type2test(initial)
+        del a[11:2:-2]
+        self.assertEqual(a, expected2)
+        a = self.type2test(initial)
+        del a[10:1:-4]
+        self.assertEqual(a, expected4)
+        a = self.type2test(initial)
+        del a[10::-4]
+        self.assertEqual(a, expected4)
+
+    def test_extended_slice_assign(self):
+        # Based on list_tests.CommonTest.test_extendedslicing .
+        # In the cited test case, the stop value is nearly always the default.
+        # This is a supplementary test focused on correct stopping.
+
+        aa, bb, cc = 91, 92, 93
+        src = self.type2test([aa,bb,cc])
+        initial =                  [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13]
+        expected1 = self.type2test([ 0, 1, 2, 3, 4, 5,aa,bb,cc, 9,10,11,12,13])
+        expected2 = self.type2test([ 0, 1, 2,aa, 4,bb, 6,cc, 8, 9,10,11,12,13])
+        expected4 = self.type2test([ 0, 1,aa, 3, 4, 5,bb, 7, 8, 9,cc,11,12,13])
+
+        # Positive step
+        a = self.type2test(initial)
+        a[6:9:1] = src
+        self.assertEqual(a, expected1)
+        a = self.type2test(initial)
+        a[3:9:2] = src
+        self.assertEqual(a, expected2)
+        a = self.type2test(initial)
+        a[3:8:2] = src
+        self.assertEqual(a, expected2)
+        a = self.type2test(initial)
+        a[2:11:4] = src
+        self.assertEqual(a, expected4)
+        a = self.type2test(initial)
+        a[2::4] = src
+        self.assertEqual(a, expected4)
+
+        # Negative step (same results, as src is reversed)
+        src.reverse()
+        a = self.type2test(initial)
+        a[8:5:-1] = src
+        self.assertEqual(a, expected1)
+        a = self.type2test(initial)
+        a[7:2:-2] = src
+        self.assertEqual(a, expected2)
+        a = self.type2test(initial)
+        a[7:1:-2] = src
+        self.assertEqual(a, expected2)
+        a = self.type2test(initial)
+        a[10:1:-4] = src
+        self.assertEqual(a, expected4)
+        a = self.type2test(initial)
+        a[10::-4] = src
+        self.assertEqual(a, expected4)
+
+
 def test_main():
-    test_support.run_unittest(ListTestCase, ThreadSafetyTestCase)
-
+    test_support.run_unittest(ListTestCase,
+                              ThreadSafetyTestCase,
+                              ExtendedSliceTestCase)
 
 if __name__ == "__main__":
     test_main()
diff --git a/src/org/python/core/SequenceIndexDelegate.java b/src/org/python/core/SequenceIndexDelegate.java
--- a/src/org/python/core/SequenceIndexDelegate.java
+++ b/src/org/python/core/SequenceIndexDelegate.java
@@ -121,7 +121,7 @@
                 stop--;
             }
         } else if(step < 0) {
-            for(int i = start; i >= 0 && i >= stop; i += step) {
+            for(int i = start; i >= 0 && i > stop; i += step) {
                 delItem(i);
             }
         }

-- 
Repository URL: http://hg.python.org/jython


More information about the Jython-checkins mailing list