bpo-20092. Use index in constructors of int, float and complex. (… · python/cpython@bdbad71 (original) (raw)
`@@ -378,15 +378,23 @@ def trunc(self):
`
378
378
`int(ExceptionalTrunc())
`
379
379
``
380
380
`for trunc_result_base in (object, Classic):
`
381
``
`-
class Integral(trunc_result_base):
`
382
``
`-
def int(self):
`
``
381
`+
class Index(trunc_result_base):
`
``
382
`+
def index(self):
`
383
383
`return 42
`
384
384
``
385
385
`class TruncReturnsNonInt(base):
`
386
386
`def trunc(self):
`
387
``
`-
return Integral()
`
388
``
`-
with self.assertWarns(DeprecationWarning):
`
389
``
`-
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)
`
390
398
``
391
399
`class NonIntegral(trunc_result_base):
`
392
400
`def trunc(self):
`
`@@ -418,6 +426,21 @@ def trunc(self):
`
418
426
`with self.assertRaises(TypeError):
`
419
427
`int(TruncReturnsBadInt())
`
420
428
``
``
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
+
421
444
`def test_int_subclass_with_int(self):
`
422
445
`class MyInt(int):
`
423
446
`def int(self):
`
`@@ -431,9 +454,19 @@ def int(self):
`
431
454
`self.assertEqual(my_int, 7)
`
432
455
`self.assertEqual(int(my_int), 42)
`
433
456
``
434
``
`-
self.assertRaises(TypeError, int, BadInt())
`
``
457
`+
my_int = BadInt(7)
`
``
458
`+
self.assertEqual(my_int, 7)
`
``
459
`+
self.assertRaises(TypeError, int, my_int)
`
435
460
``
436
461
`def test_int_returns_int_subclass(self):
`
``
462
`+
class BadIndex:
`
``
463
`+
def index(self):
`
``
464
`+
return True
`
``
465
+
``
466
`+
class BadIndex2(int):
`
``
467
`+
def index(self):
`
``
468
`+
return True
`
``
469
+
437
470
`class BadInt:
`
438
471
`def int(self):
`
439
472
`return True
`
`@@ -442,6 +475,10 @@ class BadInt2(int):
`
442
475
`def int(self):
`
443
476
`return True
`
444
477
``
``
478
`+
class TruncReturnsBadIndex:
`
``
479
`+
def trunc(self):
`
``
480
`+
return BadIndex()
`
``
481
+
445
482
`class TruncReturnsBadInt:
`
446
483
`def trunc(self):
`
447
484
`return BadInt()
`
`@@ -450,6 +487,17 @@ class TruncReturnsIntSubclass:
`
450
487
`def trunc(self):
`
451
488
`return True
`
452
489
``
``
490
`+
bad_int = BadIndex()
`
``
491
`+
with self.assertWarns(DeprecationWarning):
`
``
492
`+
n = int(bad_int)
`
``
493
`+
self.assertEqual(n, 1)
`
``
494
`+
self.assertIs(type(n), int)
`
``
495
+
``
496
`+
bad_int = BadIndex2()
`
``
497
`+
n = int(bad_int)
`
``
498
`+
self.assertEqual(n, 0)
`
``
499
`+
self.assertIs(type(n), int)
`
``
500
+
453
501
`bad_int = BadInt()
`
454
502
`with self.assertWarns(DeprecationWarning):
`
455
503
`n = int(bad_int)
`
`@@ -462,6 +510,12 @@ def trunc(self):
`
462
510
`self.assertEqual(n, 1)
`
463
511
`self.assertIs(type(n), int)
`
464
512
``
``
513
`+
bad_int = TruncReturnsBadIndex()
`
``
514
`+
with self.assertWarns(DeprecationWarning):
`
``
515
`+
n = int(bad_int)
`
``
516
`+
self.assertEqual(n, 1)
`
``
517
`+
self.assertIs(type(n), int)
`
``
518
+
465
519
`bad_int = TruncReturnsBadInt()
`
466
520
`with self.assertWarns(DeprecationWarning):
`
467
521
`n = int(bad_int)
`