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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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()