annotate Lib/test/test_enumerate.py @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents b36cb4602e21
children 2d330f7908e7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23285
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 import unittest
35225
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
2 import sys
23285
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
24364
aa0d2d51fbde Get rid of relative imports in all unittests. Now anything that
Barry Warsaw <barry@python.org>
parents: 23936
diff changeset
4 from test import test_support
23285
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 class G:
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 'Sequence using __getitem__'
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 def __init__(self, seqn):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 self.seqn = seqn
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 def __getitem__(self, i):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 return self.seqn[i]
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
12
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 class I:
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 'Sequence using iterator protocol'
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 def __init__(self, seqn):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 self.seqn = seqn
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 self.i = 0
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 def __iter__(self):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 return self
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 def next(self):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 if self.i >= len(self.seqn): raise StopIteration
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 v = self.seqn[self.i]
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 self.i += 1
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 return v
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
25
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 class Ig:
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 'Sequence using iterator protocol defined with a generator'
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 def __init__(self, seqn):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 self.seqn = seqn
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 self.i = 0
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 def __iter__(self):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 for val in self.seqn:
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 yield val
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
34
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 class X:
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 'Missing __getitem__ and __iter__'
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 def __init__(self, seqn):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 self.seqn = seqn
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 self.i = 0
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 def next(self):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 if self.i >= len(self.seqn): raise StopIteration
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 v = self.seqn[self.i]
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 self.i += 1
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 return v
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
45
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 class E:
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 'Test propagation of exceptions'
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 def __init__(self, seqn):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 self.seqn = seqn
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 self.i = 0
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 def __iter__(self):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 return self
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 def next(self):
33597
355b15e4a4da Use floor division operator.
Raymond Hettinger <python@rcn.com>
parents: 31635
diff changeset
54 3 // 0
23285
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
55
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 class N:
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 'Iterator missing next()'
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 def __init__(self, seqn):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 self.seqn = seqn
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 self.i = 0
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 def __iter__(self):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 return self
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
63
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 class EnumerateTestCase(unittest.TestCase):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
65
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 enum = enumerate
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
67 seq, res = 'abc', [(0,'a'), (1,'b'), (2,'c')]
23285
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
68
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 def test_basicfunction(self):
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
70 self.assertEqual(type(self.enum(self.seq)), self.enum)
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
71 e = self.enum(self.seq)
23285
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 self.assertEqual(iter(e), e)
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
73 self.assertEqual(list(self.enum(self.seq)), self.res)
23285
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 self.enum.__doc__
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
75
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 def test_getitemseqn(self):
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
77 self.assertEqual(list(self.enum(G(self.seq))), self.res)
23285
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 e = self.enum(G(''))
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 self.assertRaises(StopIteration, e.next)
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
80
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 def test_iteratorseqn(self):
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
82 self.assertEqual(list(self.enum(I(self.seq))), self.res)
23285
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 e = self.enum(I(''))
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 self.assertRaises(StopIteration, e.next)
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
85
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 def test_iteratorgenerator(self):
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
87 self.assertEqual(list(self.enum(Ig(self.seq))), self.res)
23285
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 e = self.enum(Ig(''))
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 self.assertRaises(StopIteration, e.next)
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
90
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 def test_noniterable(self):
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
92 self.assertRaises(TypeError, self.enum, X(self.seq))
23285
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
93
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 def test_illformediterable(self):
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
95 self.assertRaises(TypeError, list, self.enum(N(self.seq)))
23285
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
96
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 def test_exception_propagation(self):
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
98 self.assertRaises(ZeroDivisionError, list, self.enum(E(self.seq)))
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
99
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
100 def test_argumentcheck(self):
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
101 self.assertRaises(TypeError, self.enum) # no arguments
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
102 self.assertRaises(TypeError, self.enum, 1) # wrong type (not iterable)
46982
47692f6c815e #2831: add start argument to enumerate(). Patch by Scott Dial and me.
Georg Brandl <georg@python.org>
parents: 35636
diff changeset
103 self.assertRaises(TypeError, self.enum, 'abc', 'a') # wrong type
47692f6c815e #2831: add start argument to enumerate(). Patch by Scott Dial and me.
Georg Brandl <georg@python.org>
parents: 35636
diff changeset
104 self.assertRaises(TypeError, self.enum, 'abc', 2, 3) # too many arguments
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
105
62497
b663cf6bbe8b mark implementation detail as such
Benjamin Peterson <benjamin@python.org>
parents: 61910
diff changeset
106 @test_support.cpython_only
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
107 def test_tuple_reuse(self):
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
108 # Tests an implementation detail where tuple is reused
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
109 # whenever nothing else holds a reference to it
30929
54ff68e973ee * Migrate set() and frozenset() from the sandbox.
Raymond Hettinger <python@rcn.com>
parents: 30865
diff changeset
110 self.assertEqual(len(set(map(id, list(enumerate(self.seq))))), len(self.seq))
54ff68e973ee * Migrate set() and frozenset() from the sandbox.
Raymond Hettinger <python@rcn.com>
parents: 30865
diff changeset
111 self.assertEqual(len(set(map(id, enumerate(self.seq)))), min(1,len(self.seq)))
23285
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
112
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
113 class MyEnum(enumerate):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
114 pass
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
115
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 class SubclassTestCase(EnumerateTestCase):
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
117
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 enum = MyEnum
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
119
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
120 class TestEmpty(EnumerateTestCase):
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
121
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
122 seq, res = '', []
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
123
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
124 class TestBig(EnumerateTestCase):
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
125
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
126 seq = range(10,20000,2)
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
127 res = zip(range(20000), seq)
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
128
30865
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
129 class TestReversed(unittest.TestCase):
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
130
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
131 def test_simple(self):
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
132 class A:
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
133 def __getitem__(self, i):
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
134 if i < 5:
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
135 return str(i)
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
136 raise StopIteration
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
137 def __len__(self):
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
138 return 5
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
139 for data in 'abc', range(5), tuple(enumerate('abc')), A(), xrange(1,17,5):
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
140 self.assertEqual(list(data)[::-1], list(reversed(data)))
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
141 self.assertRaises(TypeError, reversed, {})
47096
5d1aff46cc0d Don't allow keyword arguments to reversed().
Georg Brandl <georg@python.org>
parents: 46982
diff changeset
142 # don't allow keyword arguments
5d1aff46cc0d Don't allow keyword arguments to reversed().
Georg Brandl <georg@python.org>
parents: 46982
diff changeset
143 self.assertRaises(TypeError, reversed, [], a=1)
30865
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
144
62499
3d3108ac22b2 this must be a typo
Benjamin Peterson <benjamin@python.org>
parents: 62497
diff changeset
145 def test_classic_class(self):
53951
30edd7f6101b *sigh* deal with instances correctly
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
146 class A:
30edd7f6101b *sigh* deal with instances correctly
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
147 def __reversed__(self):
30edd7f6101b *sigh* deal with instances correctly
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
148 return [2, 1]
30edd7f6101b *sigh* deal with instances correctly
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
149 self.assertEqual(list(reversed(A())), [2, 1])
30edd7f6101b *sigh* deal with instances correctly
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
150
30865
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
151 def test_xrange_optimization(self):
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
152 x = xrange(1)
41c4e143e6e6 Implement and apply PEP 322, reverse iteration
Raymond Hettinger <python@rcn.com>
parents: 29304
diff changeset
153 self.assertEqual(type(reversed(x)), type(iter(x)))
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
154
62501
a34fd6f81651 mark implementation detail as such
Benjamin Peterson <benjamin@python.org>
parents: 62499
diff changeset
155 @test_support.cpython_only
31502
59538d3b7cd2 Make reversed() transparent with respect to length.
Raymond Hettinger <python@rcn.com>
parents: 31478
diff changeset
156 def test_len(self):
31634
ec6ba03ba962 Eliminate the double reverse option. It's only use case
Raymond Hettinger <python@rcn.com>
parents: 31502
diff changeset
157 # This is an implementation detail, not an interface requirement
35636
e22334b1da67 Convert iterator __len__() methods to a private API.
Raymond Hettinger <python@rcn.com>
parents: 35253
diff changeset
158 from test.test_iterlen import len
31635
04eb2ebb46e2 Tidied up the implementations of reversed (including the custom ones
Raymond Hettinger <python@rcn.com>
parents: 31634
diff changeset
159 for s in ('hello', tuple('hello'), list('hello'), xrange(5)):
04eb2ebb46e2 Tidied up the implementations of reversed (including the custom ones
Raymond Hettinger <python@rcn.com>
parents: 31634
diff changeset
160 self.assertEqual(len(reversed(s)), len(s))
33624
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
161 r = reversed(s)
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
162 list(r)
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
163 self.assertEqual(len(r), 0)
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
164 class SeqWithWeirdLen:
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
165 called = False
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
166 def __len__(self):
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
167 if not self.called:
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
168 self.called = True
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
169 return 10
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
170 raise ZeroDivisionError
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
171 def __getitem__(self, index):
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
172 return index
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
173 r = reversed(SeqWithWeirdLen())
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
174 self.assertRaises(ZeroDivisionError, len, r)
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
175
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
176
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
177 def test_gc(self):
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
178 class Seq:
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
179 def __len__(self):
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
180 return 10
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
181 def __getitem__(self, index):
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
182 return index
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
183 s = Seq()
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
184 r = reversed(s)
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
185 s.r = r
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
186
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
187 def test_args(self):
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
188 self.assertRaises(TypeError, reversed)
5730f77e37e4 Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents: 33597
diff changeset
189 self.assertRaises(TypeError, reversed, [], 'extra')
31502
59538d3b7cd2 Make reversed() transparent with respect to length.
Raymond Hettinger <python@rcn.com>
parents: 31478
diff changeset
190
35225
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
191 def test_bug1229429(self):
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
192 # this bug was never in reversed, it was in
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
193 # PyObject_CallMethod, and reversed_new calls that sometimes.
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
194 if not hasattr(sys, "getrefcount"):
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
195 return
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
196 def f():
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
197 pass
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
198 r = f.__reversed__ = object()
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
199 rc = sys.getrefcount(r)
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
200 for i in range(10):
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
201 try:
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
202 reversed(f)
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
203 except TypeError:
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
204 pass
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
205 else:
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
206 self.fail("non-callable __reversed__ didn't raise!")
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
207 self.assertEqual(rc, sys.getrefcount(r))
35253
32de7a8d886c Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 35225
diff changeset
208
61908
8ac3d527745c Issue #8816: Extra tests for some built-in functions. These tests are
Mark Dickinson <dickinsm@gmail.com>
parents: 61425
diff changeset
209 def test_objmethods(self):
8ac3d527745c Issue #8816: Extra tests for some built-in functions. These tests are
Mark Dickinson <dickinsm@gmail.com>
parents: 61425
diff changeset
210 # Objects must have __len__() and __getitem__() implemented.
8ac3d527745c Issue #8816: Extra tests for some built-in functions. These tests are
Mark Dickinson <dickinsm@gmail.com>
parents: 61425
diff changeset
211 class NoLen(object):
8ac3d527745c Issue #8816: Extra tests for some built-in functions. These tests are
Mark Dickinson <dickinsm@gmail.com>
parents: 61425
diff changeset
212 def __getitem__(self): return 1
8ac3d527745c Issue #8816: Extra tests for some built-in functions. These tests are
Mark Dickinson <dickinsm@gmail.com>
parents: 61425
diff changeset
213 nl = NoLen()
8ac3d527745c Issue #8816: Extra tests for some built-in functions. These tests are
Mark Dickinson <dickinsm@gmail.com>
parents: 61425
diff changeset
214 self.assertRaises(TypeError, reversed, nl)
8ac3d527745c Issue #8816: Extra tests for some built-in functions. These tests are
Mark Dickinson <dickinsm@gmail.com>
parents: 61425
diff changeset
215
8ac3d527745c Issue #8816: Extra tests for some built-in functions. These tests are
Mark Dickinson <dickinsm@gmail.com>
parents: 61425
diff changeset
216 class NoGetItem(object):
8ac3d527745c Issue #8816: Extra tests for some built-in functions. These tests are
Mark Dickinson <dickinsm@gmail.com>
parents: 61425
diff changeset
217 def __len__(self): return 2
8ac3d527745c Issue #8816: Extra tests for some built-in functions. These tests are
Mark Dickinson <dickinsm@gmail.com>
parents: 61425
diff changeset
218 ngi = NoGetItem()
8ac3d527745c Issue #8816: Extra tests for some built-in functions. These tests are
Mark Dickinson <dickinsm@gmail.com>
parents: 61425
diff changeset
219 self.assertRaises(TypeError, reversed, ngi)
8ac3d527745c Issue #8816: Extra tests for some built-in functions. These tests are
Mark Dickinson <dickinsm@gmail.com>
parents: 61425
diff changeset
220
35225
Michael W. Hudson <mwh@python.net>
parents: 33624
diff changeset
221
61428
24ec72594196 Merged revisions 80991 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
222 class EnumerateStartTestCase(EnumerateTestCase):
46982
47692f6c815e #2831: add start argument to enumerate(). Patch by Scott Dial and me.
Georg Brandl <georg@python.org>
parents: 35636
diff changeset
223
61428
24ec72594196 Merged revisions 80991 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
224 def test_basicfunction(self):
24ec72594196 Merged revisions 80991 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
225 e = self.enum(self.seq)
24ec72594196 Merged revisions 80991 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
226 self.assertEqual(iter(e), e)
24ec72594196 Merged revisions 80991 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
227 self.assertEqual(list(self.enum(self.seq)), self.res)
46982
47692f6c815e #2831: add start argument to enumerate(). Patch by Scott Dial and me.
Georg Brandl <georg@python.org>
parents: 35636
diff changeset
228
47692f6c815e #2831: add start argument to enumerate(). Patch by Scott Dial and me.
Georg Brandl <georg@python.org>
parents: 35636
diff changeset
229
61428
24ec72594196 Merged revisions 80991 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
230 class TestStart(EnumerateStartTestCase):
24ec72594196 Merged revisions 80991 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
231
24ec72594196 Merged revisions 80991 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
232 enum = lambda self, i: enumerate(i, start=11)
24ec72594196 Merged revisions 80991 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
233 seq, res = 'abc', [(11, 'a'), (12, 'b'), (13, 'c')]
46982
47692f6c815e #2831: add start argument to enumerate(). Patch by Scott Dial and me.
Georg Brandl <georg@python.org>
parents: 35636
diff changeset
234
61428
24ec72594196 Merged revisions 80991 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
235
24ec72594196 Merged revisions 80991 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
236 class TestLongStart(EnumerateStartTestCase):
24ec72594196 Merged revisions 80991 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
237
24ec72594196 Merged revisions 80991 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
238 enum = lambda self, i: enumerate(i, start=sys.maxint+1)
46982
47692f6c815e #2831: add start argument to enumerate(). Patch by Scott Dial and me.
Georg Brandl <georg@python.org>
parents: 35636
diff changeset
239 seq, res = 'abc', [(sys.maxint+1,'a'), (sys.maxint+2,'b'),
47692f6c815e #2831: add start argument to enumerate(). Patch by Scott Dial and me.
Georg Brandl <georg@python.org>
parents: 35636
diff changeset
240 (sys.maxint+3,'c')]
47692f6c815e #2831: add start argument to enumerate(). Patch by Scott Dial and me.
Georg Brandl <georg@python.org>
parents: 35636
diff changeset
241
47692f6c815e #2831: add start argument to enumerate(). Patch by Scott Dial and me.
Georg Brandl <georg@python.org>
parents: 35636
diff changeset
242
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
243 def test_main(verbose=None):
61428
24ec72594196 Merged revisions 80991 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47096
diff changeset
244 test_support.run_unittest(__name__)
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
245
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
246 # verify reference counting
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
247 if verbose and hasattr(sys, "gettotalrefcount"):
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
248 counts = [None] * 5
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
249 for i in xrange(len(counts)):
61912
55dc9ef15ab1 Merged revisions 81527 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61428
diff changeset
250 test_support.run_unittest(__name__)
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
251 counts[i] = sys.gettotalrefcount()
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
252 print counts
23285
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
253
afe263672fd8 - New builtin function enumerate(x), from PEP 279. Example:
Guido van Rossum <guido@python.org>
parents:
diff changeset
254 if __name__ == "__main__":
29289
811ad5f2f701 * Beefed-up tests
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
255 test_main(verbose=True)