Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
686eaeb0
Commit
686eaeb0
authored
Mar 28, 2006
by
Georg Brandl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make test_coercion pass with -Qnew. Converted to unittest on the occasion.
parent
4054b972
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
242 additions
and
1136 deletions
+242
-1136
Lib/test/output/test_coercion
Lib/test/output/test_coercion
+0
-1054
Lib/test/test_coercion.py
Lib/test/test_coercion.py
+242
-82
No files found.
Lib/test/output/test_coercion
deleted
100644 → 0
View file @
4054b972
test_coercion
2 + 2 = 4
2 += 2 => 4
2 - 2 = 0
2 -= 2 => 0
2 * 2 = 4
2 *= 2 => 4
2 / 2 = 1
2 /= 2 => 1
2 ** 2 = 4
2 **= 2 => 4
2 % 2 = 0
2 %= 2 => 0
2 + 4.0 = 6.0
2 += 4.0 => 6.0
2 - 4.0 = -2.0
2 -= 4.0 => -2.0
2 * 4.0 = 8.0
2 *= 4.0 => 8.0
2 / 4.0 = 0.5
2 /= 4.0 => 0.5
2 ** 4.0 = 16.0
2 **= 4.0 => 16.0
2 % 4.0 = 2.0
2 %= 4.0 => 2.0
2 + 2 = 4
2 += 2 => 4
2 - 2 = 0
2 -= 2 => 0
2 * 2 = 4
2 *= 2 => 4
2 / 2 = 1
2 /= 2 => 1
2 ** 2 = 4
2 **= 2 => 4
2 % 2 = 0
2 %= 2 => 0
2 + (2+0j) = (4.0 + 0.0j)
2 += (2+0j) => (4.0 + 0.0j)
2 - (2+0j) = (0.0 + 0.0j)
2 -= (2+0j) => (0.0 + 0.0j)
2 * (2+0j) = (4.0 + 0.0j)
2 *= (2+0j) => (4.0 + 0.0j)
2 / (2+0j) = (1.0 + 0.0j)
2 /= (2+0j) => (1.0 + 0.0j)
2 ** (2+0j) = (4.0 + 0.0j)
2 **= (2+0j) => (4.0 + 0.0j)
2 % (2+0j) = (0.0 + 0.0j)
2 %= (2+0j) => (0.0 + 0.0j)
2 + [1] ... exceptions.TypeError
2 += [1] ... exceptions.TypeError
2 - [1] ... exceptions.TypeError
2 -= [1] ... exceptions.TypeError
2 * [1] = [1, 1]
2 *= [1] => [1, 1]
2 / [1] ... exceptions.TypeError
2 /= [1] ... exceptions.TypeError
2 ** [1] ... exceptions.TypeError
2 **= [1] ... exceptions.TypeError
2 % [1] ... exceptions.TypeError
2 %= [1] ... exceptions.TypeError
2 + (2,) ... exceptions.TypeError
2 += (2,) ... exceptions.TypeError
2 - (2,) ... exceptions.TypeError
2 -= (2,) ... exceptions.TypeError
2 * (2,) = (2, 2)
2 *= (2,) => (2, 2)
2 / (2,) ... exceptions.TypeError
2 /= (2,) ... exceptions.TypeError
2 ** (2,) ... exceptions.TypeError
2 **= (2,) ... exceptions.TypeError
2 % (2,) ... exceptions.TypeError
2 %= (2,) ... exceptions.TypeError
2 + None ... exceptions.TypeError
2 += None ... exceptions.TypeError
2 - None ... exceptions.TypeError
2 -= None ... exceptions.TypeError
2 * None ... exceptions.TypeError
2 *= None ... exceptions.TypeError
2 / None ... exceptions.TypeError
2 /= None ... exceptions.TypeError
2 ** None ... exceptions.TypeError
2 **= None ... exceptions.TypeError
2 % None ... exceptions.TypeError
2 %= None ... exceptions.TypeError
2 + <MethodNumber 2> = 4
2 += <MethodNumber 2> => 4
2 - <MethodNumber 2> = 0
2 -= <MethodNumber 2> => 0
2 * <MethodNumber 2> = 4
2 *= <MethodNumber 2> => 4
2 / <MethodNumber 2> = 1
2 /= <MethodNumber 2> => 1
2 ** <MethodNumber 2> = 4
2 **= <MethodNumber 2> => 4
2 % <MethodNumber 2> = 0
2 %= <MethodNumber 2> => 0
2 + <CoerceNumber 2> = 4
2 += <CoerceNumber 2> => 4
2 - <CoerceNumber 2> = 0
2 -= <CoerceNumber 2> => 0
2 * <CoerceNumber 2> = 4
2 *= <CoerceNumber 2> => 4
2 / <CoerceNumber 2> = 1
2 /= <CoerceNumber 2> => 1
2 ** <CoerceNumber 2> = 4
2 **= <CoerceNumber 2> => 4
2 % <CoerceNumber 2> = 0
2 %= <CoerceNumber 2> => 0
4.0 + 2 = 6.0
4.0 += 2 => 6.0
4.0 - 2 = 2.0
4.0 -= 2 => 2.0
4.0 * 2 = 8.0
4.0 *= 2 => 8.0
4.0 / 2 = 2.0
4.0 /= 2 => 2.0
4.0 ** 2 = 16.0
4.0 **= 2 => 16.0
4.0 % 2 = 0.0
4.0 %= 2 => 0.0
4.0 + 4.0 = 8.0
4.0 += 4.0 => 8.0
4.0 - 4.0 = 0.0
4.0 -= 4.0 => 0.0
4.0 * 4.0 = 16.0
4.0 *= 4.0 => 16.0
4.0 / 4.0 = 1.0
4.0 /= 4.0 => 1.0
4.0 ** 4.0 = 256.0
4.0 **= 4.0 => 256.0
4.0 % 4.0 = 0.0
4.0 %= 4.0 => 0.0
4.0 + 2 = 6.0
4.0 += 2 => 6.0
4.0 - 2 = 2.0
4.0 -= 2 => 2.0
4.0 * 2 = 8.0
4.0 *= 2 => 8.0
4.0 / 2 = 2.0
4.0 /= 2 => 2.0
4.0 ** 2 = 16.0
4.0 **= 2 => 16.0
4.0 % 2 = 0.0
4.0 %= 2 => 0.0
4.0 + (2+0j) = (6.0 + 0.0j)
4.0 += (2+0j) => (6.0 + 0.0j)
4.0 - (2+0j) = (2.0 + 0.0j)
4.0 -= (2+0j) => (2.0 + 0.0j)
4.0 * (2+0j) = (8.0 + 0.0j)
4.0 *= (2+0j) => (8.0 + 0.0j)
4.0 / (2+0j) = (2.0 + 0.0j)
4.0 /= (2+0j) => (2.0 + 0.0j)
4.0 ** (2+0j) = (16.0 + 0.0j)
4.0 **= (2+0j) => (16.0 + 0.0j)
4.0 % (2+0j) = (0.0 + 0.0j)
4.0 %= (2+0j) => (0.0 + 0.0j)
4.0 + [1] ... exceptions.TypeError
4.0 += [1] ... exceptions.TypeError
4.0 - [1] ... exceptions.TypeError
4.0 -= [1] ... exceptions.TypeError
4.0 * [1] ... exceptions.TypeError
4.0 *= [1] ... exceptions.TypeError
4.0 / [1] ... exceptions.TypeError
4.0 /= [1] ... exceptions.TypeError
4.0 ** [1] ... exceptions.TypeError
4.0 **= [1] ... exceptions.TypeError
4.0 % [1] ... exceptions.TypeError
4.0 %= [1] ... exceptions.TypeError
4.0 + (2,) ... exceptions.TypeError
4.0 += (2,) ... exceptions.TypeError
4.0 - (2,) ... exceptions.TypeError
4.0 -= (2,) ... exceptions.TypeError
4.0 * (2,) ... exceptions.TypeError
4.0 *= (2,) ... exceptions.TypeError
4.0 / (2,) ... exceptions.TypeError
4.0 /= (2,) ... exceptions.TypeError
4.0 ** (2,) ... exceptions.TypeError
4.0 **= (2,) ... exceptions.TypeError
4.0 % (2,) ... exceptions.TypeError
4.0 %= (2,) ... exceptions.TypeError
4.0 + None ... exceptions.TypeError
4.0 += None ... exceptions.TypeError
4.0 - None ... exceptions.TypeError
4.0 -= None ... exceptions.TypeError
4.0 * None ... exceptions.TypeError
4.0 *= None ... exceptions.TypeError
4.0 / None ... exceptions.TypeError
4.0 /= None ... exceptions.TypeError
4.0 ** None ... exceptions.TypeError
4.0 **= None ... exceptions.TypeError
4.0 % None ... exceptions.TypeError
4.0 %= None ... exceptions.TypeError
4.0 + <MethodNumber 2> = 6.0
4.0 += <MethodNumber 2> => 6.0
4.0 - <MethodNumber 2> = 2.0
4.0 -= <MethodNumber 2> => 2.0
4.0 * <MethodNumber 2> = 8.0
4.0 *= <MethodNumber 2> => 8.0
4.0 / <MethodNumber 2> = 2.0
4.0 /= <MethodNumber 2> => 2.0
4.0 ** <MethodNumber 2> = 16.0
4.0 **= <MethodNumber 2> => 16.0
4.0 % <MethodNumber 2> = 0.0
4.0 %= <MethodNumber 2> => 0.0
4.0 + <CoerceNumber 2> = 6.0
4.0 += <CoerceNumber 2> => 6.0
4.0 - <CoerceNumber 2> = 2.0
4.0 -= <CoerceNumber 2> => 2.0
4.0 * <CoerceNumber 2> = 8.0
4.0 *= <CoerceNumber 2> => 8.0
4.0 / <CoerceNumber 2> = 2.0
4.0 /= <CoerceNumber 2> => 2.0
4.0 ** <CoerceNumber 2> = 16.0
4.0 **= <CoerceNumber 2> => 16.0
4.0 % <CoerceNumber 2> = 0.0
4.0 %= <CoerceNumber 2> => 0.0
2 + 2 = 4
2 += 2 => 4
2 - 2 = 0
2 -= 2 => 0
2 * 2 = 4
2 *= 2 => 4
2 / 2 = 1
2 /= 2 => 1
2 ** 2 = 4
2 **= 2 => 4
2 % 2 = 0
2 %= 2 => 0
2 + 4.0 = 6.0
2 += 4.0 => 6.0
2 - 4.0 = -2.0
2 -= 4.0 => -2.0
2 * 4.0 = 8.0
2 *= 4.0 => 8.0
2 / 4.0 = 0.5
2 /= 4.0 => 0.5
2 ** 4.0 = 16.0
2 **= 4.0 => 16.0
2 % 4.0 = 2.0
2 %= 4.0 => 2.0
2 + 2 = 4
2 += 2 => 4
2 - 2 = 0
2 -= 2 => 0
2 * 2 = 4
2 *= 2 => 4
2 / 2 = 1
2 /= 2 => 1
2 ** 2 = 4
2 **= 2 => 4
2 % 2 = 0
2 %= 2 => 0
2 + (2+0j) = (4.0 + 0.0j)
2 += (2+0j) => (4.0 + 0.0j)
2 - (2+0j) = (0.0 + 0.0j)
2 -= (2+0j) => (0.0 + 0.0j)
2 * (2+0j) = (4.0 + 0.0j)
2 *= (2+0j) => (4.0 + 0.0j)
2 / (2+0j) = (1.0 + 0.0j)
2 /= (2+0j) => (1.0 + 0.0j)
2 ** (2+0j) = (4.0 + 0.0j)
2 **= (2+0j) => (4.0 + 0.0j)
2 % (2+0j) = (0.0 + 0.0j)
2 %= (2+0j) => (0.0 + 0.0j)
2 + [1] ... exceptions.TypeError
2 += [1] ... exceptions.TypeError
2 - [1] ... exceptions.TypeError
2 -= [1] ... exceptions.TypeError
2 * [1] = [1, 1]
2 *= [1] => [1, 1]
2 / [1] ... exceptions.TypeError
2 /= [1] ... exceptions.TypeError
2 ** [1] ... exceptions.TypeError
2 **= [1] ... exceptions.TypeError
2 % [1] ... exceptions.TypeError
2 %= [1] ... exceptions.TypeError
2 + (2,) ... exceptions.TypeError
2 += (2,) ... exceptions.TypeError
2 - (2,) ... exceptions.TypeError
2 -= (2,) ... exceptions.TypeError
2 * (2,) = (2, 2)
2 *= (2,) => (2, 2)
2 / (2,) ... exceptions.TypeError
2 /= (2,) ... exceptions.TypeError
2 ** (2,) ... exceptions.TypeError
2 **= (2,) ... exceptions.TypeError
2 % (2,) ... exceptions.TypeError
2 %= (2,) ... exceptions.TypeError
2 + None ... exceptions.TypeError
2 += None ... exceptions.TypeError
2 - None ... exceptions.TypeError
2 -= None ... exceptions.TypeError
2 * None ... exceptions.TypeError
2 *= None ... exceptions.TypeError
2 / None ... exceptions.TypeError
2 /= None ... exceptions.TypeError
2 ** None ... exceptions.TypeError
2 **= None ... exceptions.TypeError
2 % None ... exceptions.TypeError
2 %= None ... exceptions.TypeError
2 + <MethodNumber 2> = 4
2 += <MethodNumber 2> => 4
2 - <MethodNumber 2> = 0
2 -= <MethodNumber 2> => 0
2 * <MethodNumber 2> = 4
2 *= <MethodNumber 2> => 4
2 / <MethodNumber 2> = 1
2 /= <MethodNumber 2> => 1
2 ** <MethodNumber 2> = 4
2 **= <MethodNumber 2> => 4
2 % <MethodNumber 2> = 0
2 %= <MethodNumber 2> => 0
2 + <CoerceNumber 2> = 4
2 += <CoerceNumber 2> => 4
2 - <CoerceNumber 2> = 0
2 -= <CoerceNumber 2> => 0
2 * <CoerceNumber 2> = 4
2 *= <CoerceNumber 2> => 4
2 / <CoerceNumber 2> = 1
2 /= <CoerceNumber 2> => 1
2 ** <CoerceNumber 2> = 4
2 **= <CoerceNumber 2> => 4
2 % <CoerceNumber 2> = 0
2 %= <CoerceNumber 2> => 0
(2+0j) + 2 = (4.0 + 0.0j)
(2+0j) += 2 => (4.0 + 0.0j)
(2+0j) - 2 = (0.0 + 0.0j)
(2+0j) -= 2 => (0.0 + 0.0j)
(2+0j) * 2 = (4.0 + 0.0j)
(2+0j) *= 2 => (4.0 + 0.0j)
(2+0j) / 2 = (1.0 + 0.0j)
(2+0j) /= 2 => (1.0 + 0.0j)
(2+0j) ** 2 = (4.0 + 0.0j)
(2+0j) **= 2 => (4.0 + 0.0j)
(2+0j) % 2 = (0.0 + 0.0j)
(2+0j) %= 2 => (0.0 + 0.0j)
(2+0j) + 4.0 = (6.0 + 0.0j)
(2+0j) += 4.0 => (6.0 + 0.0j)
(2+0j) - 4.0 = (-2.0 + 0.0j)
(2+0j) -= 4.0 => (-2.0 + 0.0j)
(2+0j) * 4.0 = (8.0 + 0.0j)
(2+0j) *= 4.0 => (8.0 + 0.0j)
(2+0j) / 4.0 = (0.5 + 0.0j)
(2+0j) /= 4.0 => (0.5 + 0.0j)
(2+0j) ** 4.0 = (16.0 + 0.0j)
(2+0j) **= 4.0 => (16.0 + 0.0j)
(2+0j) % 4.0 = (2.0 + 0.0j)
(2+0j) %= 4.0 => (2.0 + 0.0j)
(2+0j) + 2 = (4.0 + 0.0j)
(2+0j) += 2 => (4.0 + 0.0j)
(2+0j) - 2 = (0.0 + 0.0j)
(2+0j) -= 2 => (0.0 + 0.0j)
(2+0j) * 2 = (4.0 + 0.0j)
(2+0j) *= 2 => (4.0 + 0.0j)
(2+0j) / 2 = (1.0 + 0.0j)
(2+0j) /= 2 => (1.0 + 0.0j)
(2+0j) ** 2 = (4.0 + 0.0j)
(2+0j) **= 2 => (4.0 + 0.0j)
(2+0j) % 2 = (0.0 + 0.0j)
(2+0j) %= 2 => (0.0 + 0.0j)
(2+0j) + (2+0j) = (4.0 + 0.0j)
(2+0j) += (2+0j) => (4.0 + 0.0j)
(2+0j) - (2+0j) = (0.0 + 0.0j)
(2+0j) -= (2+0j) => (0.0 + 0.0j)
(2+0j) * (2+0j) = (4.0 + 0.0j)
(2+0j) *= (2+0j) => (4.0 + 0.0j)
(2+0j) / (2+0j) = (1.0 + 0.0j)
(2+0j) /= (2+0j) => (1.0 + 0.0j)
(2+0j) ** (2+0j) = (4.0 + 0.0j)
(2+0j) **= (2+0j) => (4.0 + 0.0j)
(2+0j) % (2+0j) = (0.0 + 0.0j)
(2+0j) %= (2+0j) => (0.0 + 0.0j)
(2+0j) + [1] ... exceptions.TypeError
(2+0j) += [1] ... exceptions.TypeError
(2+0j) - [1] ... exceptions.TypeError
(2+0j) -= [1] ... exceptions.TypeError
(2+0j) * [1] ... exceptions.TypeError
(2+0j) *= [1] ... exceptions.TypeError
(2+0j) / [1] ... exceptions.TypeError
(2+0j) /= [1] ... exceptions.TypeError
(2+0j) ** [1] ... exceptions.TypeError
(2+0j) **= [1] ... exceptions.TypeError
(2+0j) % [1] ... exceptions.TypeError
(2+0j) %= [1] ... exceptions.TypeError
(2+0j) + (2,) ... exceptions.TypeError
(2+0j) += (2,) ... exceptions.TypeError
(2+0j) - (2,) ... exceptions.TypeError
(2+0j) -= (2,) ... exceptions.TypeError
(2+0j) * (2,) ... exceptions.TypeError
(2+0j) *= (2,) ... exceptions.TypeError
(2+0j) / (2,) ... exceptions.TypeError
(2+0j) /= (2,) ... exceptions.TypeError
(2+0j) ** (2,) ... exceptions.TypeError
(2+0j) **= (2,) ... exceptions.TypeError
(2+0j) % (2,) ... exceptions.TypeError
(2+0j) %= (2,) ... exceptions.TypeError
(2+0j) + None ... exceptions.TypeError
(2+0j) += None ... exceptions.TypeError
(2+0j) - None ... exceptions.TypeError
(2+0j) -= None ... exceptions.TypeError
(2+0j) * None ... exceptions.TypeError
(2+0j) *= None ... exceptions.TypeError
(2+0j) / None ... exceptions.TypeError
(2+0j) /= None ... exceptions.TypeError
(2+0j) ** None ... exceptions.TypeError
(2+0j) **= None ... exceptions.TypeError
(2+0j) % None ... exceptions.TypeError
(2+0j) %= None ... exceptions.TypeError
(2+0j) + <MethodNumber 2> = (4.0 + 0.0j)
(2+0j) += <MethodNumber 2> => (4.0 + 0.0j)
(2+0j) - <MethodNumber 2> = (0.0 + 0.0j)
(2+0j) -= <MethodNumber 2> => (0.0 + 0.0j)
(2+0j) * <MethodNumber 2> = (4.0 + 0.0j)
(2+0j) *= <MethodNumber 2> => (4.0 + 0.0j)
(2+0j) / <MethodNumber 2> = (1.0 + 0.0j)
(2+0j) /= <MethodNumber 2> => (1.0 + 0.0j)
(2+0j) ** <MethodNumber 2> = (4.0 + 0.0j)
(2+0j) **= <MethodNumber 2> => (4.0 + 0.0j)
(2+0j) % <MethodNumber 2> = (0.0 + 0.0j)
(2+0j) %= <MethodNumber 2> => (0.0 + 0.0j)
(2+0j) + <CoerceNumber 2> = (4.0 + 0.0j)
(2+0j) += <CoerceNumber 2> => (4.0 + 0.0j)
(2+0j) - <CoerceNumber 2> = (0.0 + 0.0j)
(2+0j) -= <CoerceNumber 2> => (0.0 + 0.0j)
(2+0j) * <CoerceNumber 2> = (4.0 + 0.0j)
(2+0j) *= <CoerceNumber 2> => (4.0 + 0.0j)
(2+0j) / <CoerceNumber 2> = (1.0 + 0.0j)
(2+0j) /= <CoerceNumber 2> => (1.0 + 0.0j)
(2+0j) ** <CoerceNumber 2> = (4.0 + 0.0j)
(2+0j) **= <CoerceNumber 2> => (4.0 + 0.0j)
(2+0j) % <CoerceNumber 2> = (0.0 + 0.0j)
(2+0j) %= <CoerceNumber 2> => (0.0 + 0.0j)
[1] + 2 ... exceptions.TypeError
[1] += 2 ... exceptions.TypeError
[1] - 2 ... exceptions.TypeError
[1] -= 2 ... exceptions.TypeError
[1] * 2 = [1, 1]
[1] *= 2 => [1, 1]
[1] / 2 ... exceptions.TypeError
[1] /= 2 ... exceptions.TypeError
[1] ** 2 ... exceptions.TypeError
[1] **= 2 ... exceptions.TypeError
[1] % 2 ... exceptions.TypeError
[1] %= 2 ... exceptions.TypeError
[1] + 4.0 ... exceptions.TypeError
[1] += 4.0 ... exceptions.TypeError
[1] - 4.0 ... exceptions.TypeError
[1] -= 4.0 ... exceptions.TypeError
[1] * 4.0 ... exceptions.TypeError
[1] *= 4.0 ... exceptions.TypeError
[1] / 4.0 ... exceptions.TypeError
[1] /= 4.0 ... exceptions.TypeError
[1] ** 4.0 ... exceptions.TypeError
[1] **= 4.0 ... exceptions.TypeError
[1] % 4.0 ... exceptions.TypeError
[1] %= 4.0 ... exceptions.TypeError
[1] + 2 ... exceptions.TypeError
[1] += 2 ... exceptions.TypeError
[1] - 2 ... exceptions.TypeError
[1] -= 2 ... exceptions.TypeError
[1] * 2 = [1, 1]
[1] *= 2 => [1, 1]
[1] / 2 ... exceptions.TypeError
[1] /= 2 ... exceptions.TypeError
[1] ** 2 ... exceptions.TypeError
[1] **= 2 ... exceptions.TypeError
[1] % 2 ... exceptions.TypeError
[1] %= 2 ... exceptions.TypeError
[1] + (2+0j) ... exceptions.TypeError
[1] += (2+0j) ... exceptions.TypeError
[1] - (2+0j) ... exceptions.TypeError
[1] -= (2+0j) ... exceptions.TypeError
[1] * (2+0j) ... exceptions.TypeError
[1] *= (2+0j) ... exceptions.TypeError
[1] / (2+0j) ... exceptions.TypeError
[1] /= (2+0j) ... exceptions.TypeError
[1] ** (2+0j) ... exceptions.TypeError
[1] **= (2+0j) ... exceptions.TypeError
[1] % (2+0j) ... exceptions.TypeError
[1] %= (2+0j) ... exceptions.TypeError
[1] + [1] = [1, 1]
[1] += [1] => [1, 1]
[1] - [1] ... exceptions.TypeError
[1] -= [1] ... exceptions.TypeError
[1] * [1] ... exceptions.TypeError
[1] *= [1] ... exceptions.TypeError
[1] / [1] ... exceptions.TypeError
[1] /= [1] ... exceptions.TypeError
[1] ** [1] ... exceptions.TypeError
[1] **= [1] ... exceptions.TypeError
[1] % [1] ... exceptions.TypeError
[1] %= [1] ... exceptions.TypeError
[1] + (2,) ... exceptions.TypeError
[1] += (2,) => [1, 2]
[1] - (2,) ... exceptions.TypeError
[1] -= (2,) ... exceptions.TypeError
[1] * (2,) ... exceptions.TypeError
[1] *= (2,) ... exceptions.TypeError
[1] / (2,) ... exceptions.TypeError
[1] /= (2,) ... exceptions.TypeError
[1] ** (2,) ... exceptions.TypeError
[1] **= (2,) ... exceptions.TypeError
[1] % (2,) ... exceptions.TypeError
[1] %= (2,) ... exceptions.TypeError
[1] + None ... exceptions.TypeError
[1] += None ... exceptions.TypeError
[1] - None ... exceptions.TypeError
[1] -= None ... exceptions.TypeError
[1] * None ... exceptions.TypeError
[1] *= None ... exceptions.TypeError
[1] / None ... exceptions.TypeError
[1] /= None ... exceptions.TypeError
[1] ** None ... exceptions.TypeError
[1] **= None ... exceptions.TypeError
[1] % None ... exceptions.TypeError
[1] %= None ... exceptions.TypeError
[1] + <MethodNumber 2> ... exceptions.TypeError
[1] += <MethodNumber 2> ... exceptions.TypeError
[1] - <MethodNumber 2> ... exceptions.TypeError
[1] -= <MethodNumber 2> ... exceptions.TypeError
[1] * <MethodNumber 2> = [1, 1]
[1] *= <MethodNumber 2> => [1, 1]
[1] / <MethodNumber 2> ... exceptions.TypeError
[1] /= <MethodNumber 2> ... exceptions.TypeError
[1] ** <MethodNumber 2> ... exceptions.TypeError
[1] **= <MethodNumber 2> ... exceptions.TypeError
[1] % <MethodNumber 2> ... exceptions.TypeError
[1] %= <MethodNumber 2> ... exceptions.TypeError
[1] + <CoerceNumber 2> ... exceptions.TypeError
[1] += <CoerceNumber 2> ... exceptions.TypeError
[1] - <CoerceNumber 2> ... exceptions.TypeError
[1] -= <CoerceNumber 2> ... exceptions.TypeError
[1] * <CoerceNumber 2> = [1, 1]
[1] *= <CoerceNumber 2> => [1, 1]
[1] / <CoerceNumber 2> ... exceptions.TypeError
[1] /= <CoerceNumber 2> ... exceptions.TypeError
[1] ** <CoerceNumber 2> ... exceptions.TypeError
[1] **= <CoerceNumber 2> ... exceptions.TypeError
[1] % <CoerceNumber 2> ... exceptions.TypeError
[1] %= <CoerceNumber 2> ... exceptions.TypeError
(2,) + 2 ... exceptions.TypeError
(2,) += 2 ... exceptions.TypeError
(2,) - 2 ... exceptions.TypeError
(2,) -= 2 ... exceptions.TypeError
(2,) * 2 = (2, 2)
(2,) *= 2 => (2, 2)
(2,) / 2 ... exceptions.TypeError
(2,) /= 2 ... exceptions.TypeError
(2,) ** 2 ... exceptions.TypeError
(2,) **= 2 ... exceptions.TypeError
(2,) % 2 ... exceptions.TypeError
(2,) %= 2 ... exceptions.TypeError
(2,) + 4.0 ... exceptions.TypeError
(2,) += 4.0 ... exceptions.TypeError
(2,) - 4.0 ... exceptions.TypeError
(2,) -= 4.0 ... exceptions.TypeError
(2,) * 4.0 ... exceptions.TypeError
(2,) *= 4.0 ... exceptions.TypeError
(2,) / 4.0 ... exceptions.TypeError
(2,) /= 4.0 ... exceptions.TypeError
(2,) ** 4.0 ... exceptions.TypeError
(2,) **= 4.0 ... exceptions.TypeError
(2,) % 4.0 ... exceptions.TypeError
(2,) %= 4.0 ... exceptions.TypeError
(2,) + 2 ... exceptions.TypeError
(2,) += 2 ... exceptions.TypeError
(2,) - 2 ... exceptions.TypeError
(2,) -= 2 ... exceptions.TypeError
(2,) * 2 = (2, 2)
(2,) *= 2 => (2, 2)
(2,) / 2 ... exceptions.TypeError
(2,) /= 2 ... exceptions.TypeError
(2,) ** 2 ... exceptions.TypeError
(2,) **= 2 ... exceptions.TypeError
(2,) % 2 ... exceptions.TypeError
(2,) %= 2 ... exceptions.TypeError
(2,) + (2+0j) ... exceptions.TypeError
(2,) += (2+0j) ... exceptions.TypeError
(2,) - (2+0j) ... exceptions.TypeError
(2,) -= (2+0j) ... exceptions.TypeError
(2,) * (2+0j) ... exceptions.TypeError
(2,) *= (2+0j) ... exceptions.TypeError
(2,) / (2+0j) ... exceptions.TypeError
(2,) /= (2+0j) ... exceptions.TypeError
(2,) ** (2+0j) ... exceptions.TypeError
(2,) **= (2+0j) ... exceptions.TypeError
(2,) % (2+0j) ... exceptions.TypeError
(2,) %= (2+0j) ... exceptions.TypeError
(2,) + [1] ... exceptions.TypeError
(2,) += [1] ... exceptions.TypeError
(2,) - [1] ... exceptions.TypeError
(2,) -= [1] ... exceptions.TypeError
(2,) * [1] ... exceptions.TypeError
(2,) *= [1] ... exceptions.TypeError
(2,) / [1] ... exceptions.TypeError
(2,) /= [1] ... exceptions.TypeError
(2,) ** [1] ... exceptions.TypeError
(2,) **= [1] ... exceptions.TypeError
(2,) % [1] ... exceptions.TypeError
(2,) %= [1] ... exceptions.TypeError
(2,) + (2,) = (2, 2)
(2,) += (2,) => (2, 2)
(2,) - (2,) ... exceptions.TypeError
(2,) -= (2,) ... exceptions.TypeError
(2,) * (2,) ... exceptions.TypeError
(2,) *= (2,) ... exceptions.TypeError
(2,) / (2,) ... exceptions.TypeError
(2,) /= (2,) ... exceptions.TypeError
(2,) ** (2,) ... exceptions.TypeError
(2,) **= (2,) ... exceptions.TypeError
(2,) % (2,) ... exceptions.TypeError
(2,) %= (2,) ... exceptions.TypeError
(2,) + None ... exceptions.TypeError
(2,) += None ... exceptions.TypeError
(2,) - None ... exceptions.TypeError
(2,) -= None ... exceptions.TypeError
(2,) * None ... exceptions.TypeError
(2,) *= None ... exceptions.TypeError
(2,) / None ... exceptions.TypeError
(2,) /= None ... exceptions.TypeError
(2,) ** None ... exceptions.TypeError
(2,) **= None ... exceptions.TypeError
(2,) % None ... exceptions.TypeError
(2,) %= None ... exceptions.TypeError
(2,) + <MethodNumber 2> ... exceptions.TypeError
(2,) += <MethodNumber 2> ... exceptions.TypeError
(2,) - <MethodNumber 2> ... exceptions.TypeError
(2,) -= <MethodNumber 2> ... exceptions.TypeError
(2,) * <MethodNumber 2> = (2, 2)
(2,) *= <MethodNumber 2> => (2, 2)
(2,) / <MethodNumber 2> ... exceptions.TypeError
(2,) /= <MethodNumber 2> ... exceptions.TypeError
(2,) ** <MethodNumber 2> ... exceptions.TypeError
(2,) **= <MethodNumber 2> ... exceptions.TypeError
(2,) % <MethodNumber 2> ... exceptions.TypeError
(2,) %= <MethodNumber 2> ... exceptions.TypeError
(2,) + <CoerceNumber 2> ... exceptions.TypeError
(2,) += <CoerceNumber 2> ... exceptions.TypeError
(2,) - <CoerceNumber 2> ... exceptions.TypeError
(2,) -= <CoerceNumber 2> ... exceptions.TypeError
(2,) * <CoerceNumber 2> = (2, 2)
(2,) *= <CoerceNumber 2> => (2, 2)
(2,) / <CoerceNumber 2> ... exceptions.TypeError
(2,) /= <CoerceNumber 2> ... exceptions.TypeError
(2,) ** <CoerceNumber 2> ... exceptions.TypeError
(2,) **= <CoerceNumber 2> ... exceptions.TypeError
(2,) % <CoerceNumber 2> ... exceptions.TypeError
(2,) %= <CoerceNumber 2> ... exceptions.TypeError
None + 2 ... exceptions.TypeError
None += 2 ... exceptions.TypeError
None - 2 ... exceptions.TypeError
None -= 2 ... exceptions.TypeError
None * 2 ... exceptions.TypeError
None *= 2 ... exceptions.TypeError
None / 2 ... exceptions.TypeError
None /= 2 ... exceptions.TypeError
None ** 2 ... exceptions.TypeError
None **= 2 ... exceptions.TypeError
None % 2 ... exceptions.TypeError
None %= 2 ... exceptions.TypeError
None + 4.0 ... exceptions.TypeError
None += 4.0 ... exceptions.TypeError
None - 4.0 ... exceptions.TypeError
None -= 4.0 ... exceptions.TypeError
None * 4.0 ... exceptions.TypeError
None *= 4.0 ... exceptions.TypeError
None / 4.0 ... exceptions.TypeError
None /= 4.0 ... exceptions.TypeError
None ** 4.0 ... exceptions.TypeError
None **= 4.0 ... exceptions.TypeError
None % 4.0 ... exceptions.TypeError
None %= 4.0 ... exceptions.TypeError
None + 2 ... exceptions.TypeError
None += 2 ... exceptions.TypeError
None - 2 ... exceptions.TypeError
None -= 2 ... exceptions.TypeError
None * 2 ... exceptions.TypeError
None *= 2 ... exceptions.TypeError
None / 2 ... exceptions.TypeError
None /= 2 ... exceptions.TypeError
None ** 2 ... exceptions.TypeError
None **= 2 ... exceptions.TypeError
None % 2 ... exceptions.TypeError
None %= 2 ... exceptions.TypeError
None + (2+0j) ... exceptions.TypeError
None += (2+0j) ... exceptions.TypeError
None - (2+0j) ... exceptions.TypeError
None -= (2+0j) ... exceptions.TypeError
None * (2+0j) ... exceptions.TypeError
None *= (2+0j) ... exceptions.TypeError
None / (2+0j) ... exceptions.TypeError
None /= (2+0j) ... exceptions.TypeError
None ** (2+0j) ... exceptions.TypeError
None **= (2+0j) ... exceptions.TypeError
None % (2+0j) ... exceptions.TypeError
None %= (2+0j) ... exceptions.TypeError
None + [1] ... exceptions.TypeError
None += [1] ... exceptions.TypeError
None - [1] ... exceptions.TypeError
None -= [1] ... exceptions.TypeError
None * [1] ... exceptions.TypeError
None *= [1] ... exceptions.TypeError
None / [1] ... exceptions.TypeError
None /= [1] ... exceptions.TypeError
None ** [1] ... exceptions.TypeError
None **= [1] ... exceptions.TypeError
None % [1] ... exceptions.TypeError
None %= [1] ... exceptions.TypeError
None + (2,) ... exceptions.TypeError
None += (2,) ... exceptions.TypeError
None - (2,) ... exceptions.TypeError
None -= (2,) ... exceptions.TypeError
None * (2,) ... exceptions.TypeError
None *= (2,) ... exceptions.TypeError
None / (2,) ... exceptions.TypeError
None /= (2,) ... exceptions.TypeError
None ** (2,) ... exceptions.TypeError
None **= (2,) ... exceptions.TypeError
None % (2,) ... exceptions.TypeError
None %= (2,) ... exceptions.TypeError
None + None ... exceptions.TypeError
None += None ... exceptions.TypeError
None - None ... exceptions.TypeError
None -= None ... exceptions.TypeError
None * None ... exceptions.TypeError
None *= None ... exceptions.TypeError
None / None ... exceptions.TypeError
None /= None ... exceptions.TypeError
None ** None ... exceptions.TypeError
None **= None ... exceptions.TypeError
None % None ... exceptions.TypeError
None %= None ... exceptions.TypeError
None + <MethodNumber 2> ... exceptions.TypeError
None += <MethodNumber 2> ... exceptions.TypeError
None - <MethodNumber 2> ... exceptions.TypeError
None -= <MethodNumber 2> ... exceptions.TypeError
None * <MethodNumber 2> ... exceptions.TypeError
None *= <MethodNumber 2> ... exceptions.TypeError
None / <MethodNumber 2> ... exceptions.TypeError
None /= <MethodNumber 2> ... exceptions.TypeError
None ** <MethodNumber 2> ... exceptions.TypeError
None **= <MethodNumber 2> ... exceptions.TypeError
None % <MethodNumber 2> ... exceptions.TypeError
None %= <MethodNumber 2> ... exceptions.TypeError
None + <CoerceNumber 2> ... exceptions.TypeError
None += <CoerceNumber 2> ... exceptions.TypeError
None - <CoerceNumber 2> ... exceptions.TypeError
None -= <CoerceNumber 2> ... exceptions.TypeError
None * <CoerceNumber 2> ... exceptions.TypeError
None *= <CoerceNumber 2> ... exceptions.TypeError
None / <CoerceNumber 2> ... exceptions.TypeError
None /= <CoerceNumber 2> ... exceptions.TypeError
None ** <CoerceNumber 2> ... exceptions.TypeError
None **= <CoerceNumber 2> ... exceptions.TypeError
None % <CoerceNumber 2> ... exceptions.TypeError
None %= <CoerceNumber 2> ... exceptions.TypeError
<MethodNumber 2> + 2 = 4
<MethodNumber 2> += 2 => 4
<MethodNumber 2> - 2 = 0
<MethodNumber 2> -= 2 => 0
<MethodNumber 2> * 2 = 4
<MethodNumber 2> *= 2 => 4
<MethodNumber 2> / 2 = 1
<MethodNumber 2> /= 2 => 1
<MethodNumber 2> ** 2 = 4
<MethodNumber 2> **= 2 => 4
<MethodNumber 2> % 2 = 0
<MethodNumber 2> %= 2 => 0
<MethodNumber 2> + 4.0 = 6.0
<MethodNumber 2> += 4.0 => 6.0
<MethodNumber 2> - 4.0 = -2.0
<MethodNumber 2> -= 4.0 => -2.0
<MethodNumber 2> * 4.0 = 8.0
<MethodNumber 2> *= 4.0 => 8.0
<MethodNumber 2> / 4.0 = 0.5
<MethodNumber 2> /= 4.0 => 0.5
<MethodNumber 2> ** 4.0 = 16.0
<MethodNumber 2> **= 4.0 => 16.0
<MethodNumber 2> % 4.0 = 2.0
<MethodNumber 2> %= 4.0 => 2.0
<MethodNumber 2> + 2 = 4
<MethodNumber 2> += 2 => 4
<MethodNumber 2> - 2 = 0
<MethodNumber 2> -= 2 => 0
<MethodNumber 2> * 2 = 4
<MethodNumber 2> *= 2 => 4
<MethodNumber 2> / 2 = 1
<MethodNumber 2> /= 2 => 1
<MethodNumber 2> ** 2 = 4
<MethodNumber 2> **= 2 => 4
<MethodNumber 2> % 2 = 0
<MethodNumber 2> %= 2 => 0
<MethodNumber 2> + (2+0j) = (4.0 + 0.0j)
<MethodNumber 2> += (2+0j) => (4.0 + 0.0j)
<MethodNumber 2> - (2+0j) = (0.0 + 0.0j)
<MethodNumber 2> -= (2+0j) => (0.0 + 0.0j)
<MethodNumber 2> * (2+0j) = (4.0 + 0.0j)
<MethodNumber 2> *= (2+0j) => (4.0 + 0.0j)
<MethodNumber 2> / (2+0j) = (1.0 + 0.0j)
<MethodNumber 2> /= (2+0j) => (1.0 + 0.0j)
<MethodNumber 2> ** (2+0j) = (4.0 + 0.0j)
<MethodNumber 2> **= (2+0j) => (4.0 + 0.0j)
<MethodNumber 2> % (2+0j) = (0.0 + 0.0j)
<MethodNumber 2> %= (2+0j) => (0.0 + 0.0j)
<MethodNumber 2> + [1] ... exceptions.TypeError
<MethodNumber 2> += [1] ... exceptions.TypeError
<MethodNumber 2> - [1] ... exceptions.TypeError
<MethodNumber 2> -= [1] ... exceptions.TypeError
<MethodNumber 2> * [1] = [1, 1]
<MethodNumber 2> *= [1] => [1, 1]
<MethodNumber 2> / [1] ... exceptions.TypeError
<MethodNumber 2> /= [1] ... exceptions.TypeError
<MethodNumber 2> ** [1] ... exceptions.TypeError
<MethodNumber 2> **= [1] ... exceptions.TypeError
<MethodNumber 2> % [1] ... exceptions.TypeError
<MethodNumber 2> %= [1] ... exceptions.TypeError
<MethodNumber 2> + (2,) ... exceptions.TypeError
<MethodNumber 2> += (2,) ... exceptions.TypeError
<MethodNumber 2> - (2,) ... exceptions.TypeError
<MethodNumber 2> -= (2,) ... exceptions.TypeError
<MethodNumber 2> * (2,) = (2, 2)
<MethodNumber 2> *= (2,) => (2, 2)
<MethodNumber 2> / (2,) ... exceptions.TypeError
<MethodNumber 2> /= (2,) ... exceptions.TypeError
<MethodNumber 2> ** (2,) ... exceptions.TypeError
<MethodNumber 2> **= (2,) ... exceptions.TypeError
<MethodNumber 2> % (2,) ... exceptions.TypeError
<MethodNumber 2> %= (2,) ... exceptions.TypeError
<MethodNumber 2> + None ... exceptions.TypeError
<MethodNumber 2> += None ... exceptions.TypeError
<MethodNumber 2> - None ... exceptions.TypeError
<MethodNumber 2> -= None ... exceptions.TypeError
<MethodNumber 2> * None ... exceptions.TypeError
<MethodNumber 2> *= None ... exceptions.TypeError
<MethodNumber 2> / None ... exceptions.TypeError
<MethodNumber 2> /= None ... exceptions.TypeError
<MethodNumber 2> ** None ... exceptions.TypeError
<MethodNumber 2> **= None ... exceptions.TypeError
<MethodNumber 2> % None ... exceptions.TypeError
<MethodNumber 2> %= None ... exceptions.TypeError
<MethodNumber 2> + <MethodNumber 2> = 4
<MethodNumber 2> += <MethodNumber 2> => 4
<MethodNumber 2> - <MethodNumber 2> = 0
<MethodNumber 2> -= <MethodNumber 2> => 0
<MethodNumber 2> * <MethodNumber 2> = 4
<MethodNumber 2> *= <MethodNumber 2> => 4
<MethodNumber 2> / <MethodNumber 2> = 1
<MethodNumber 2> /= <MethodNumber 2> => 1
<MethodNumber 2> ** <MethodNumber 2> = 4
<MethodNumber 2> **= <MethodNumber 2> => 4
<MethodNumber 2> % <MethodNumber 2> = 0
<MethodNumber 2> %= <MethodNumber 2> => 0
<MethodNumber 2> + <CoerceNumber 2> = 4
<MethodNumber 2> += <CoerceNumber 2> => 4
<MethodNumber 2> - <CoerceNumber 2> = 0
<MethodNumber 2> -= <CoerceNumber 2> => 0
<MethodNumber 2> * <CoerceNumber 2> = 4
<MethodNumber 2> *= <CoerceNumber 2> => 4
<MethodNumber 2> / <CoerceNumber 2> = 1
<MethodNumber 2> /= <CoerceNumber 2> => 1
<MethodNumber 2> ** <CoerceNumber 2> = 4
<MethodNumber 2> **= <CoerceNumber 2> => 4
<MethodNumber 2> % <CoerceNumber 2> = 0
<MethodNumber 2> %= <CoerceNumber 2> => 0
<CoerceNumber 2> + 2 = 4
<CoerceNumber 2> += 2 => 4
<CoerceNumber 2> - 2 = 0
<CoerceNumber 2> -= 2 => 0
<CoerceNumber 2> * 2 = 4
<CoerceNumber 2> *= 2 => 4
<CoerceNumber 2> / 2 = 1
<CoerceNumber 2> /= 2 => 1
<CoerceNumber 2> ** 2 = 4
<CoerceNumber 2> **= 2 => 4
<CoerceNumber 2> % 2 = 0
<CoerceNumber 2> %= 2 => 0
<CoerceNumber 2> + 4.0 = 6.0
<CoerceNumber 2> += 4.0 => 6.0
<CoerceNumber 2> - 4.0 = -2.0
<CoerceNumber 2> -= 4.0 => -2.0
<CoerceNumber 2> * 4.0 = 8.0
<CoerceNumber 2> *= 4.0 => 8.0
<CoerceNumber 2> / 4.0 = 0.5
<CoerceNumber 2> /= 4.0 => 0.5
<CoerceNumber 2> ** 4.0 = 16.0
<CoerceNumber 2> **= 4.0 => 16.0
<CoerceNumber 2> % 4.0 = 2.0
<CoerceNumber 2> %= 4.0 => 2.0
<CoerceNumber 2> + 2 = 4
<CoerceNumber 2> += 2 => 4
<CoerceNumber 2> - 2 = 0
<CoerceNumber 2> -= 2 => 0
<CoerceNumber 2> * 2 = 4
<CoerceNumber 2> *= 2 => 4
<CoerceNumber 2> / 2 = 1
<CoerceNumber 2> /= 2 => 1
<CoerceNumber 2> ** 2 = 4
<CoerceNumber 2> **= 2 => 4
<CoerceNumber 2> % 2 = 0
<CoerceNumber 2> %= 2 => 0
<CoerceNumber 2> + (2+0j) = (4.0 + 0.0j)
<CoerceNumber 2> += (2+0j) => (4.0 + 0.0j)
<CoerceNumber 2> - (2+0j) = (0.0 + 0.0j)
<CoerceNumber 2> -= (2+0j) => (0.0 + 0.0j)
<CoerceNumber 2> * (2+0j) = (4.0 + 0.0j)
<CoerceNumber 2> *= (2+0j) => (4.0 + 0.0j)
<CoerceNumber 2> / (2+0j) = (1.0 + 0.0j)
<CoerceNumber 2> /= (2+0j) => (1.0 + 0.0j)
<CoerceNumber 2> ** (2+0j) = (4.0 + 0.0j)
<CoerceNumber 2> **= (2+0j) => (4.0 + 0.0j)
<CoerceNumber 2> % (2+0j) = (0.0 + 0.0j)
<CoerceNumber 2> %= (2+0j) => (0.0 + 0.0j)
<CoerceNumber 2> + [1] ... exceptions.TypeError
<CoerceNumber 2> += [1] ... exceptions.TypeError
<CoerceNumber 2> - [1] ... exceptions.TypeError
<CoerceNumber 2> -= [1] ... exceptions.TypeError
<CoerceNumber 2> * [1] = [1, 1]
<CoerceNumber 2> *= [1] => [1, 1]
<CoerceNumber 2> / [1] ... exceptions.TypeError
<CoerceNumber 2> /= [1] ... exceptions.TypeError
<CoerceNumber 2> ** [1] ... exceptions.TypeError
<CoerceNumber 2> **= [1] ... exceptions.TypeError
<CoerceNumber 2> % [1] ... exceptions.TypeError
<CoerceNumber 2> %= [1] ... exceptions.TypeError
<CoerceNumber 2> + (2,) ... exceptions.TypeError
<CoerceNumber 2> += (2,) ... exceptions.TypeError
<CoerceNumber 2> - (2,) ... exceptions.TypeError
<CoerceNumber 2> -= (2,) ... exceptions.TypeError
<CoerceNumber 2> * (2,) = (2, 2)
<CoerceNumber 2> *= (2,) => (2, 2)
<CoerceNumber 2> / (2,) ... exceptions.TypeError
<CoerceNumber 2> /= (2,) ... exceptions.TypeError
<CoerceNumber 2> ** (2,) ... exceptions.TypeError
<CoerceNumber 2> **= (2,) ... exceptions.TypeError
<CoerceNumber 2> % (2,) ... exceptions.TypeError
<CoerceNumber 2> %= (2,) ... exceptions.TypeError
<CoerceNumber 2> + None ... exceptions.TypeError
<CoerceNumber 2> += None ... exceptions.TypeError
<CoerceNumber 2> - None ... exceptions.TypeError
<CoerceNumber 2> -= None ... exceptions.TypeError
<CoerceNumber 2> * None ... exceptions.TypeError
<CoerceNumber 2> *= None ... exceptions.TypeError
<CoerceNumber 2> / None ... exceptions.TypeError
<CoerceNumber 2> /= None ... exceptions.TypeError
<CoerceNumber 2> ** None ... exceptions.TypeError
<CoerceNumber 2> **= None ... exceptions.TypeError
<CoerceNumber 2> % None ... exceptions.TypeError
<CoerceNumber 2> %= None ... exceptions.TypeError
<CoerceNumber 2> + <MethodNumber 2> = 4
<CoerceNumber 2> += <MethodNumber 2> => 4
<CoerceNumber 2> - <MethodNumber 2> = 0
<CoerceNumber 2> -= <MethodNumber 2> => 0
<CoerceNumber 2> * <MethodNumber 2> = 4
<CoerceNumber 2> *= <MethodNumber 2> => 4
<CoerceNumber 2> / <MethodNumber 2> = 1
<CoerceNumber 2> /= <MethodNumber 2> => 1
<CoerceNumber 2> ** <MethodNumber 2> = 4
<CoerceNumber 2> **= <MethodNumber 2> => 4
<CoerceNumber 2> % <MethodNumber 2> = 0
<CoerceNumber 2> %= <MethodNumber 2> => 0
<CoerceNumber 2> + <CoerceNumber 2> = 4
<CoerceNumber 2> += <CoerceNumber 2> => 4
<CoerceNumber 2> - <CoerceNumber 2> = 0
<CoerceNumber 2> -= <CoerceNumber 2> => 0
<CoerceNumber 2> * <CoerceNumber 2> = 4
<CoerceNumber 2> *= <CoerceNumber 2> => 4
<CoerceNumber 2> / <CoerceNumber 2> = 1
<CoerceNumber 2> /= <CoerceNumber 2> => 1
<CoerceNumber 2> ** <CoerceNumber 2> = 4
<CoerceNumber 2> **= <CoerceNumber 2> => 4
<CoerceNumber 2> % <CoerceNumber 2> = 0
<CoerceNumber 2> %= <CoerceNumber 2> => 0
divmod(2, 2) = (1, 0)
divmod(2, 4.0) = (0.0, 2.0)
divmod(2, 2) = (1L, 0L)
divmod(2, (2+0j)) = ((1+0j), 0j)
divmod(2, [1]) ... exceptions.TypeError
divmod(2, (2,)) ... exceptions.TypeError
divmod(2, None) ... exceptions.TypeError
divmod(2, <MethodNumber 2>) ... exceptions.TypeError
divmod(2, <CoerceNumber 2>) = (1, 0)
divmod(4.0, 2) = (2.0, 0.0)
divmod(4.0, 4.0) = (1.0, 0.0)
divmod(4.0, 2) = (2.0, 0.0)
divmod(4.0, (2+0j)) = ((2+0j), 0j)
divmod(4.0, [1]) ... exceptions.TypeError
divmod(4.0, (2,)) ... exceptions.TypeError
divmod(4.0, None) ... exceptions.TypeError
divmod(4.0, <MethodNumber 2>) ... exceptions.TypeError
divmod(4.0, <CoerceNumber 2>) = (2.0, 0.0)
divmod(2, 2) = (1L, 0L)
divmod(2, 4.0) = (0.0, 2.0)
divmod(2, 2) = (1L, 0L)
divmod(2, (2+0j)) = ((1+0j), 0j)
divmod(2, [1]) ... exceptions.TypeError
divmod(2, (2,)) ... exceptions.TypeError
divmod(2, None) ... exceptions.TypeError
divmod(2, <MethodNumber 2>) ... exceptions.TypeError
divmod(2, <CoerceNumber 2>) = (1L, 0L)
divmod((2+0j), 2) = ((1+0j), 0j)
divmod((2+0j), 4.0) = (0j, (2+0j))
divmod((2+0j), 2) = ((1+0j), 0j)
divmod((2+0j), (2+0j)) = ((1+0j), 0j)
divmod((2+0j), [1]) ... exceptions.TypeError
divmod((2+0j), (2,)) ... exceptions.TypeError
divmod((2+0j), None) ... exceptions.TypeError
divmod((2+0j), <MethodNumber 2>) ... exceptions.TypeError
divmod((2+0j), <CoerceNumber 2>) = ((1+0j), 0j)
divmod([1], 2) ... exceptions.TypeError
divmod([1], 4.0) ... exceptions.TypeError
divmod([1], 2) ... exceptions.TypeError
divmod([1], (2+0j)) ... exceptions.TypeError
divmod([1], [1]) ... exceptions.TypeError
divmod([1], (2,)) ... exceptions.TypeError
divmod([1], None) ... exceptions.TypeError
divmod([1], <MethodNumber 2>) ... exceptions.TypeError
divmod([1], <CoerceNumber 2>) ... exceptions.TypeError
divmod((2,), 2) ... exceptions.TypeError
divmod((2,), 4.0) ... exceptions.TypeError
divmod((2,), 2) ... exceptions.TypeError
divmod((2,), (2+0j)) ... exceptions.TypeError
divmod((2,), [1]) ... exceptions.TypeError
divmod((2,), (2,)) ... exceptions.TypeError
divmod((2,), None) ... exceptions.TypeError
divmod((2,), <MethodNumber 2>) ... exceptions.TypeError
divmod((2,), <CoerceNumber 2>) ... exceptions.TypeError
divmod(None, 2) ... exceptions.TypeError
divmod(None, 4.0) ... exceptions.TypeError
divmod(None, 2) ... exceptions.TypeError
divmod(None, (2+0j)) ... exceptions.TypeError
divmod(None, [1]) ... exceptions.TypeError
divmod(None, (2,)) ... exceptions.TypeError
divmod(None, None) ... exceptions.TypeError
divmod(None, <MethodNumber 2>) ... exceptions.TypeError
divmod(None, <CoerceNumber 2>) ... exceptions.TypeError
divmod(<MethodNumber 2>, 2) ... exceptions.TypeError
divmod(<MethodNumber 2>, 4.0) ... exceptions.TypeError
divmod(<MethodNumber 2>, 2) ... exceptions.TypeError
divmod(<MethodNumber 2>, (2+0j)) ... exceptions.TypeError
divmod(<MethodNumber 2>, [1]) ... exceptions.TypeError
divmod(<MethodNumber 2>, (2,)) ... exceptions.TypeError
divmod(<MethodNumber 2>, None) ... exceptions.TypeError
divmod(<MethodNumber 2>, <MethodNumber 2>) ... exceptions.TypeError
divmod(<MethodNumber 2>, <CoerceNumber 2>) ... exceptions.TypeError
divmod(<CoerceNumber 2>, 2) = (1, 0)
divmod(<CoerceNumber 2>, 4.0) = (0.0, 2.0)
divmod(<CoerceNumber 2>, 2) = (1L, 0L)
divmod(<CoerceNumber 2>, (2+0j)) = ((1+0j), 0j)
divmod(<CoerceNumber 2>, [1]) ... exceptions.TypeError
divmod(<CoerceNumber 2>, (2,)) ... exceptions.TypeError
divmod(<CoerceNumber 2>, None) ... exceptions.TypeError
divmod(<CoerceNumber 2>, <MethodNumber 2>) ... exceptions.TypeError
divmod(<CoerceNumber 2>, <CoerceNumber 2>) = (1, 0)
Lib/test/test_coercion.py
View file @
686eaeb0
import
copy
import
copy
import
sys
import
sys
import
warnings
import
warnings
import
unittest
from
test.test_support
import
run_unittest
# Fake a number that implements numeric methods through __coerce__
# Fake a number that implements numeric methods through __coerce__
class
CoerceNumber
:
class
CoerceNumber
:
...
@@ -16,10 +18,19 @@ class CoerceNumber:
...
@@ -16,10 +18,19 @@ class CoerceNumber:
else
:
else
:
return
(
self
.
arg
,
other
)
return
(
self
.
arg
,
other
)
# New-style class version of CoerceNumber
class
CoerceTo
(
object
):
def
__init__
(
self
,
arg
):
self
.
arg
=
arg
def
__coerce__
(
self
,
other
):
if
isinstance
(
other
,
CoerceTo
):
return
self
.
arg
,
other
.
arg
else
:
return
self
.
arg
,
other
# Fake a number that implements numeric ops through methods.
# Fake a number that implements numeric ops through methods.
class
MethodNumber
:
class
MethodNumber
:
def
__init__
(
self
,
arg
):
def
__init__
(
self
,
arg
):
self
.
arg
=
arg
self
.
arg
=
arg
...
@@ -50,6 +61,18 @@ class MethodNumber:
...
@@ -50,6 +61,18 @@ class MethodNumber:
def
__rdiv__
(
self
,
other
):
def
__rdiv__
(
self
,
other
):
return
other
/
self
.
arg
return
other
/
self
.
arg
def
__truediv__
(
self
,
other
):
return
self
.
arg
/
other
def
__rtruediv__
(
self
,
other
):
return
other
/
self
.
arg
def
__floordiv__
(
self
,
other
):
return
self
.
arg
//
other
def
__rfloordiv__
(
self
,
other
):
return
other
//
self
.
arg
def
__pow__
(
self
,
other
):
def
__pow__
(
self
,
other
):
return
self
.
arg
**
other
return
self
.
arg
**
other
...
@@ -66,11 +89,157 @@ class MethodNumber:
...
@@ -66,11 +89,157 @@ class MethodNumber:
return
cmp
(
self
.
arg
,
other
)
return
cmp
(
self
.
arg
,
other
)
candidates
=
[
2
,
4.0
,
2L
,
2
+
0j
,
[
1
],
(
2
,),
None
,
candidates
=
[
2
,
2L
,
4.0
,
2
+
0j
,
[
1
],
(
2
,),
None
,
MethodNumber
(
2
),
CoerceNumber
(
2
)]
MethodNumber
(
2
),
CoerceNumber
(
2
)]
infix_binops
=
[
'+'
,
'-'
,
'*'
,
'**'
,
'%'
,
'//'
,
'/'
]
TE
=
TypeError
# b = both normal and augmented give same result list
# s = single result lists for normal and augmented
# e = equals other results
# result lists: ['+', '-', '*', '**', '%', '//', ('classic /', 'new /')]
# ^^^^^^^^^^^^^^^^^^^^^^
# 2-tuple if results differ
# else only one value
infix_results
=
{
# 2
(
0
,
0
):
(
'b'
,
[
4
,
0
,
4
,
4
,
0
,
1
,
(
1
,
1.0
)]),
(
0
,
1
):
(
'e'
,
(
0
,
0
)),
(
0
,
2
):
(
'b'
,
[
6.0
,
-
2.0
,
8.0
,
16.0
,
2.0
,
0.0
,
0.5
]),
(
0
,
3
):
(
'b'
,
[
4
+
0j
,
0
+
0j
,
4
+
0j
,
4
+
0j
,
0
+
0j
,
1
+
0j
,
1
+
0j
]),
(
0
,
4
):
(
'b'
,
[
TE
,
TE
,
[
1
,
1
],
TE
,
TE
,
TE
,
TE
]),
(
0
,
5
):
(
'b'
,
[
TE
,
TE
,
(
2
,
2
),
TE
,
TE
,
TE
,
TE
]),
(
0
,
6
):
(
'b'
,
[
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
]),
(
0
,
7
):
(
'e'
,
(
0
,
0
)),
(
0
,
8
):
(
'e'
,
(
0
,
0
)),
# 2L
(
1
,
0
):
(
'e'
,
(
0
,
0
)),
(
1
,
1
):
(
'e'
,
(
0
,
1
)),
(
1
,
2
):
(
'e'
,
(
0
,
2
)),
(
1
,
3
):
(
'e'
,
(
0
,
3
)),
(
1
,
4
):
(
'e'
,
(
0
,
4
)),
(
1
,
5
):
(
'e'
,
(
0
,
5
)),
(
1
,
6
):
(
'e'
,
(
0
,
6
)),
(
1
,
7
):
(
'e'
,
(
0
,
7
)),
(
1
,
8
):
(
'e'
,
(
0
,
8
)),
# 4.0
(
2
,
0
):
(
'b'
,
[
6.0
,
2.0
,
8.0
,
16.0
,
0.0
,
2.0
,
2.0
]),
(
2
,
1
):
(
'e'
,
(
2
,
0
)),
(
2
,
2
):
(
'b'
,
[
8.0
,
0.0
,
16.0
,
256.0
,
0.0
,
1.0
,
1.0
]),
(
2
,
3
):
(
'b'
,
[
6
+
0j
,
2
+
0j
,
8
+
0j
,
16
+
0j
,
0
+
0j
,
2
+
0j
,
2
+
0j
]),
(
2
,
4
):
(
'b'
,
[
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
]),
(
2
,
5
):
(
'e'
,
(
2
,
4
)),
(
2
,
6
):
(
'e'
,
(
2
,
4
)),
(
2
,
7
):
(
'e'
,
(
2
,
0
)),
(
2
,
8
):
(
'e'
,
(
2
,
0
)),
# (2+0j)
(
3
,
0
):
(
'b'
,
[
4
+
0j
,
0
+
0j
,
4
+
0j
,
4
+
0j
,
0
+
0j
,
1
+
0j
,
1
+
0j
]),
(
3
,
1
):
(
'e'
,
(
3
,
0
)),
(
3
,
2
):
(
'b'
,
[
6
+
0j
,
-
2
+
0j
,
8
+
0j
,
16
+
0j
,
2
+
0j
,
0
+
0j
,
0.5
+
0j
]),
(
3
,
3
):
(
'b'
,
[
4
+
0j
,
0
+
0j
,
4
+
0j
,
4
+
0j
,
0
+
0j
,
1
+
0j
,
1
+
0j
]),
(
3
,
4
):
(
'b'
,
[
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
]),
(
3
,
5
):
(
'e'
,
(
3
,
4
)),
(
3
,
6
):
(
'e'
,
(
3
,
4
)),
(
3
,
7
):
(
'e'
,
(
3
,
0
)),
(
3
,
8
):
(
'e'
,
(
3
,
0
)),
# [1]
(
4
,
0
):
(
'b'
,
[
TE
,
TE
,
[
1
,
1
],
TE
,
TE
,
TE
,
TE
]),
(
4
,
1
):
(
'e'
,
(
4
,
0
)),
(
4
,
2
):
(
'b'
,
[
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
]),
(
4
,
3
):
(
'b'
,
[
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
]),
(
4
,
4
):
(
'b'
,
[[
1
,
1
],
TE
,
TE
,
TE
,
TE
,
TE
,
TE
]),
(
4
,
5
):
(
's'
,
[
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
],
[[
1
,
2
],
TE
,
TE
,
TE
,
TE
,
TE
,
TE
]),
(
4
,
6
):
(
'b'
,
[
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
]),
(
4
,
7
):
(
'e'
,
(
4
,
0
)),
(
4
,
8
):
(
'e'
,
(
4
,
0
)),
# (2,)
(
5
,
0
):
(
'b'
,
[
TE
,
TE
,
(
2
,
2
),
TE
,
TE
,
TE
,
TE
]),
(
5
,
1
):
(
'e'
,
(
5
,
0
)),
(
5
,
2
):
(
'b'
,
[
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
]),
(
5
,
3
):
(
'e'
,
(
5
,
2
)),
(
5
,
4
):
(
'e'
,
(
5
,
2
)),
(
5
,
5
):
(
'b'
,
[(
2
,
2
),
TE
,
TE
,
TE
,
TE
,
TE
,
TE
]),
(
5
,
6
):
(
'b'
,
[
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
]),
(
5
,
7
):
(
'e'
,
(
5
,
0
)),
(
5
,
8
):
(
'e'
,
(
5
,
0
)),
# None
(
6
,
0
):
(
'b'
,
[
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
]),
(
6
,
1
):
(
'e'
,
(
6
,
0
)),
(
6
,
2
):
(
'e'
,
(
6
,
0
)),
(
6
,
3
):
(
'e'
,
(
6
,
0
)),
(
6
,
4
):
(
'e'
,
(
6
,
0
)),
(
6
,
5
):
(
'e'
,
(
6
,
0
)),
(
6
,
6
):
(
'e'
,
(
6
,
0
)),
(
6
,
7
):
(
'e'
,
(
6
,
0
)),
(
6
,
8
):
(
'e'
,
(
6
,
0
)),
# MethodNumber(2)
(
7
,
0
):
(
'e'
,
(
0
,
0
)),
(
7
,
1
):
(
'e'
,
(
0
,
1
)),
(
7
,
2
):
(
'e'
,
(
0
,
2
)),
(
7
,
3
):
(
'e'
,
(
0
,
3
)),
(
7
,
4
):
(
'e'
,
(
0
,
4
)),
(
7
,
5
):
(
'e'
,
(
0
,
5
)),
(
7
,
6
):
(
'e'
,
(
0
,
6
)),
(
7
,
7
):
(
'e'
,
(
0
,
7
)),
(
7
,
8
):
(
'e'
,
(
0
,
8
)),
# CoerceNumber(2)
(
8
,
0
):
(
'e'
,
(
0
,
0
)),
(
8
,
1
):
(
'e'
,
(
0
,
1
)),
(
8
,
2
):
(
'e'
,
(
0
,
2
)),
(
8
,
3
):
(
'e'
,
(
0
,
3
)),
(
8
,
4
):
(
'e'
,
(
0
,
4
)),
(
8
,
5
):
(
'e'
,
(
0
,
5
)),
(
8
,
6
):
(
'e'
,
(
0
,
6
)),
(
8
,
7
):
(
'e'
,
(
0
,
7
)),
(
8
,
8
):
(
'e'
,
(
0
,
8
)),
}
def
process_infix_results
():
for
key
in
sorted
(
infix_results
):
val
=
infix_results
[
key
]
if
val
[
0
]
==
'e'
:
infix_results
[
key
]
=
infix_results
[
val
[
1
]]
else
:
if
val
[
0
]
==
's'
:
res
=
(
val
[
1
],
val
[
2
])
elif
val
[
0
]
==
'b'
:
res
=
(
val
[
1
],
val
[
1
])
for
i
in
range
(
1
):
if
isinstance
(
res
[
i
][
6
],
tuple
):
if
1
/
2
==
0
:
# testing with classic (floor) division
res
[
i
][
6
]
=
res
[
i
][
6
][
0
]
else
:
# testing with -Qnew
res
[
i
][
6
]
=
res
[
i
][
6
][
1
]
infix_results
[
key
]
=
res
process_infix_results
()
# now infix_results has two lists of results for every pairing.
infix_binops
=
[
'+'
,
'-'
,
'*'
,
'/'
,
'**'
,
'%'
]
prefix_binops
=
[
'divmod'
]
prefix_binops
=
[
'divmod'
]
prefix_results
=
[
[(
1
,
0
),
(
1L
,
0L
),
(
0.0
,
2.0
),
((
1
+
0j
),
0j
),
TE
,
TE
,
TE
,
TE
,
(
1
,
0
)],
[(
1L
,
0L
),
(
1L
,
0L
),
(
0.0
,
2.0
),
((
1
+
0j
),
0j
),
TE
,
TE
,
TE
,
TE
,
(
1L
,
0L
)],
[(
2.0
,
0.0
),
(
2.0
,
0.0
),
(
1.0
,
0.0
),
((
2
+
0j
),
0j
),
TE
,
TE
,
TE
,
TE
,
(
2.0
,
0.0
)],
[((
1
+
0j
),
0j
),
((
1
+
0j
),
0j
),
(
0j
,(
2
+
0j
)),
((
1
+
0j
),
0j
),
TE
,
TE
,
TE
,
TE
,
((
1
+
0j
),
0j
)],
[
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
],
[
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
],
[
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
],
[
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
,
TE
],
[(
1
,
0
),
(
1L
,
0L
),
(
0.0
,
2.0
),
((
1
+
0j
),
0j
),
TE
,
TE
,
TE
,
TE
,
(
1
,
0
)]
]
def
format_float
(
value
):
def
format_float
(
value
):
if
abs
(
value
)
<
0.01
:
if
abs
(
value
)
<
0.01
:
...
@@ -87,83 +256,74 @@ def format_result(value):
...
@@ -87,83 +256,74 @@ def format_result(value):
return
format_float
(
value
)
return
format_float
(
value
)
return
str
(
value
)
return
str
(
value
)
def
do_infix_binops
():
class
CoercionTest
(
unittest
.
TestCase
):
for
a
in
candidates
:
def
test_infix_binops
(
self
):
for
b
in
candidates
:
for
ia
,
a
in
enumerate
(
candidates
):
for
op
in
infix_binops
:
for
ib
,
b
in
enumerate
(
candidates
):
print
'%s %s %s'
%
(
a
,
op
,
b
),
results
=
infix_results
[(
ia
,
ib
)]
try
:
for
op
,
res
,
ires
in
zip
(
infix_binops
,
results
[
0
],
results
[
1
]):
x
=
eval
(
'a %s b'
%
op
)
if
res
is
TE
:
except
:
self
.
assertRaises
(
TypeError
,
eval
,
error
=
sys
.
exc_info
()[:
2
]
'a %s b'
%
op
,
{
'a'
:
a
,
'b'
:
b
})
print
'... %s.%s'
%
(
error
[
0
].
__module__
,
error
[
0
].
__name__
)
else
:
else
:
self
.
assertEquals
(
format_result
(
res
),
print
'='
,
format_result
(
x
)
format_result
(
eval
(
'a %s b'
%
op
)),
try
:
'%s %s %s == %s failed'
%
(
a
,
op
,
b
,
res
))
z
=
copy
.
copy
(
a
)
try
:
except
copy
.
Error
:
z
=
copy
.
copy
(
a
)
z
=
a
# assume it has no inplace ops
except
copy
.
Error
:
print
'%s %s= %s'
%
(
a
,
op
,
b
),
z
=
a
# assume it has no inplace ops
try
:
if
ires
is
TE
:
exec
(
'z %s= b'
%
op
)
try
:
except
:
exec
'z %s= b'
%
op
error
=
sys
.
exc_info
()[:
2
]
except
TypeError
:
print
'... %s.%s'
%
(
error
[
0
].
__module__
,
error
[
0
].
__name__
)
pass
else
:
else
:
print
'=>'
,
format_result
(
z
)
self
.
fail
(
"TypeError not raised"
)
else
:
def
do_prefix_binops
():
exec
(
'z %s= b'
%
op
)
for
a
in
candidates
:
self
.
assertEquals
(
ires
,
z
)
for
b
in
candidates
:
for
op
in
prefix_binops
:
print
'%s(%s, %s)'
%
(
op
,
a
,
b
),
try
:
x
=
eval
(
'%s(a, b)'
%
op
)
except
:
error
=
sys
.
exc_info
()[:
2
]
print
'... %s.%s'
%
(
error
[
0
].
__module__
,
error
[
0
].
__name__
)
else
:
print
'='
,
format_result
(
x
)
# New-style class version of CoerceNumber
def
test_prefix_binops
(
self
):
class
CoerceTo
(
object
):
for
ia
,
a
in
enumerate
(
candidates
):
def
__init__
(
self
,
arg
):
for
ib
,
b
in
enumerate
(
candidates
):
self
.
arg
=
arg
for
op
in
prefix_binops
:
def
__coerce__
(
self
,
other
):
res
=
prefix_results
[
ia
][
ib
]
if
isinstance
(
other
,
CoerceTo
):
if
res
is
TE
:
return
self
.
arg
,
other
.
arg
self
.
assertRaises
(
TypeError
,
eval
,
else
:
'%s(a, b)'
%
op
,
{
'a'
:
a
,
'b'
:
b
})
return
self
.
arg
,
other
else
:
self
.
assertEquals
(
format_result
(
res
),
format_result
(
eval
(
'%s(a, b)'
%
op
)),
'%s(%s, %s) == %s failed'
%
(
op
,
a
,
b
,
res
))
def
test_cmptypes
(
self
):
# Built-in tp_compare slots expect their arguments to have the
# same type, but a user-defined __coerce__ doesn't have to obey.
# SF #980352
evil_coercer
=
CoerceTo
(
42
)
# Make sure these don't crash any more
self
.
assertNotEquals
(
cmp
(
u'fish'
,
evil_coercer
),
0
)
self
.
assertNotEquals
(
cmp
(
slice
(
1
),
evil_coercer
),
0
)
# ...but that this still works
class
WackyComparer
(
object
):
def
__cmp__
(
slf
,
other
):
self
.
assert_
(
other
==
42
,
'expected evil_coercer, got %r'
%
other
)
return
0
self
.
assertEquals
(
cmp
(
WackyComparer
(),
evil_coercer
),
0
)
# ...and classic classes too, since that code path is a little different
class
ClassicWackyComparer
:
def
__cmp__
(
slf
,
other
):
self
.
assert_
(
other
==
42
,
'expected evil_coercer, got %r'
%
other
)
return
0
self
.
assertEquals
(
cmp
(
ClassicWackyComparer
(),
evil_coercer
),
0
)
def
test_main
():
warnings
.
filterwarnings
(
"ignore"
,
r'complex divmod\
(
\), // and % are deprecated'
,
DeprecationWarning
,
r'test.test_coercion$'
)
run_unittest
(
CoercionTest
)
def
assert_
(
expr
,
msg
=
None
):
if
__name__
==
"__main__"
:
if
not
expr
:
test_main
()
raise
AssertionError
,
msg
def
do_cmptypes
():
# Built-in tp_compare slots expect their arguments to have the
# same type, but a user-defined __coerce__ doesn't have to obey.
# SF #980352
evil_coercer
=
CoerceTo
(
42
)
# Make sure these don't crash any more
assert_
(
cmp
(
u'fish'
,
evil_coercer
)
!=
0
)
assert_
(
cmp
(
slice
(
1
),
evil_coercer
)
!=
0
)
# ...but that this still works
class
WackyComparer
(
object
):
def
__cmp__
(
self
,
other
):
assert_
(
other
==
42
,
'expected evil_coercer, got %r'
%
other
)
return
0
assert_
(
cmp
(
WackyComparer
(),
evil_coercer
)
==
0
)
# ...and classic classes too, since that code path is a little different
class
ClassicWackyComparer
:
def
__cmp__
(
self
,
other
):
assert_
(
other
==
42
,
'expected evil_coercer, got %r'
%
other
)
return
0
assert_
(
cmp
(
ClassicWackyComparer
(),
evil_coercer
)
==
0
)
warnings
.
filterwarnings
(
"ignore"
,
r'complex divmod\
(
\), // and % are deprecated'
,
DeprecationWarning
,
r'test.test_coercion$'
)
do_infix_binops
()
do_prefix_binops
()
do_cmptypes
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment