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)

`