Tim Peters | e2a6000 | 2001-09-04 06:17:36 +0000 | [diff] [blame] | 1 | from __future__ import division |
| 2 | # When true division is the default, get rid of this and add it to |
| 3 | # test_long.py instead. In the meantime, it's too obscure to try to |
| 4 | # trick just part of test_long into using future division. |
| 5 | |
Barry Warsaw | 04f357c | 2002-07-23 19:04:11 +0000 | [diff] [blame] | 6 | from test.test_support import TestFailed, verify, verbose |
Tim Peters | e2a6000 | 2001-09-04 06:17:36 +0000 | [diff] [blame] | 7 | |
| 8 | def test_true_division(): |
| 9 | if verbose: |
| 10 | print "long true division" |
| 11 | huge = 1L << 40000 |
| 12 | mhuge = -huge |
| 13 | verify(huge / huge == 1.0) |
| 14 | verify(mhuge / mhuge == 1.0) |
| 15 | verify(huge / mhuge == -1.0) |
| 16 | verify(mhuge / huge == -1.0) |
| 17 | verify(1 / huge == 0.0) |
| 18 | verify(1L / huge == 0.0) |
| 19 | verify(1 / mhuge == 0.0) |
Tim Peters | bc1c7a0 | 2001-09-04 06:33:00 +0000 | [diff] [blame] | 20 | verify(1L / mhuge == 0.0) |
Tim Peters | e2a6000 | 2001-09-04 06:17:36 +0000 | [diff] [blame] | 21 | verify((666 * huge + (huge >> 1)) / huge == 666.5) |
| 22 | verify((666 * mhuge + (mhuge >> 1)) / mhuge == 666.5) |
| 23 | verify((666 * huge + (huge >> 1)) / mhuge == -666.5) |
| 24 | verify((666 * mhuge + (mhuge >> 1)) / huge == -666.5) |
| 25 | verify(huge / (huge << 1) == 0.5) |
Tim Peters | bc1c7a0 | 2001-09-04 06:33:00 +0000 | [diff] [blame] | 26 | verify((1000000 * huge) / huge == 1000000) |
Tim Peters | e2a6000 | 2001-09-04 06:17:36 +0000 | [diff] [blame] | 27 | |
| 28 | namespace = {'huge': huge, 'mhuge': mhuge} |
Tim Peters | bc1c7a0 | 2001-09-04 06:33:00 +0000 | [diff] [blame] | 29 | |
Tim Peters | e2a6000 | 2001-09-04 06:17:36 +0000 | [diff] [blame] | 30 | for overflow in ["float(huge)", "float(mhuge)", |
| 31 | "huge / 1", "huge / 2L", "huge / -1", "huge / -2L", |
| 32 | "mhuge / 100", "mhuge / 100L"]: |
| 33 | try: |
| 34 | eval(overflow, namespace) |
| 35 | except OverflowError: |
| 36 | pass |
| 37 | else: |
| 38 | raise TestFailed("expected OverflowError from %r" % overflow) |
| 39 | |
Tim Peters | 4bd810a | 2001-09-06 22:03:36 +0000 | [diff] [blame] | 40 | for underflow in ["1 / huge", "2L / huge", "-1 / huge", "-2L / huge", |
| 41 | "100 / mhuge", "100L / mhuge"]: |
| 42 | result = eval(underflow, namespace) |
| 43 | if result != 0.0: |
Tim Peters | 9652de9 | 2001-09-07 00:47:00 +0000 | [diff] [blame] | 44 | raise TestFailed("expected underflow to 0 from %r" % underflow) |
Tim Peters | 4bd810a | 2001-09-06 22:03:36 +0000 | [diff] [blame] | 45 | |
Tim Peters | bc1c7a0 | 2001-09-04 06:33:00 +0000 | [diff] [blame] | 46 | for zero in ["huge / 0", "huge / 0L", |
| 47 | "mhuge / 0", "mhuge / 0L"]: |
| 48 | try: |
| 49 | eval(zero, namespace) |
| 50 | except ZeroDivisionError: |
| 51 | pass |
| 52 | else: |
| 53 | raise TestFailed("expected ZeroDivisionError from %r" % zero) |
| 54 | |
Tim Peters | e2a6000 | 2001-09-04 06:17:36 +0000 | [diff] [blame] | 55 | test_true_division() |