diff options
Diffstat (limited to 'Lib/test/test_index.py')
-rw-r--r-- | Lib/test/test_index.py | 119 |
1 files changed, 25 insertions, 94 deletions
diff --git a/Lib/test/test_index.py b/Lib/test/test_index.py index a92b4428a32..7a94af1b0ad 100644 --- a/Lib/test/test_index.py +++ b/Lib/test/test_index.py @@ -1,15 +1,9 @@ import unittest -from test import test_support +from test import support import operator -from sys import maxint -maxsize = test_support.MAX_Py_ssize_t -minsize = -maxsize-1 +maxsize = support.MAX_Py_ssize_t -class oldstyle: - def __index__(self): - return self.ind - -class newstyle(object): +class newstyle: def __index__(self): return self.ind @@ -17,13 +11,9 @@ class TrapInt(int): def __index__(self): return self -class TrapLong(long): - def __index__(self): - return self - class BaseTestCase(unittest.TestCase): def setUp(self): - self.o = oldstyle() + self.o = newstyle() self.n = newstyle() def test_basic(self): @@ -46,18 +36,16 @@ class BaseTestCase(unittest.TestCase): self.o.ind = 4 self.n.ind = 5 self.assertEqual(6 .__index__(), 6) - self.assertEqual(-7L.__index__(), -7) + self.assertEqual(-7 .__index__(), -7) self.assertEqual(self.o.__index__(), 4) self.assertEqual(self.n.__index__(), 5) self.assertEqual(True.__index__(), 1) self.assertEqual(False.__index__(), 0) def test_subclasses(self): - r = range(10) + r = list(range(10)) self.assertEqual(r[TrapInt(5):TrapInt(10)], r[5:10]) - self.assertEqual(r[TrapLong(5):TrapLong(10)], r[5:10]) self.assertEqual(slice(TrapInt()).indices(0), (0,0,1)) - self.assertEqual(slice(TrapLong(0)).indices(0), (0,0,1)) def test_error(self): self.o.ind = 'dumb' @@ -72,9 +60,9 @@ class SeqTestCase(unittest.TestCase): # This test case isn't run directly. It just defines common tests # to the different sequence types below def setUp(self): - self.o = oldstyle() + self.o = newstyle() self.n = newstyle() - self.o2 = oldstyle() + self.o2 = newstyle() self.n2 = newstyle() def test_index(self): @@ -99,9 +87,6 @@ class SeqTestCase(unittest.TestCase): self.assertEqual(self.seq[:self.o], self.seq) self.assertEqual(self.seq[self.n:], self.seq[0:0]) self.assertEqual(self.seq[:self.n], self.seq) - if isinstance(self.seq, ClassicSeq): - return - # These tests fail for ClassicSeq (see bug #7532) self.o2.ind = -seqlen - 2 self.n2.ind = -int(seqlen * 1.5) self.assertEqual(self.seq[self.o2:], self.seq) @@ -129,7 +114,6 @@ class SeqTestCase(unittest.TestCase): def test_subclasses(self): self.assertEqual(self.seq[TrapInt()], self.seq[0]) - self.assertEqual(self.seq[TrapLong()], self.seq[0]) def test_error(self): self.o.ind = 'dumb' @@ -176,7 +160,7 @@ class ListTestCase(SeqTestCase): self.assertEqual(lst, [5, 6, 7, 8, 9, 11] * 3) -class _BaseSeq: +class NewSeq: def __init__(self, iterable): self._list = list(iterable) @@ -198,50 +182,31 @@ class _BaseSeq: return self._list[index] -class _GetSliceMixin: - - def __getslice__(self, i, j): - return self._list.__getslice__(i, j) - - -class ClassicSeq(_BaseSeq): pass -class NewSeq(_BaseSeq, object): pass -class ClassicSeqDeprecated(_GetSliceMixin, ClassicSeq): pass -class NewSeqDeprecated(_GetSliceMixin, NewSeq): pass - - class TupleTestCase(SeqTestCase): seq = (0,10,20,30,40,50) -class StringTestCase(SeqTestCase): - seq = "this is a test" - class ByteArrayTestCase(SeqTestCase): - seq = bytearray("this is a test") + seq = bytearray(b"this is a test") -class UnicodeTestCase(SeqTestCase): - seq = u"this is a test" +class BytesTestCase(SeqTestCase): + seq = b"this is a test" -class ClassicSeqTestCase(SeqTestCase): - seq = ClassicSeq((0,10,20,30,40,50)) +class StringTestCase(SeqTestCase): + seq = "this is a test" class NewSeqTestCase(SeqTestCase): seq = NewSeq((0,10,20,30,40,50)) -class ClassicSeqDeprecatedTestCase(SeqTestCase): - seq = ClassicSeqDeprecated((0,10,20,30,40,50)) -class NewSeqDeprecatedTestCase(SeqTestCase): - seq = NewSeqDeprecated((0,10,20,30,40,50)) +class RangeTestCase(unittest.TestCase): -class XRangeTestCase(unittest.TestCase): - - def test_xrange(self): + def test_range(self): n = newstyle() n.ind = 5 - self.assertEqual(xrange(1, 20)[n], 6) - self.assertEqual(xrange(1, 20).__getitem__(n), 6) + self.assertEqual(range(1, 20)[n], 6) + self.assertEqual(range(1, 20).__getitem__(n), 6) + class OverflowTestCase(unittest.TestCase): @@ -253,10 +218,10 @@ class OverflowTestCase(unittest.TestCase): self.assertEqual(self.pos.__index__(), self.pos) self.assertEqual(self.neg.__index__(), self.neg) - def _getitem_helper(self, base): - class GetItem(base): + def test_getitem(self): + class GetItem: def __len__(self): - return maxint # cannot return long here + assert False, "__len__ should not be invoked" def __getitem__(self, key): return key x = GetItem() @@ -267,57 +232,23 @@ class OverflowTestCase(unittest.TestCase): self.assertEqual(x[self.neg:self.pos:1].indices(maxsize), (0, maxsize, 1)) - def _getslice_helper_deprecated(self, base): - class GetItem(base): - def __len__(self): - return maxint # cannot return long here - def __getitem__(self, key): - return key - def __getslice__(self, i, j): - return i, j - x = GetItem() - self.assertEqual(x[self.pos], self.pos) - self.assertEqual(x[self.neg], self.neg) - self.assertEqual(x[self.neg:self.pos], (maxint+minsize, maxsize)) - self.assertEqual(x[self.neg:self.pos:1].indices(maxsize), - (0, maxsize, 1)) - - def test_getitem(self): - self._getitem_helper(object) - with test_support.check_py3k_warnings(): - self._getslice_helper_deprecated(object) - - def test_getitem_classic(self): - class Empty: pass - # XXX This test fails (see bug #7532) - #self._getitem_helper(Empty) - with test_support.check_py3k_warnings(): - self._getslice_helper_deprecated(Empty) - def test_sequence_repeat(self): self.assertRaises(OverflowError, lambda: "a" * self.pos) self.assertRaises(OverflowError, lambda: "a" * self.neg) def test_main(): - test_support.run_unittest( + support.run_unittest( BaseTestCase, ListTestCase, TupleTestCase, + BytesTestCase, ByteArrayTestCase, StringTestCase, - UnicodeTestCase, - ClassicSeqTestCase, NewSeqTestCase, - XRangeTestCase, + RangeTestCase, OverflowTestCase, ) - with test_support.check_py3k_warnings(): - test_support.run_unittest( - ClassicSeqDeprecatedTestCase, - NewSeqDeprecatedTestCase, - ) - if __name__ == "__main__": test_main() |