Skip to content

Commit 64ef491

Browse files
committed
Update test_int.py to CPython 3.10.2
1 parent 21c4ea5 commit 64ef491

File tree

1 file changed

+58
-9
lines changed

1 file changed

+58
-9
lines changed

Lib/test/test_int.py

Lines changed: 58 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -340,8 +340,6 @@ def test_int_memoryview(self):
340340
def test_string_float(self):
341341
self.assertRaises(ValueError, int, '1.2')
342342

343-
# TODO: RUSTPYTHON
344-
@unittest.expectedFailure
345343
def test_intconversion(self):
346344
# Test __int__()
347345
class ClassicMissingMethods:
@@ -380,15 +378,23 @@ def __trunc__(self):
380378
int(ExceptionalTrunc())
381379

382380
for trunc_result_base in (object, Classic):
383-
class Integral(trunc_result_base):
384-
def __int__(self):
381+
class Index(trunc_result_base):
382+
def __index__(self):
385383
return 42
386384

387385
class TruncReturnsNonInt(base):
388386
def __trunc__(self):
389-
return Integral()
390-
with self.assertWarns(DeprecationWarning):
391-
self.assertEqual(int(TruncReturnsNonInt()), 42)
387+
return Index()
388+
self.assertEqual(int(TruncReturnsNonInt()), 42)
389+
390+
class Intable(trunc_result_base):
391+
def __int__(self):
392+
return 42
393+
394+
class TruncReturnsNonIndex(base):
395+
def __trunc__(self):
396+
return Intable()
397+
self.assertEqual(int(TruncReturnsNonInt()), 42)
392398

393399
class NonIntegral(trunc_result_base):
394400
def __trunc__(self):
@@ -420,6 +426,21 @@ def __trunc__(self):
420426
with self.assertRaises(TypeError):
421427
int(TruncReturnsBadInt())
422428

429+
def test_int_subclass_with_index(self):
430+
class MyIndex(int):
431+
def __index__(self):
432+
return 42
433+
434+
class BadIndex(int):
435+
def __index__(self):
436+
return 42.0
437+
438+
my_int = MyIndex(7)
439+
self.assertEqual(my_int, 7)
440+
self.assertEqual(int(my_int), 7)
441+
442+
self.assertEqual(int(BadIndex()), 0)
443+
423444
def test_int_subclass_with_int(self):
424445
class MyInt(int):
425446
def __int__(self):
@@ -433,11 +454,21 @@ def __int__(self):
433454
self.assertEqual(my_int, 7)
434455
self.assertEqual(int(my_int), 42)
435456

436-
self.assertRaises(TypeError, int, BadInt())
457+
my_int = BadInt(7)
458+
self.assertEqual(my_int, 7)
459+
self.assertRaises(TypeError, int, my_int)
437460

438461
# TODO: RUSTPYTHON
439462
@unittest.expectedFailure
440463
def test_int_returns_int_subclass(self):
464+
class BadIndex:
465+
def __index__(self):
466+
return True
467+
468+
class BadIndex2(int):
469+
def __index__(self):
470+
return True
471+
441472
class BadInt:
442473
def __int__(self):
443474
return True
@@ -446,6 +477,10 @@ class BadInt2(int):
446477
def __int__(self):
447478
return True
448479

480+
class TruncReturnsBadIndex:
481+
def __trunc__(self):
482+
return BadIndex()
483+
449484
class TruncReturnsBadInt:
450485
def __trunc__(self):
451486
return BadInt()
@@ -454,6 +489,17 @@ class TruncReturnsIntSubclass:
454489
def __trunc__(self):
455490
return True
456491

492+
bad_int = BadIndex()
493+
with self.assertWarns(DeprecationWarning):
494+
n = int(bad_int)
495+
self.assertEqual(n, 1)
496+
self.assertIs(type(n), int)
497+
498+
bad_int = BadIndex2()
499+
n = int(bad_int)
500+
self.assertEqual(n, 0)
501+
self.assertIs(type(n), int)
502+
457503
bad_int = BadInt()
458504
with self.assertWarns(DeprecationWarning):
459505
n = int(bad_int)
@@ -466,12 +512,15 @@ def __trunc__(self):
466512
self.assertEqual(n, 1)
467513
self.assertIs(type(n), int)
468514

469-
bad_int = TruncReturnsBadInt()
515+
bad_int = TruncReturnsBadIndex()
470516
with self.assertWarns(DeprecationWarning):
471517
n = int(bad_int)
472518
self.assertEqual(n, 1)
473519
self.assertIs(type(n), int)
474520

521+
bad_int = TruncReturnsBadInt()
522+
self.assertRaises(TypeError, int, bad_int)
523+
475524
good_int = TruncReturnsIntSubclass()
476525
n = int(good_int)
477526
self.assertEqual(n, 1)

0 commit comments

Comments
 (0)