Issue #1869 (and 4707, 5118, 5473, 1456775): use the new · python/cpython@e6a076d (original) (raw)

`@@ -389,6 +389,88 @@ def test_short_repr(self):

`

389

389

`self.assertEqual(s, repr(float(s)))

`

390

390

`self.assertEqual(negs, repr(float(negs)))

`

391

391

``

``

392

`+

class RoundTestCase(unittest.TestCase):

`

``

393

`+

@unittest.skipUnless(float.getformat("double").startswith("IEEE"),

`

``

394

`+

"test requires IEEE 754 doubles")

`

``

395

`+

def test_inf_nan(self):

`

``

396

`+

self.assertRaises(OverflowError, round, INF)

`

``

397

`+

self.assertRaises(OverflowError, round, -INF)

`

``

398

`+

self.assertRaises(ValueError, round, NAN)

`

``

399

+

``

400

`+

@unittest.skipUnless(float.getformat("double").startswith("IEEE"),

`

``

401

`+

"test requires IEEE 754 doubles")

`

``

402

`+

def test_large_n(self):

`

``

403

`+

for n in [324, 325, 400, 231-1, 231, 232, 2100]:

`

``

404

`+

self.assertEqual(round(123.456, n), 123.456)

`

``

405

`+

self.assertEqual(round(-123.456, n), -123.456)

`

``

406

`+

self.assertEqual(round(1e300, n), 1e300)

`

``

407

`+

self.assertEqual(round(1e-320, n), 1e-320)

`

``

408

`+

self.assertEqual(round(1e150, 300), 1e150)

`

``

409

`+

self.assertEqual(round(1e300, 307), 1e300)

`

``

410

`+

self.assertEqual(round(-3.1415, 308), -3.1415)

`

``

411

`+

self.assertEqual(round(1e150, 309), 1e150)

`

``

412

`+

self.assertEqual(round(1.4e-315, 315), 1e-315)

`

``

413

+

``

414

`+

@unittest.skipUnless(float.getformat("double").startswith("IEEE"),

`

``

415

`+

"test requires IEEE 754 doubles")

`

``

416

`+

def test_small_n(self):

`

``

417

`+

for n in [-308, -309, -400, 1-231, -231, -231-1, -2100]:

`

``

418

`+

self.assertEqual(round(123.456, n), 0.0)

`

``

419

`+

self.assertEqual(round(-123.456, n), -0.0)

`

``

420

`+

self.assertEqual(round(1e300, n), 0.0)

`

``

421

`+

self.assertEqual(round(1e-320, n), 0.0)

`

``

422

+

``

423

`+

@unittest.skipUnless(float.getformat("double").startswith("IEEE"),

`

``

424

`+

"test requires IEEE 754 doubles")

`

``

425

`+

def test_overflow(self):

`

``

426

`+

self.assertRaises(OverflowError, round, 1.6e308, -308)

`

``

427

`+

self.assertRaises(OverflowError, round, -1.7e308, -308)

`

``

428

+

``

429

`+

@unittest.skipUnless(getattr(sys, 'float_repr_style', '') == 'short',

`

``

430

`+

"applies only when using short float repr style")

`

``

431

`+

def test_previous_round_bugs(self):

`

``

432

`+

particular cases that have occurred in bug reports

`

``

433

`+

self.assertEqual(round(562949953421312.5, 1),

`

``

434

`+

562949953421312.5)

`

``

435

`+

self.assertEqual(round(56294995342131.5, 3),

`

``

436

`+

56294995342131.5)

`

``

437

`+

round-half-even

`

``

438

`+

self.assertEqual(round(25.0, -1), 20.0)

`

``

439

`+

self.assertEqual(round(35.0, -1), 40.0)

`

``

440

`+

self.assertEqual(round(45.0, -1), 40.0)

`

``

441

`+

self.assertEqual(round(55.0, -1), 60.0)

`

``

442

`+

self.assertEqual(round(65.0, -1), 60.0)

`

``

443

`+

self.assertEqual(round(75.0, -1), 80.0)

`

``

444

`+

self.assertEqual(round(85.0, -1), 80.0)

`

``

445

`+

self.assertEqual(round(95.0, -1), 100.0)

`

``

446

+

``

447

`+

@unittest.skipUnless(getattr(sys, 'float_repr_style', '') == 'short',

`

``

448

`+

"applies only when using short float repr style")

`

``

449

`+

def test_matches_float_format(self):

`

``

450

`+

round should give the same results as float formatting

`

``

451

`+

for i in range(500):

`

``

452

`+

x = i/1000.

`

``

453

`+

self.assertEqual(float(format(x, '.0f')), round(x, 0))

`

``

454

`+

self.assertEqual(float(format(x, '.1f')), round(x, 1))

`

``

455

`+

self.assertEqual(float(format(x, '.2f')), round(x, 2))

`

``

456

`+

self.assertEqual(float(format(x, '.3f')), round(x, 3))

`

``

457

+

``

458

`+

for i in range(5, 5000, 10):

`

``

459

`+

x = i/1000.

`

``

460

`+

self.assertEqual(float(format(x, '.0f')), round(x, 0))

`

``

461

`+

self.assertEqual(float(format(x, '.1f')), round(x, 1))

`

``

462

`+

self.assertEqual(float(format(x, '.2f')), round(x, 2))

`

``

463

`+

self.assertEqual(float(format(x, '.3f')), round(x, 3))

`

``

464

+

``

465

`+

for i in range(500):

`

``

466

`+

x = random.random()

`

``

467

`+

self.assertEqual(float(format(x, '.0f')), round(x, 0))

`

``

468

`+

self.assertEqual(float(format(x, '.1f')), round(x, 1))

`

``

469

`+

self.assertEqual(float(format(x, '.2f')), round(x, 2))

`

``

470

`+

self.assertEqual(float(format(x, '.3f')), round(x, 3))

`

``

471

+

``

472

+

``

473

+

392

474

`# Beginning with Python 2.6 float has cross platform compatible

`

393

475

`# ways to create and represent inf and nan

`

394

476

`class InfNanTest(unittest.TestCase):

`

`@@ -878,6 +960,7 @@ def test_main():

`

878

960

`IEEEFormatTestCase,

`

879

961

`FormatTestCase,

`

880

962

`ReprTestCase,

`

``

963

`+

RoundTestCase,

`

881

964

`InfNanTest,

`

882

965

`HexFloatTestCase,

`

883

966

` )

`