Mercurial > cpython-lru_cache-weakref
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 |
| 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 | 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 | 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 | 70 self.assertEqual(type(self.enum(self.seq)), self.enum) |
| 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 | 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 | 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 | 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 | 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 | 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 | 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 | 98 self.assertRaises(ZeroDivisionError, list, self.enum(E(self.seq))) |
| 99 | |
| 100 def test_argumentcheck(self): | |
| 101 self.assertRaises(TypeError, self.enum) # no arguments | |
| 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 | 105 |
|
62497
b663cf6bbe8b
mark implementation detail as such
Benjamin Peterson <benjamin@python.org>
parents:
61910
diff
changeset
|
106 @test_support.cpython_only |
| 29289 | 107 def test_tuple_reuse(self): |
| 108 # Tests an implementation detail where tuple is reused | |
| 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 | 120 class TestEmpty(EnumerateTestCase): |
| 121 | |
| 122 seq, res = '', [] | |
| 123 | |
| 124 class TestBig(EnumerateTestCase): | |
| 125 | |
| 126 seq = range(10,20000,2) | |
| 127 res = zip(range(20000), seq) | |
| 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 | 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 | 191 def test_bug1229429(self): |
| 192 # this bug was never in reversed, it was in | |
| 193 # PyObject_CallMethod, and reversed_new calls that sometimes. | |
| 194 if not hasattr(sys, "getrefcount"): | |
| 195 return | |
| 196 def f(): | |
| 197 pass | |
| 198 r = f.__reversed__ = object() | |
| 199 rc = sys.getrefcount(r) | |
| 200 for i in range(10): | |
| 201 try: | |
| 202 reversed(f) | |
| 203 except TypeError: | |
| 204 pass | |
| 205 else: | |
| 206 self.fail("non-callable __reversed__ didn't raise!") | |
| 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 | 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 | 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 | 245 |
| 246 # verify reference counting | |
| 247 if verbose and hasattr(sys, "gettotalrefcount"): | |
| 248 counts = [None] * 5 | |
| 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 | 251 counts[i] = sys.gettotalrefcount() |
| 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 | 255 test_main(verbose=True) |
