Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_long_future.py @ 58765:2ba7677bfa95 legacy-trunk
testCopysign was defined twice in test_math; combine the definitions
| author | Mark Dickinson <dickinsm@gmail.com> |
|---|---|
| date | Sat, 06 Feb 2010 23:11:25 +0000 |
| parents | ad7e4141a3eb |
| children | b36cb4602e21 |
| rev | line source |
|---|---|
|
19677
91533675d6cb
Change long/long true division to return as many good bits as it can;
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1 from __future__ import division |
|
91533675d6cb
Change long/long true division to return as many good bits as it can;
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2 # When true division is the default, get rid of this and add it to |
|
91533675d6cb
Change long/long true division to return as many good bits as it can;
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
3 # test_long.py instead. In the meantime, it's too obscure to try to |
|
91533675d6cb
Change long/long true division to return as many good bits as it can;
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
4 # trick just part of test_long into using future division. |
|
91533675d6cb
Change long/long true division to return as many good bits as it can;
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
5 |
|
57941
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
6 import sys |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
7 import random |
|
57945
eb0bbaba0361
Use ldexp(q, exp) instead of q*2.**exp in true division test, to avoid bogus failures on platforms with broken pow (e.g., Ubuntu/ia64).
Mark Dickinson <dickinsm@gmail.com>
parents:
57941
diff
changeset
|
8 import math |
|
41392
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
9 import unittest |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
10 from test.test_support import run_unittest |
|
19677
91533675d6cb
Change long/long true division to return as many good bits as it can;
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
11 |
|
57941
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
12 # decorator for skipping tests on non-IEEE 754 platforms |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
13 requires_IEEE_754 = unittest.skipUnless( |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
14 float.__getformat__("double").startswith("IEEE"), |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
15 "test requires IEEE 754 doubles") |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
16 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
17 DBL_MAX = sys.float_info.max |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
18 DBL_MAX_EXP = sys.float_info.max_exp |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
19 DBL_MIN_EXP = sys.float_info.min_exp |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
20 DBL_MANT_DIG = sys.float_info.mant_dig |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
21 DBL_MIN_OVERFLOW = 2**DBL_MAX_EXP - 2**(DBL_MAX_EXP - DBL_MANT_DIG - 1) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
22 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
23 # pure Python version of correctly-rounded true division |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
24 def truediv(a, b): |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
25 """Correctly-rounded true division for integers.""" |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
26 negative = a^b < 0 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
27 a, b = abs(a), abs(b) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
28 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
29 # exceptions: division by zero, overflow |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
30 if not b: |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
31 raise ZeroDivisionError("division by zero") |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
32 if a >= DBL_MIN_OVERFLOW * b: |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
33 raise OverflowError("int/int too large to represent as a float") |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
34 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
35 # find integer d satisfying 2**(d - 1) <= a/b < 2**d |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
36 d = a.bit_length() - b.bit_length() |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
37 if d >= 0 and a >= 2**d * b or d < 0 and a * 2**-d >= b: |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
38 d += 1 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
39 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
40 # compute 2**-exp * a / b for suitable exp |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
41 exp = max(d, DBL_MIN_EXP) - DBL_MANT_DIG |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
42 a, b = a << max(-exp, 0), b << max(exp, 0) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
43 q, r = divmod(a, b) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
44 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
45 # round-half-to-even: fractional part is r/b, which is > 0.5 iff |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
46 # 2*r > b, and == 0.5 iff 2*r == b. |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
47 if 2*r > b or 2*r == b and q % 2 == 1: |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
48 q += 1 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
49 |
|
57945
eb0bbaba0361
Use ldexp(q, exp) instead of q*2.**exp in true division test, to avoid bogus failures on platforms with broken pow (e.g., Ubuntu/ia64).
Mark Dickinson <dickinsm@gmail.com>
parents:
57941
diff
changeset
|
50 result = math.ldexp(float(q), exp) |
|
57941
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
51 return -result if negative else result |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
52 |
|
41392
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
53 class TrueDivisionTests(unittest.TestCase): |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
54 def test(self): |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
55 huge = 1L << 40000 |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
56 mhuge = -huge |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
57 self.assertEqual(huge / huge, 1.0) |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
58 self.assertEqual(mhuge / mhuge, 1.0) |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
59 self.assertEqual(huge / mhuge, -1.0) |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
60 self.assertEqual(mhuge / huge, -1.0) |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
61 self.assertEqual(1 / huge, 0.0) |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
62 self.assertEqual(1L / huge, 0.0) |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
63 self.assertEqual(1 / mhuge, 0.0) |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
64 self.assertEqual(1L / mhuge, 0.0) |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
65 self.assertEqual((666 * huge + (huge >> 1)) / huge, 666.5) |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
66 self.assertEqual((666 * mhuge + (mhuge >> 1)) / mhuge, 666.5) |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
67 self.assertEqual((666 * huge + (huge >> 1)) / mhuge, -666.5) |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
68 self.assertEqual((666 * mhuge + (mhuge >> 1)) / huge, -666.5) |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
69 self.assertEqual(huge / (huge << 1), 0.5) |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
70 self.assertEqual((1000000 * huge) / huge, 1000000) |
|
19677
91533675d6cb
Change long/long true division to return as many good bits as it can;
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
71 |
|
41392
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
72 namespace = {'huge': huge, 'mhuge': mhuge} |
|
19678
82db9a9006ac
Fixed a typo and added more tests.
Tim Peters <tim.peters@gmail.com>
parents:
19677
diff
changeset
|
73 |
|
41392
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
74 for overflow in ["float(huge)", "float(mhuge)", |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
75 "huge / 1", "huge / 2L", "huge / -1", "huge / -2L", |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
76 "mhuge / 100", "mhuge / 100L"]: |
|
57870
606a45dbd10c
Issue #7553: test_long_future wasn't testing properly. Thanks Florent Xicluna
Mark Dickinson <dickinsm@gmail.com>
parents:
41532
diff
changeset
|
77 # If the "eval" does not happen in this module, |
|
606a45dbd10c
Issue #7553: test_long_future wasn't testing properly. Thanks Florent Xicluna
Mark Dickinson <dickinsm@gmail.com>
parents:
41532
diff
changeset
|
78 # true division is not enabled |
|
606a45dbd10c
Issue #7553: test_long_future wasn't testing properly. Thanks Florent Xicluna
Mark Dickinson <dickinsm@gmail.com>
parents:
41532
diff
changeset
|
79 with self.assertRaises(OverflowError): |
|
41392
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
80 eval(overflow, namespace) |
|
19677
91533675d6cb
Change long/long true division to return as many good bits as it can;
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
81 |
|
41392
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
82 for underflow in ["1 / huge", "2L / huge", "-1 / huge", "-2L / huge", |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
83 "100 / mhuge", "100L / mhuge"]: |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
84 result = eval(underflow, namespace) |
|
57870
606a45dbd10c
Issue #7553: test_long_future wasn't testing properly. Thanks Florent Xicluna
Mark Dickinson <dickinsm@gmail.com>
parents:
41532
diff
changeset
|
85 self.assertEqual(result, 0.0, 'expected underflow to 0 ' |
|
606a45dbd10c
Issue #7553: test_long_future wasn't testing properly. Thanks Florent Xicluna
Mark Dickinson <dickinsm@gmail.com>
parents:
41532
diff
changeset
|
86 'from {!r}'.format(underflow)) |
|
19789
94e141e20d61
Added some underflow-to-0.0 long/long true division tests.
Tim Peters <tim.peters@gmail.com>
parents:
19678
diff
changeset
|
87 |
|
41392
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
88 for zero in ["huge / 0", "huge / 0L", "mhuge / 0", "mhuge / 0L"]: |
|
57870
606a45dbd10c
Issue #7553: test_long_future wasn't testing properly. Thanks Florent Xicluna
Mark Dickinson <dickinsm@gmail.com>
parents:
41532
diff
changeset
|
89 with self.assertRaises(ZeroDivisionError): |
|
606a45dbd10c
Issue #7553: test_long_future wasn't testing properly. Thanks Florent Xicluna
Mark Dickinson <dickinsm@gmail.com>
parents:
41532
diff
changeset
|
90 eval(zero, namespace) |
|
41392
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
91 |
|
57941
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
92 def check_truediv(self, a, b, skip_small=True): |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
93 """Verify that the result of a/b is correctly rounded, by |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
94 comparing it with a pure Python implementation of correctly |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
95 rounded division. b should be nonzero.""" |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
96 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
97 a, b = long(a), long(b) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
98 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
99 # skip check for small a and b: in this case, the current |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
100 # implementation converts the arguments to float directly and |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
101 # then applies a float division. This can give doubly-rounded |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
102 # results on x87-using machines (particularly 32-bit Linux). |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
103 if skip_small and max(abs(a), abs(b)) < 2**DBL_MANT_DIG: |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
104 return |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
105 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
106 try: |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
107 # use repr so that we can distinguish between -0.0 and 0.0 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
108 expected = repr(truediv(a, b)) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
109 except OverflowError: |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
110 expected = 'overflow' |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
111 except ZeroDivisionError: |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
112 expected = 'zerodivision' |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
113 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
114 try: |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
115 got = repr(a / b) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
116 except OverflowError: |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
117 got = 'overflow' |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
118 except ZeroDivisionError: |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
119 got = 'zerodivision' |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
120 |
|
57950
ad7e4141a3eb
Use a more idiomatic check in check_truediv.
Mark Dickinson <dickinsm@gmail.com>
parents:
57945
diff
changeset
|
121 self.assertEqual(expected, got, "Incorrectly rounded division {}/{}: " |
|
ad7e4141a3eb
Use a more idiomatic check in check_truediv.
Mark Dickinson <dickinsm@gmail.com>
parents:
57945
diff
changeset
|
122 "expected {}, got {}".format(a, b, expected, got)) |
|
57941
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
123 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
124 @requires_IEEE_754 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
125 def test_correctly_rounded_true_division(self): |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
126 # more stringent tests than those above, checking that the |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
127 # result of true division of ints is always correctly rounded. |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
128 # This test should probably be considered CPython-specific. |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
129 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
130 # Exercise all the code paths not involving Gb-sized ints. |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
131 # ... divisions involving zero |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
132 self.check_truediv(123, 0) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
133 self.check_truediv(-456, 0) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
134 self.check_truediv(0, 3) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
135 self.check_truediv(0, -3) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
136 self.check_truediv(0, 0) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
137 # ... overflow or underflow by large margin |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
138 self.check_truediv(671 * 12345 * 2**DBL_MAX_EXP, 12345) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
139 self.check_truediv(12345, 345678 * 2**(DBL_MANT_DIG - DBL_MIN_EXP)) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
140 # ... a much larger or smaller than b |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
141 self.check_truediv(12345*2**100, 98765) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
142 self.check_truediv(12345*2**30, 98765*7**81) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
143 # ... a / b near a boundary: one of 1, 2**DBL_MANT_DIG, 2**DBL_MIN_EXP, |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
144 # 2**DBL_MAX_EXP, 2**(DBL_MIN_EXP-DBL_MANT_DIG) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
145 bases = (0, DBL_MANT_DIG, DBL_MIN_EXP, |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
146 DBL_MAX_EXP, DBL_MIN_EXP - DBL_MANT_DIG) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
147 for base in bases: |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
148 for exp in range(base - 15, base + 15): |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
149 self.check_truediv(75312*2**max(exp, 0), 69187*2**max(-exp, 0)) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
150 self.check_truediv(69187*2**max(exp, 0), 75312*2**max(-exp, 0)) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
151 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
152 # overflow corner case |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
153 for m in [1, 2, 7, 17, 12345, 7**100, |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
154 -1, -2, -5, -23, -67891, -41**50]: |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
155 for n in range(-10, 10): |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
156 self.check_truediv(m*DBL_MIN_OVERFLOW + n, m) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
157 self.check_truediv(m*DBL_MIN_OVERFLOW + n, -m) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
158 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
159 # check detection of inexactness in shifting stage |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
160 for n in range(250): |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
161 # (2**DBL_MANT_DIG+1)/(2**DBL_MANT_DIG) lies halfway |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
162 # between two representable floats, and would usually be |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
163 # rounded down under round-half-to-even. The tiniest of |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
164 # additions to the numerator should cause it to be rounded |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
165 # up instead. |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
166 self.check_truediv((2**DBL_MANT_DIG + 1)*12345*2**200 + 2**n, |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
167 2**DBL_MANT_DIG*12345) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
168 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
169 # 1/2731 is one of the smallest division cases that's subject |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
170 # to double rounding on IEEE 754 machines working internally with |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
171 # 64-bit precision. On such machines, the next check would fail, |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
172 # were it not explicitly skipped in check_truediv. |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
173 self.check_truediv(1, 2731) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
174 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
175 # a particularly bad case for the old algorithm: gives an |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
176 # error of close to 3.5 ulps. |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
177 self.check_truediv(295147931372582273023, 295147932265116303360) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
178 for i in range(1000): |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
179 self.check_truediv(10**(i+1), 10**i) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
180 self.check_truediv(10**i, 10**(i+1)) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
181 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
182 # test round-half-to-even behaviour, normal result |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
183 for m in [1, 2, 4, 7, 8, 16, 17, 32, 12345, 7**100, |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
184 -1, -2, -5, -23, -67891, -41**50]: |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
185 for n in range(-10, 10): |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
186 self.check_truediv(2**DBL_MANT_DIG*m + n, m) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
187 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
188 # test round-half-to-even, subnormal result |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
189 for n in range(-20, 20): |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
190 self.check_truediv(n, 2**1076) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
191 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
192 # largeish random divisions: a/b where |a| <= |b| <= |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
193 # 2*|a|; |ans| is between 0.5 and 1.0, so error should |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
194 # always be bounded by 2**-54 with equality possible only |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
195 # if the least significant bit of q=ans*2**53 is zero. |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
196 for M in [10**10, 10**100, 10**1000]: |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
197 for i in range(1000): |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
198 a = random.randrange(1, M) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
199 b = random.randrange(a, 2*a+1) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
200 self.check_truediv(a, b) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
201 self.check_truediv(-a, b) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
202 self.check_truediv(a, -b) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
203 self.check_truediv(-a, -b) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
204 |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
205 # and some (genuinely) random tests |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
206 for _ in range(10000): |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
207 a_bits = random.randrange(1000) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
208 b_bits = random.randrange(1, 1000) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
209 x = random.randrange(2**a_bits) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
210 y = random.randrange(1, 2**b_bits) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
211 self.check_truediv(x, y) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
212 self.check_truediv(x, -y) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
213 self.check_truediv(-x, y) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
214 self.check_truediv(-x, -y) |
|
c4e60988834d
Issue #1811: Improve accuracy and consistency of true division for integers.
Mark Dickinson <dickinsm@gmail.com>
parents:
57870
diff
changeset
|
215 |
|
19678
82db9a9006ac
Fixed a typo and added more tests.
Tim Peters <tim.peters@gmail.com>
parents:
19677
diff
changeset
|
216 |
|
41392
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
217 def test_main(): |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
218 run_unittest(TrueDivisionTests) |
|
41532
4b9fa8092e82
Whitespace normalization. Ugh, we really need to do this more often.
Neal Norwitz <nnorwitz@gmail.com>
parents:
41392
diff
changeset
|
219 |
|
41392
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
220 if __name__ == "__main__": |
|
9a50e2b6b685
Convert test_long_future to use unittest.
Collin Winter <collinw@gmail.com>
parents:
24364
diff
changeset
|
221 test_main() |
