Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_cmath.py @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 4d62a62ba44d |
| children |
| rev | line source |
|---|---|
|
66709
f2a4ade36a1e
Issue #10624: Use support.requires_IEEE_754 in all appropriate tests.
Eric Smith <eric@trueblade.com>
parents:
66268
diff
changeset
|
1 from test.support import run_unittest, requires_IEEE_754 |
|
f2a4ade36a1e
Issue #10624: Use support.requires_IEEE_754 in all appropriate tests.
Eric Smith <eric@trueblade.com>
parents:
66268
diff
changeset
|
2 from test.test_math import parse_testfile, test_file |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
3 import unittest |
|
32350
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24364
diff
changeset
|
4 import cmath, math |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
5 from cmath import phase, polar, rect, pi |
|
66064
fdcaac0e010a
Issue #10337: skip tests of tanh() sign in test_math and test_cmath if tanh()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
62972
diff
changeset
|
6 import sysconfig |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
7 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
8 INF = float('inf') |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
9 NAN = float('nan') |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
10 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
11 complex_zeros = [complex(x, y) for x in [0.0, -0.0] for y in [0.0, -0.0]] |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
12 complex_infinities = [complex(x, y) for x, y in [ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
13 (INF, 0.0), # 1st quadrant |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
14 (INF, 2.3), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
15 (INF, INF), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
16 (2.3, INF), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
17 (0.0, INF), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
18 (-0.0, INF), # 2nd quadrant |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
19 (-2.3, INF), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
20 (-INF, INF), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
21 (-INF, 2.3), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
22 (-INF, 0.0), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
23 (-INF, -0.0), # 3rd quadrant |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
24 (-INF, -2.3), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
25 (-INF, -INF), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
26 (-2.3, -INF), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
27 (-0.0, -INF), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
28 (0.0, -INF), # 4th quadrant |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
29 (2.3, -INF), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
30 (INF, -INF), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
31 (INF, -2.3), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
32 (INF, -0.0) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
33 ]] |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
34 complex_nans = [complex(x, y) for x, y in [ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
35 (NAN, -INF), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
36 (NAN, -2.3), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
37 (NAN, -0.0), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
38 (NAN, 0.0), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
39 (NAN, 2.3), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
40 (NAN, INF), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
41 (-INF, NAN), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
42 (-2.3, NAN), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
43 (-0.0, NAN), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
44 (0.0, NAN), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
45 (2.3, NAN), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
46 (INF, NAN) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
47 ]] |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
48 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
49 class CMathTests(unittest.TestCase): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
50 # list of all functions in cmath |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
51 test_functions = [getattr(cmath, fname) for fname in [ |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
52 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
53 'cos', 'cosh', 'exp', 'log', 'log10', 'sin', 'sinh', |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
54 'sqrt', 'tan', 'tanh']] |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
55 # test first and second arguments independently for 2-argument log |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
56 test_functions.append(lambda x : cmath.log(x, 1729. + 0j)) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
57 test_functions.append(lambda x : cmath.log(14.-27j, x)) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
58 |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
59 def setUp(self): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
60 self.test_values = open(test_file) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
61 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
62 def tearDown(self): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
63 self.test_values.close() |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
64 |
|
66066
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
65 def assertFloatIdentical(self, x, y): |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
66 """Fail unless floats x and y are identical, in the sense that: |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
67 (1) both x and y are nans, or |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
68 (2) both x and y are infinities, with the same sign, or |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
69 (3) both x and y are zeros, with the same sign, or |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
70 (4) x and y are both finite and nonzero, and x == y |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
71 |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
72 """ |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
73 msg = 'floats {!r} and {!r} are not identical' |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
74 |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
75 if math.isnan(x) or math.isnan(y): |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
76 if math.isnan(x) and math.isnan(y): |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
77 return |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
78 elif x == y: |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
79 if x != 0.0: |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
80 return |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
81 # both zero; check that signs match |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
82 elif math.copysign(1.0, x) == math.copysign(1.0, y): |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
83 return |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
84 else: |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
85 msg += ': zeros have different signs' |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
86 self.fail(msg.format(x, y)) |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
87 |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
88 def assertComplexIdentical(self, x, y): |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
89 """Fail unless complex numbers x and y have equal values and signs. |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
90 |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
91 In particular, if x and y both have real (or imaginary) part |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
92 zero, but the zeros have different signs, this test will fail. |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
93 |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
94 """ |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
95 self.assertFloatIdentical(x.real, y.real) |
|
e8f1ef5fd423
Update assertComplexIdentical to handle nans correctly.
Mark Dickinson <dickinsm@gmail.com>
parents:
66064
diff
changeset
|
96 self.assertFloatIdentical(x.imag, y.imag) |
|
66064
fdcaac0e010a
Issue #10337: skip tests of tanh() sign in test_math and test_cmath if tanh()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
62972
diff
changeset
|
97 |
|
57841
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
98 def rAssertAlmostEqual(self, a, b, rel_err = 2e-15, abs_err = 5e-323, |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
99 msg=None): |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
100 """Fail if the two floating-point numbers are not almost equal. |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
101 |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
102 Determine whether floating-point values a and b are equal to within |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
103 a (small) rounding error. The default values for rel_err and |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
104 abs_err are chosen to be suitable for platforms where a float is |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
105 represented by an IEEE 754 double. They allow an error of between |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
106 9 and 19 ulps. |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
107 """ |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
108 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
109 # special values testing |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
110 if math.isnan(a): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
111 if math.isnan(b): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
112 return |
|
57841
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
113 self.fail(msg or '{!r} should be nan'.format(b)) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
114 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
115 if math.isinf(a): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
116 if a == b: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
117 return |
|
57841
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
118 self.fail(msg or 'finite result where infinity expected: ' |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
119 'expected {!r}, got {!r}'.format(a, b)) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
120 |
|
57841
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
121 # if both a and b are zero, check whether they have the same sign |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
122 # (in theory there are examples where it would be legitimate for a |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
123 # and b to have opposite signs; in practice these hardly ever |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
124 # occur). |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
125 if not a and not b: |
|
57841
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
126 if math.copysign(1., a) != math.copysign(1., b): |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
127 self.fail(msg or 'zero has wrong sign: expected {!r}, ' |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
128 'got {!r}'.format(a, b)) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
129 |
|
57841
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
130 # if a-b overflows, or b is infinite, return False. Again, in |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
131 # theory there are examples where a is within a few ulps of the |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
132 # max representable float, and then b could legitimately be |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
133 # infinite. In practice these examples are rare. |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
134 try: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
135 absolute_error = abs(b-a) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
136 except OverflowError: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
137 pass |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
138 else: |
|
57841
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
139 # test passes if either the absolute error or the relative |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
140 # error is sufficiently small. The defaults amount to an |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
141 # error of between 9 ulps and 19 ulps on an IEEE-754 compliant |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
142 # machine. |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
143 if absolute_error <= max(abs_err, rel_err * abs(a)): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
144 return |
|
57841
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
145 self.fail(msg or |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
146 '{!r} and {!r} are not sufficiently close'.format(a, b)) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
147 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
148 def test_constants(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
149 e_expected = 2.71828182845904523536 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
150 pi_expected = 3.14159265358979323846 |
|
57835
4d430e55ad7c
Merged revisions 76943 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
55593
diff
changeset
|
151 self.assertAlmostEqual(cmath.pi, pi_expected, places=9, |
|
57841
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
152 msg="cmath.pi is {}; should be {}".format(cmath.pi, pi_expected)) |
|
57835
4d430e55ad7c
Merged revisions 76943 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
55593
diff
changeset
|
153 self.assertAlmostEqual(cmath.e, e_expected, places=9, |
|
57841
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
154 msg="cmath.e is {}; should be {}".format(cmath.e, e_expected)) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
155 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
156 def test_user_object(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
157 # Test automatic calling of __complex__ and __float__ by cmath |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
158 # functions |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
159 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
160 # some random values to use as test values; we avoid values |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
161 # for which any of the functions in cmath is undefined |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
162 # (i.e. 0., 1., -1., 1j, -1j) or would cause overflow |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
163 cx_arg = 4.419414439 + 1.497100113j |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
164 flt_arg = -6.131677725 |
|
32350
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24364
diff
changeset
|
165 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
166 # a variety of non-complex numbers, used to check that |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
167 # non-complex return values from __complex__ give an error |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
168 non_complexes = ["not complex", 1, 5, 2., None, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
169 object(), NotImplemented] |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
170 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
171 # Now we introduce a variety of classes whose instances might |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
172 # end up being passed to the cmath functions |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
173 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
174 # usual case: new-style class implementing __complex__ |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
175 class MyComplex(object): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
176 def __init__(self, value): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
177 self.value = value |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
178 def __complex__(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
179 return self.value |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
180 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
181 # old-style class implementing __complex__ |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
182 class MyComplexOS: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
183 def __init__(self, value): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
184 self.value = value |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
185 def __complex__(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
186 return self.value |
|
32350
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24364
diff
changeset
|
187 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
188 # classes for which __complex__ raises an exception |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
189 class SomeException(Exception): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
190 pass |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
191 class MyComplexException(object): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
192 def __complex__(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
193 raise SomeException |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
194 class MyComplexExceptionOS: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
195 def __complex__(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
196 raise SomeException |
|
32350
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24364
diff
changeset
|
197 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
198 # some classes not providing __float__ or __complex__ |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
199 class NeitherComplexNorFloat(object): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
200 pass |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
201 class NeitherComplexNorFloatOS: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
202 pass |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
203 class MyInt(object): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
204 def __int__(self): return 2 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
205 def __index__(self): return 2 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
206 class MyIntOS: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
207 def __int__(self): return 2 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
208 def __index__(self): return 2 |
|
4638
5f7d246bbeb7
New test module for complex math module
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
diff
changeset
|
209 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
210 # other possible combinations of __float__ and __complex__ |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
211 # that should work |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
212 class FloatAndComplex(object): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
213 def __float__(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
214 return flt_arg |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
215 def __complex__(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
216 return cx_arg |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
217 class FloatAndComplexOS: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
218 def __float__(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
219 return flt_arg |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
220 def __complex__(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
221 return cx_arg |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
222 class JustFloat(object): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
223 def __float__(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
224 return flt_arg |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
225 class JustFloatOS: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
226 def __float__(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
227 return flt_arg |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
228 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
229 for f in self.test_functions: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
230 # usual usage |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
231 self.assertEqual(f(MyComplex(cx_arg)), f(cx_arg)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
232 self.assertEqual(f(MyComplexOS(cx_arg)), f(cx_arg)) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
233 # other combinations of __float__ and __complex__ |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
234 self.assertEqual(f(FloatAndComplex()), f(cx_arg)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
235 self.assertEqual(f(FloatAndComplexOS()), f(cx_arg)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
236 self.assertEqual(f(JustFloat()), f(flt_arg)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
237 self.assertEqual(f(JustFloatOS()), f(flt_arg)) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
238 # TypeError should be raised for classes not providing |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
239 # either __complex__ or __float__, even if they provide |
|
50804
427e43d0e031
Merged revisions 68619 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47201
diff
changeset
|
240 # __int__ or __index__. An old-style class |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
241 # currently raises AttributeError instead of a TypeError; |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
242 # this could be considered a bug. |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
243 self.assertRaises(TypeError, f, NeitherComplexNorFloat()) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
244 self.assertRaises(TypeError, f, MyInt()) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
245 self.assertRaises(Exception, f, NeitherComplexNorFloatOS()) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
246 self.assertRaises(Exception, f, MyIntOS()) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
247 # non-complex return value from __complex__ -> TypeError |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
248 for bad_complex in non_complexes: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
249 self.assertRaises(TypeError, f, MyComplex(bad_complex)) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
250 self.assertRaises(TypeError, f, MyComplexOS(bad_complex)) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
251 # exceptions in __complex__ should be propagated correctly |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
252 self.assertRaises(SomeException, f, MyComplexException()) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
253 self.assertRaises(SomeException, f, MyComplexExceptionOS()) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
254 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
255 def test_input_type(self): |
|
85418
4d62a62ba44d
Issue #18783: Removed existing mentions of Python long type in docstrings,
Serhiy Storchaka <storchaka@gmail.com>
parents:
78640
diff
changeset
|
256 # ints should be acceptable inputs to all cmath |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
257 # functions, by virtue of providing a __float__ method |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
258 for f in self.test_functions: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
259 for arg in [2, 2.]: |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
260 self.assertEqual(f(arg), f(arg.__float__())) |
|
4811
9ae3cccfa7cd
Many scripts, but small changes. Update the way the scripts obtain the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4638
diff
changeset
|
261 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
262 # but strings should give a TypeError |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
263 for f in self.test_functions: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
264 for arg in ["a", "long_string", "0", "1j", ""]: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
265 self.assertRaises(TypeError, f, arg) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
266 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
267 def test_cmath_matches_math(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
268 # check that corresponding cmath and math functions are equal |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
269 # for floats in the appropriate range |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
270 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
271 # test_values in (0, 1) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
272 test_values = [0.01, 0.1, 0.2, 0.5, 0.9, 0.99] |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
273 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
274 # test_values for functions defined on [-1., 1.] |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
275 unit_interval = test_values + [-x for x in test_values] + \ |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
276 [0., 1., -1.] |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
277 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
278 # test_values for log, log10, sqrt |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
279 positive = test_values + [1.] + [1./x for x in test_values] |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
280 nonnegative = [0.] + positive |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
281 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
282 # test_values for functions defined on the whole real line |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
283 real_line = [0.] + positive + [-x for x in positive] |
|
4811
9ae3cccfa7cd
Many scripts, but small changes. Update the way the scripts obtain the
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4638
diff
changeset
|
284 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
285 test_functions = { |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
286 'acos' : unit_interval, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
287 'asin' : unit_interval, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
288 'atan' : real_line, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
289 'cos' : real_line, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
290 'cosh' : real_line, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
291 'exp' : real_line, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
292 'log' : positive, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
293 'log10' : positive, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
294 'sin' : real_line, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
295 'sinh' : real_line, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
296 'sqrt' : nonnegative, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
297 'tan' : real_line, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
298 'tanh' : real_line} |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
299 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
300 for fn, values in test_functions.items(): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
301 float_fn = getattr(math, fn) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
302 complex_fn = getattr(cmath, fn) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
303 for v in values: |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
304 z = complex_fn(v) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
305 self.rAssertAlmostEqual(float_fn(v), z.real) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
306 self.assertEqual(0., z.imag) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
307 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
308 # test two-argument version of log with various bases |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
309 for base in [0.5, 2., 10.]: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
310 for v in positive: |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
311 z = cmath.log(v, base) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
312 self.rAssertAlmostEqual(math.log(v, base), z.real) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
313 self.assertEqual(0., z.imag) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
314 |
|
66709
f2a4ade36a1e
Issue #10624: Use support.requires_IEEE_754 in all appropriate tests.
Eric Smith <eric@trueblade.com>
parents:
66268
diff
changeset
|
315 @requires_IEEE_754 |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
316 def test_specific_values(self): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
317 def rect_complex(z): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
318 """Wrapped version of rect that accepts a complex number instead of |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
319 two float arguments.""" |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
320 return cmath.rect(z.real, z.imag) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
321 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
322 def polar_complex(z): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
323 """Wrapped version of polar that returns a complex number instead of |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
324 two floats.""" |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
325 return complex(*polar(z)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
326 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
327 for id, fn, ar, ai, er, ei, flags in parse_testfile(test_file): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
328 arg = complex(ar, ai) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
329 expected = complex(er, ei) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
330 if fn == 'rect': |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
331 function = rect_complex |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
332 elif fn == 'polar': |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
333 function = polar_complex |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
334 else: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
335 function = getattr(cmath, fn) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
336 if 'divide-by-zero' in flags or 'invalid' in flags: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
337 try: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
338 actual = function(arg) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
339 except ValueError: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
340 continue |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
341 else: |
|
57841
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
342 self.fail('ValueError not raised in test ' |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
343 '{}: {}(complex({!r}, {!r}))'.format(id, fn, ar, ai)) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
344 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
345 if 'overflow' in flags: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
346 try: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
347 actual = function(arg) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
348 except OverflowError: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
349 continue |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
350 else: |
|
57841
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
351 self.fail('OverflowError not raised in test ' |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
352 '{}: {}(complex({!r}, {!r}))'.format(id, fn, ar, ai)) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
353 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
354 actual = function(arg) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
355 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
356 if 'ignore-real-sign' in flags: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
357 actual = complex(abs(actual.real), actual.imag) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
358 expected = complex(abs(expected.real), expected.imag) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
359 if 'ignore-imag-sign' in flags: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
360 actual = complex(actual.real, abs(actual.imag)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
361 expected = complex(expected.real, abs(expected.imag)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
362 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
363 # for the real part of the log function, we allow an |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
364 # absolute error of up to 2e-15. |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
365 if fn in ('log', 'log10'): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
366 real_abs_err = 2e-15 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
367 else: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
368 real_abs_err = 5e-323 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
369 |
|
57841
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
370 error_message = ( |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
371 '{}: {}(complex({!r}, {!r}))\n' |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
372 'Expected: complex({!r}, {!r})\n' |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
373 'Received: complex({!r}, {!r})\n' |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
374 'Received value insufficiently close to expected value.' |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
375 ).format(id, fn, ar, ai, |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
376 expected.real, expected.imag, |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
377 actual.real, actual.imag) |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
378 self.rAssertAlmostEqual(expected.real, actual.real, |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
379 abs_err=real_abs_err, |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
380 msg=error_message) |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
381 self.rAssertAlmostEqual(expected.imag, actual.imag, |
|
08df1c9ea643
Merged revisions 76948 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57835
diff
changeset
|
382 msg=error_message) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
383 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
384 def assertCISEqual(self, a, b): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
385 eps = 1E-7 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
386 if abs(a[0] - b[0]) > eps or abs(a[1] - b[1]) > eps: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
387 self.fail((a ,b)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
388 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
389 def test_polar(self): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
390 self.assertCISEqual(polar(0), (0., 0.)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
391 self.assertCISEqual(polar(1.), (1., 0.)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
392 self.assertCISEqual(polar(-1.), (1., pi)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
393 self.assertCISEqual(polar(1j), (1., pi/2)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
394 self.assertCISEqual(polar(-1j), (1., -pi/2)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
395 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
396 def test_phase(self): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
397 self.assertAlmostEqual(phase(0), 0.) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
398 self.assertAlmostEqual(phase(1.), 0.) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
399 self.assertAlmostEqual(phase(-1.), pi) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
400 self.assertAlmostEqual(phase(-1.+1E-300j), pi) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
401 self.assertAlmostEqual(phase(-1.-1E-300j), -pi) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
402 self.assertAlmostEqual(phase(1j), pi/2) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
403 self.assertAlmostEqual(phase(-1j), -pi/2) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
404 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
405 # zeros |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
406 self.assertEqual(phase(complex(0.0, 0.0)), 0.0) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
407 self.assertEqual(phase(complex(0.0, -0.0)), -0.0) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
408 self.assertEqual(phase(complex(-0.0, 0.0)), pi) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
409 self.assertEqual(phase(complex(-0.0, -0.0)), -pi) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
410 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
411 # infinities |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
412 self.assertAlmostEqual(phase(complex(-INF, -0.0)), -pi) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
413 self.assertAlmostEqual(phase(complex(-INF, -2.3)), -pi) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
414 self.assertAlmostEqual(phase(complex(-INF, -INF)), -0.75*pi) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
415 self.assertAlmostEqual(phase(complex(-2.3, -INF)), -pi/2) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
416 self.assertAlmostEqual(phase(complex(-0.0, -INF)), -pi/2) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
417 self.assertAlmostEqual(phase(complex(0.0, -INF)), -pi/2) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
418 self.assertAlmostEqual(phase(complex(2.3, -INF)), -pi/2) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
419 self.assertAlmostEqual(phase(complex(INF, -INF)), -pi/4) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
420 self.assertEqual(phase(complex(INF, -2.3)), -0.0) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
421 self.assertEqual(phase(complex(INF, -0.0)), -0.0) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
422 self.assertEqual(phase(complex(INF, 0.0)), 0.0) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
423 self.assertEqual(phase(complex(INF, 2.3)), 0.0) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
424 self.assertAlmostEqual(phase(complex(INF, INF)), pi/4) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
425 self.assertAlmostEqual(phase(complex(2.3, INF)), pi/2) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
426 self.assertAlmostEqual(phase(complex(0.0, INF)), pi/2) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
427 self.assertAlmostEqual(phase(complex(-0.0, INF)), pi/2) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
428 self.assertAlmostEqual(phase(complex(-2.3, INF)), pi/2) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
429 self.assertAlmostEqual(phase(complex(-INF, INF)), 0.75*pi) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
430 self.assertAlmostEqual(phase(complex(-INF, 2.3)), pi) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
431 self.assertAlmostEqual(phase(complex(-INF, 0.0)), pi) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
432 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
433 # real or imaginary part NaN |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
434 for z in complex_nans: |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
435 self.assertTrue(math.isnan(phase(z))) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
436 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
437 def test_abs(self): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
438 # zeros |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
439 for z in complex_zeros: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
440 self.assertEqual(abs(z), 0.0) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
441 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
442 # infinities |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
443 for z in complex_infinities: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
444 self.assertEqual(abs(z), INF) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
445 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
446 # real or imaginary part NaN |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
447 self.assertEqual(abs(complex(NAN, -INF)), INF) |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
448 self.assertTrue(math.isnan(abs(complex(NAN, -2.3)))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
449 self.assertTrue(math.isnan(abs(complex(NAN, -0.0)))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
450 self.assertTrue(math.isnan(abs(complex(NAN, 0.0)))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
451 self.assertTrue(math.isnan(abs(complex(NAN, 2.3)))) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
452 self.assertEqual(abs(complex(NAN, INF)), INF) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
453 self.assertEqual(abs(complex(-INF, NAN)), INF) |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
454 self.assertTrue(math.isnan(abs(complex(-2.3, NAN)))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
455 self.assertTrue(math.isnan(abs(complex(-0.0, NAN)))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
456 self.assertTrue(math.isnan(abs(complex(0.0, NAN)))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
457 self.assertTrue(math.isnan(abs(complex(2.3, NAN)))) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
458 self.assertEqual(abs(complex(INF, NAN)), INF) |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
459 self.assertTrue(math.isnan(abs(complex(NAN, NAN)))) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
460 |
|
66709
f2a4ade36a1e
Issue #10624: Use support.requires_IEEE_754 in all appropriate tests.
Eric Smith <eric@trueblade.com>
parents:
66268
diff
changeset
|
461 |
|
f2a4ade36a1e
Issue #10624: Use support.requires_IEEE_754 in all appropriate tests.
Eric Smith <eric@trueblade.com>
parents:
66268
diff
changeset
|
462 @requires_IEEE_754 |
|
f2a4ade36a1e
Issue #10624: Use support.requires_IEEE_754 in all appropriate tests.
Eric Smith <eric@trueblade.com>
parents:
66268
diff
changeset
|
463 def test_abs_overflows(self): |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
464 # result overflows |
|
66709
f2a4ade36a1e
Issue #10624: Use support.requires_IEEE_754 in all appropriate tests.
Eric Smith <eric@trueblade.com>
parents:
66268
diff
changeset
|
465 self.assertRaises(OverflowError, abs, complex(1.4e308, 1.4e308)) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
466 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
467 def assertCEqual(self, a, b): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
468 eps = 1E-7 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
469 if abs(a.real - b[0]) > eps or abs(a.imag - b[1]) > eps: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
470 self.fail((a ,b)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
471 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
472 def test_rect(self): |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
473 self.assertCEqual(rect(0, 0), (0, 0)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
474 self.assertCEqual(rect(1, 0), (1., 0)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
475 self.assertCEqual(rect(1, -pi), (-1., 0)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
476 self.assertCEqual(rect(1, pi/2), (0, 1.)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
477 self.assertCEqual(rect(1, -pi/2), (0, -1.)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
478 |
|
62968
53e7ae8ca039
Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents:
59615
diff
changeset
|
479 def test_isfinite(self): |
|
53e7ae8ca039
Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents:
59615
diff
changeset
|
480 real_vals = [float('-inf'), -2.3, -0.0, |
|
53e7ae8ca039
Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents:
59615
diff
changeset
|
481 0.0, 2.3, float('inf'), float('nan')] |
|
53e7ae8ca039
Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents:
59615
diff
changeset
|
482 for x in real_vals: |
|
53e7ae8ca039
Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents:
59615
diff
changeset
|
483 for y in real_vals: |
|
53e7ae8ca039
Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents:
59615
diff
changeset
|
484 z = complex(x, y) |
|
62972
1cf43c6e6566
assertEquals -> assertEqual
Mark Dickinson <dickinsm@gmail.com>
parents:
62968
diff
changeset
|
485 self.assertEqual(cmath.isfinite(z), |
|
62968
53e7ae8ca039
Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents:
59615
diff
changeset
|
486 math.isfinite(x) and math.isfinite(y)) |
|
53e7ae8ca039
Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents:
59615
diff
changeset
|
487 |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
488 def test_isnan(self): |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
489 self.assertFalse(cmath.isnan(1)) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
490 self.assertFalse(cmath.isnan(1j)) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
491 self.assertFalse(cmath.isnan(INF)) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
492 self.assertTrue(cmath.isnan(NAN)) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
493 self.assertTrue(cmath.isnan(complex(NAN, 0))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
494 self.assertTrue(cmath.isnan(complex(0, NAN))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
495 self.assertTrue(cmath.isnan(complex(NAN, NAN))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
496 self.assertTrue(cmath.isnan(complex(NAN, INF))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
497 self.assertTrue(cmath.isnan(complex(INF, NAN))) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
498 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
499 def test_isinf(self): |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
500 self.assertFalse(cmath.isinf(1)) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
501 self.assertFalse(cmath.isinf(1j)) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
502 self.assertFalse(cmath.isinf(NAN)) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
503 self.assertTrue(cmath.isinf(INF)) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
504 self.assertTrue(cmath.isinf(complex(INF, 0))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
505 self.assertTrue(cmath.isinf(complex(0, INF))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
506 self.assertTrue(cmath.isinf(complex(INF, INF))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
507 self.assertTrue(cmath.isinf(complex(NAN, INF))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50804
diff
changeset
|
508 self.assertTrue(cmath.isinf(complex(INF, NAN))) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43285
diff
changeset
|
509 |
|
66064
fdcaac0e010a
Issue #10337: skip tests of tanh() sign in test_math and test_cmath if tanh()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
62972
diff
changeset
|
510 @requires_IEEE_754 |
|
fdcaac0e010a
Issue #10337: skip tests of tanh() sign in test_math and test_cmath if tanh()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
62972
diff
changeset
|
511 @unittest.skipIf(sysconfig.get_config_var('TANH_PRESERVES_ZERO_SIGN') == 0, |
|
fdcaac0e010a
Issue #10337: skip tests of tanh() sign in test_math and test_cmath if tanh()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
62972
diff
changeset
|
512 "system tanh() function doesn't copy the sign") |
|
fdcaac0e010a
Issue #10337: skip tests of tanh() sign in test_math and test_cmath if tanh()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
62972
diff
changeset
|
513 def testTanhSign(self): |
|
66186
b11a84de4492
Streamline a cmath test (and fix some overlong lines into the bargain).
Mark Dickinson <dickinsm@gmail.com>
parents:
66066
diff
changeset
|
514 for z in complex_zeros: |
|
b11a84de4492
Streamline a cmath test (and fix some overlong lines into the bargain).
Mark Dickinson <dickinsm@gmail.com>
parents:
66066
diff
changeset
|
515 self.assertComplexIdentical(cmath.tanh(z), z) |
|
66064
fdcaac0e010a
Issue #10337: skip tests of tanh() sign in test_math and test_cmath if tanh()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
62972
diff
changeset
|
516 |
|
66268
825e480c930d
Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to
Mark Dickinson <dickinsm@gmail.com>
parents:
66186
diff
changeset
|
517 # The algorithm used for atan and atanh makes use of the system |
|
825e480c930d
Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to
Mark Dickinson <dickinsm@gmail.com>
parents:
66186
diff
changeset
|
518 # log1p function; If that system function doesn't respect the sign |
|
825e480c930d
Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to
Mark Dickinson <dickinsm@gmail.com>
parents:
66186
diff
changeset
|
519 # of zero, then atan and atanh will also have difficulties with |
|
825e480c930d
Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to
Mark Dickinson <dickinsm@gmail.com>
parents:
66186
diff
changeset
|
520 # the sign of complex zeros. |
|
825e480c930d
Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to
Mark Dickinson <dickinsm@gmail.com>
parents:
66186
diff
changeset
|
521 @requires_IEEE_754 |
|
825e480c930d
Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to
Mark Dickinson <dickinsm@gmail.com>
parents:
66186
diff
changeset
|
522 def testAtanSign(self): |
|
825e480c930d
Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to
Mark Dickinson <dickinsm@gmail.com>
parents:
66186
diff
changeset
|
523 for z in complex_zeros: |
|
825e480c930d
Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to
Mark Dickinson <dickinsm@gmail.com>
parents:
66186
diff
changeset
|
524 self.assertComplexIdentical(cmath.atan(z), z) |
|
825e480c930d
Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to
Mark Dickinson <dickinsm@gmail.com>
parents:
66186
diff
changeset
|
525 |
|
825e480c930d
Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to
Mark Dickinson <dickinsm@gmail.com>
parents:
66186
diff
changeset
|
526 @requires_IEEE_754 |
|
825e480c930d
Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to
Mark Dickinson <dickinsm@gmail.com>
parents:
66186
diff
changeset
|
527 def testAtanhSign(self): |
|
825e480c930d
Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to
Mark Dickinson <dickinsm@gmail.com>
parents:
66186
diff
changeset
|
528 for z in complex_zeros: |
|
825e480c930d
Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to
Mark Dickinson <dickinsm@gmail.com>
parents:
66186
diff
changeset
|
529 self.assertComplexIdentical(cmath.atanh(z), z) |
|
825e480c930d
Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to
Mark Dickinson <dickinsm@gmail.com>
parents:
66186
diff
changeset
|
530 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
531 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
532 def test_main(): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
533 run_unittest(CMathTests) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
534 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
535 if __name__ == "__main__": |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
536 test_main() |
