@@ -50,12 +50,34 @@ class Int:
50
50
def __int__ (self ):
51
51
return 99
52
52
53
+ class IntSubclass (int ):
54
+ def __int__ (self ):
55
+ return 99
56
+
57
+ class BadInt :
58
+ def __int__ (self ):
59
+ return 1.0
60
+
61
+ class BadInt2 :
62
+ def __int__ (self ):
63
+ return True
64
+
65
+ class BadInt3 (int ):
66
+ def __int__ (self ):
67
+ return True
68
+
69
+
53
70
class Unsigned_TestCase (unittest .TestCase ):
54
71
def test_b (self ):
55
72
from _testcapi import getargs_b
56
73
# b returns 'unsigned char', and does range checking (0 ... UCHAR_MAX)
57
74
self .assertRaises (TypeError , getargs_b , 3.14 )
58
75
self .assertEqual (99 , getargs_b (Int ()))
76
+ self .assertEqual (0 , getargs_b (IntSubclass ()))
77
+ self .assertRaises (TypeError , getargs_b , BadInt ())
78
+ with self .assertWarns (DeprecationWarning ):
79
+ self .assertEqual (1 , getargs_b (BadInt2 ()))
80
+ self .assertEqual (0 , getargs_b (BadInt3 ()))
59
81
60
82
self .assertRaises (OverflowError , getargs_b , - 1 )
61
83
self .assertEqual (0 , getargs_b (0 ))
@@ -70,6 +92,11 @@ def test_B(self):
70
92
# B returns 'unsigned char', no range checking
71
93
self .assertRaises (TypeError , getargs_B , 3.14 )
72
94
self .assertEqual (99 , getargs_B (Int ()))
95
+ self .assertEqual (0 , getargs_B (IntSubclass ()))
96
+ self .assertRaises (TypeError , getargs_B , BadInt ())
97
+ with self .assertWarns (DeprecationWarning ):
98
+ self .assertEqual (1 , getargs_B (BadInt2 ()))
99
+ self .assertEqual (0 , getargs_B (BadInt3 ()))
73
100
74
101
self .assertEqual (UCHAR_MAX , getargs_B (- 1 ))
75
102
self .assertEqual (0 , getargs_B (0 ))
@@ -84,6 +111,11 @@ def test_H(self):
84
111
# H returns 'unsigned short', no range checking
85
112
self .assertRaises (TypeError , getargs_H , 3.14 )
86
113
self .assertEqual (99 , getargs_H (Int ()))
114
+ self .assertEqual (0 , getargs_H (IntSubclass ()))
115
+ self .assertRaises (TypeError , getargs_H , BadInt ())
116
+ with self .assertWarns (DeprecationWarning ):
117
+ self .assertEqual (1 , getargs_H (BadInt2 ()))
118
+ self .assertEqual (0 , getargs_H (BadInt3 ()))
87
119
88
120
self .assertEqual (USHRT_MAX , getargs_H (- 1 ))
89
121
self .assertEqual (0 , getargs_H (0 ))
@@ -99,6 +131,11 @@ def test_I(self):
99
131
# I returns 'unsigned int', no range checking
100
132
self .assertRaises (TypeError , getargs_I , 3.14 )
101
133
self .assertEqual (99 , getargs_I (Int ()))
134
+ self .assertEqual (0 , getargs_I (IntSubclass ()))
135
+ self .assertRaises (TypeError , getargs_I , BadInt ())
136
+ with self .assertWarns (DeprecationWarning ):
137
+ self .assertEqual (1 , getargs_I (BadInt2 ()))
138
+ self .assertEqual (0 , getargs_I (BadInt3 ()))
102
139
103
140
self .assertEqual (UINT_MAX , getargs_I (- 1 ))
104
141
self .assertEqual (0 , getargs_I (0 ))
@@ -115,6 +152,10 @@ def test_k(self):
115
152
# it does not accept float, or instances with __int__
116
153
self .assertRaises (TypeError , getargs_k , 3.14 )
117
154
self .assertRaises (TypeError , getargs_k , Int ())
155
+ self .assertEqual (0 , getargs_k (IntSubclass ()))
156
+ self .assertRaises (TypeError , getargs_k , BadInt ())
157
+ self .assertRaises (TypeError , getargs_k , BadInt2 ())
158
+ self .assertEqual (0 , getargs_k (BadInt3 ()))
118
159
119
160
self .assertEqual (ULONG_MAX , getargs_k (- 1 ))
120
161
self .assertEqual (0 , getargs_k (0 ))
@@ -131,6 +172,11 @@ def test_h(self):
131
172
# h returns 'short', and does range checking (SHRT_MIN ... SHRT_MAX)
132
173
self .assertRaises (TypeError , getargs_h , 3.14 )
133
174
self .assertEqual (99 , getargs_h (Int ()))
175
+ self .assertEqual (0 , getargs_h (IntSubclass ()))
176
+ self .assertRaises (TypeError , getargs_h , BadInt ())
177
+ with self .assertWarns (DeprecationWarning ):
178
+ self .assertEqual (1 , getargs_h (BadInt2 ()))
179
+ self .assertEqual (0 , getargs_h (BadInt3 ()))
134
180
135
181
self .assertRaises (OverflowError , getargs_h , SHRT_MIN - 1 )
136
182
self .assertEqual (SHRT_MIN , getargs_h (SHRT_MIN ))
@@ -145,6 +191,11 @@ def test_i(self):
145
191
# i returns 'int', and does range checking (INT_MIN ... INT_MAX)
146
192
self .assertRaises (TypeError , getargs_i , 3.14 )
147
193
self .assertEqual (99 , getargs_i (Int ()))
194
+ self .assertEqual (0 , getargs_i (IntSubclass ()))
195
+ self .assertRaises (TypeError , getargs_i , BadInt ())
196
+ with self .assertWarns (DeprecationWarning ):
197
+ self .assertEqual (1 , getargs_i (BadInt2 ()))
198
+ self .assertEqual (0 , getargs_i (BadInt3 ()))
148
199
149
200
self .assertRaises (OverflowError , getargs_i , INT_MIN - 1 )
150
201
self .assertEqual (INT_MIN , getargs_i (INT_MIN ))
@@ -159,6 +210,11 @@ def test_l(self):
159
210
# l returns 'long', and does range checking (LONG_MIN ... LONG_MAX)
160
211
self .assertRaises (TypeError , getargs_l , 3.14 )
161
212
self .assertEqual (99 , getargs_l (Int ()))
213
+ self .assertEqual (0 , getargs_l (IntSubclass ()))
214
+ self .assertRaises (TypeError , getargs_l , BadInt ())
215
+ with self .assertWarns (DeprecationWarning ):
216
+ self .assertEqual (1 , getargs_l (BadInt2 ()))
217
+ self .assertEqual (0 , getargs_l (BadInt3 ()))
162
218
163
219
self .assertRaises (OverflowError , getargs_l , LONG_MIN - 1 )
164
220
self .assertEqual (LONG_MIN , getargs_l (LONG_MIN ))
@@ -174,6 +230,10 @@ def test_n(self):
174
230
# (PY_SSIZE_T_MIN ... PY_SSIZE_T_MAX)
175
231
self .assertRaises (TypeError , getargs_n , 3.14 )
176
232
self .assertRaises (TypeError , getargs_n , Int ())
233
+ self .assertEqual (0 , getargs_n (IntSubclass ()))
234
+ self .assertRaises (TypeError , getargs_n , BadInt ())
235
+ self .assertRaises (TypeError , getargs_n , BadInt2 ())
236
+ self .assertEqual (0 , getargs_n (BadInt3 ()))
177
237
178
238
self .assertRaises (OverflowError , getargs_n , PY_SSIZE_T_MIN - 1 )
179
239
self .assertEqual (PY_SSIZE_T_MIN , getargs_n (PY_SSIZE_T_MIN ))
@@ -192,6 +252,11 @@ def test_L(self):
192
252
self .assertRaises (TypeError , getargs_L , 3.14 )
193
253
self .assertRaises (TypeError , getargs_L , "Hello" )
194
254
self .assertEqual (99 , getargs_L (Int ()))
255
+ self .assertEqual (0 , getargs_L (IntSubclass ()))
256
+ self .assertRaises (TypeError , getargs_L , BadInt ())
257
+ with self .assertWarns (DeprecationWarning ):
258
+ self .assertEqual (1 , getargs_L (BadInt2 ()))
259
+ self .assertEqual (0 , getargs_L (BadInt3 ()))
195
260
196
261
self .assertRaises (OverflowError , getargs_L , LLONG_MIN - 1 )
197
262
self .assertEqual (LLONG_MIN , getargs_L (LLONG_MIN ))
@@ -206,6 +271,11 @@ def test_K(self):
206
271
# K return 'unsigned long long', no range checking
207
272
self .assertRaises (TypeError , getargs_K , 3.14 )
208
273
self .assertRaises (TypeError , getargs_K , Int ())
274
+ self .assertEqual (0 , getargs_K (IntSubclass ()))
275
+ self .assertRaises (TypeError , getargs_K , BadInt ())
276
+ self .assertRaises (TypeError , getargs_K , BadInt2 ())
277
+ self .assertEqual (0 , getargs_K (BadInt3 ()))
278
+
209
279
self .assertEqual (ULLONG_MAX , getargs_K (ULLONG_MAX ))
210
280
self .assertEqual (0 , getargs_K (0 ))
211
281
self .assertEqual (0 , getargs_K (ULLONG_MAX + 1 ))
0 commit comments