Commit | Line | Data |
---|---|---|
920dae64 AT |
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 | ||
6 | from test.test_support import TestFailed, verify, verbose | |
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) | |
20 | verify(1L / mhuge == 0.0) | |
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) | |
26 | verify((1000000 * huge) / huge == 1000000) | |
27 | ||
28 | namespace = {'huge': huge, 'mhuge': mhuge} | |
29 | ||
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 | ||
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: | |
44 | raise TestFailed("expected underflow to 0 from %r" % underflow) | |
45 | ||
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 | ||
55 | test_true_division() |