annotate Lib/test/test_math.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 1feeeb8992f8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # Python test set -- math module
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 # XXXX Should not do tests around zero only
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
66706
ae3fa781eef2 Issue #10624: Move requires_IEEE_754 into test.support. I'll fix up other uses of it shortly.
Eric Smith <eric@trueblade.com>
parents: 66310
diff changeset
4 from test.support import run_unittest, verbose, requires_IEEE_754
70574
35212b113730 test.support: add requires_mac_ver() function
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70018
diff changeset
5 from test import support
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
6 import unittest
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
7 import math
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
8 import os
70018
34871c3072c9 Issue #11888: skip some log2 tests on Mac OS X Tiger
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69979
diff changeset
9 import platform
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
10 import sys
56270
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
11 import struct
66064
fdcaac0e010a Issue #10337: skip tests of tanh() sign in test_math and test_cmath if tanh()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65026
diff changeset
12 import sysconfig
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
13
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
14 eps = 1E-05
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
15 NAN = float('nan')
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
16 INF = float('inf')
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
17 NINF = float('-inf')
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
18
53352
54b4489f1c28 Merged revisions 71837-71838 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48606
diff changeset
19 # detect evidence of double-rounding: fsum is not always correctly
54b4489f1c28 Merged revisions 71837-71838 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48606
diff changeset
20 # rounded on machines that suffer from double rounding.
54b4489f1c28 Merged revisions 71837-71838 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48606
diff changeset
21 x, y = 1e16, 2.9999 # use temporary values to defeat peephole optimizer
54b4489f1c28 Merged revisions 71837-71838 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48606
diff changeset
22 HAVE_DOUBLE_ROUNDING = (x + y == 1e16 + 4)
54b4489f1c28 Merged revisions 71837-71838 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48606
diff changeset
23
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
24 # locate file with test values
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
25 if __name__ == '__main__':
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
26 file = sys.argv[0]
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
27 else:
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
28 file = __file__
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
29 test_dir = os.path.dirname(file) or os.curdir
56270
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
30 math_testcases = os.path.join(test_dir, 'math_testcases.txt')
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
31 test_file = os.path.join(test_dir, 'cmath_testcases.txt')
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
32
56270
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
33 def to_ulps(x):
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
34 """Convert a non-NaN float x to an integer, in such a way that
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
35 adjacent floats are converted to adjacent integers. Then
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
36 abs(ulps(x) - ulps(y)) gives the difference in ulps between two
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
37 floats.
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
38
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
39 The results from this function will only make sense on platforms
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
40 where C doubles are represented in IEEE 754 binary64 format.
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
41
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
42 """
56557
7d71c51fc308 Merged revisions 75454 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56308
diff changeset
43 n = struct.unpack('<q', struct.pack('<d', x))[0]
56270
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
44 if n < 0:
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
45 n = ~(n+2**63)
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
46 return n
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
47
57660
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
48 def ulps_check(expected, got, ulps=20):
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
49 """Given non-NaN floats `expected` and `got`,
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
50 check that they're equal to within the given number of ulps.
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
51
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
52 Returns None on success and an error message on failure."""
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
53
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
54 ulps_error = to_ulps(got) - to_ulps(expected)
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
55 if abs(ulps_error) <= ulps:
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
56 return None
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
57 return "error = {} ulps; permitted error = {} ulps".format(ulps_error,
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
58 ulps)
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
59
61599
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
60 # Here's a pure Python version of the math.factorial algorithm, for
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
61 # documentation and comparison purposes.
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
62 #
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
63 # Formula:
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
64 #
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
65 # factorial(n) = factorial_odd_part(n) << (n - count_set_bits(n))
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
66 #
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
67 # where
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
68 #
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
69 # factorial_odd_part(n) = product_{i >= 0} product_{0 < j <= n >> i; j odd} j
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
70 #
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
71 # The outer product above is an infinite product, but once i >= n.bit_length,
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
72 # (n >> i) < 1 and the corresponding term of the product is empty. So only the
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
73 # finitely many terms for 0 <= i < n.bit_length() contribute anything.
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
74 #
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
75 # We iterate downwards from i == n.bit_length() - 1 to i == 0. The inner
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
76 # product in the formula above starts at 1 for i == n.bit_length(); for each i
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
77 # < n.bit_length() we get the inner product for i from that for i + 1 by
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
78 # multiplying by all j in {n >> i+1 < j <= n >> i; j odd}. In Python terms,
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
79 # this set is range((n >> i+1) + 1 | 1, (n >> i) + 1 | 1, 2).
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
80
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
81 def count_set_bits(n):
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
82 """Number of '1' bits in binary expansion of a nonnnegative integer."""
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
83 return 1 + count_set_bits(n & n - 1) if n else 0
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
84
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
85 def partial_product(start, stop):
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
86 """Product of integers in range(start, stop, 2), computed recursively.
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
87 start and stop should both be odd, with start <= stop.
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
88
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
89 """
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
90 numfactors = (stop - start) >> 1
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
91 if not numfactors:
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
92 return 1
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
93 elif numfactors == 1:
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
94 return start
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
95 else:
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
96 mid = (start + numfactors) | 1
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
97 return partial_product(start, mid) * partial_product(mid, stop)
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
98
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
99 def py_factorial(n):
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
100 """Factorial of nonnegative integer n, via "Binary Split Factorial Formula"
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
101 described at http://www.luschny.de/math/factorial/binarysplitfact.html
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
102
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
103 """
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
104 inner = outer = 1
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
105 for i in reversed(range(n.bit_length())):
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
106 inner *= partial_product((n >> i + 1) + 1 | 1, (n >> i) + 1 | 1)
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
107 outer *= inner
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
108 return outer << (n - count_set_bits(n))
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
109
57660
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
110 def acc_check(expected, got, rel_err=2e-15, abs_err = 5e-323):
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
111 """Determine whether non-NaN floats a and b are equal to within a
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
112 (small) rounding error. The default values for rel_err and
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
113 abs_err are chosen to be suitable for platforms where a float is
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
114 represented by an IEEE 754 double. They allow an error of between
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
115 9 and 19 ulps."""
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
116
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
117 # need to special case infinities, since inf - inf gives nan
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
118 if math.isinf(expected) and got == expected:
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
119 return None
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
120
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
121 error = got - expected
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
122
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
123 permitted_error = max(abs_err, rel_err * abs(expected))
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
124 if abs(error) < permitted_error:
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
125 return None
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
126 return "error = {}; permitted error = {}".format(error,
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
127 permitted_error)
56270
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
128
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
129 def parse_mtestfile(fname):
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
130 """Parse a file with test values
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
131
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
132 -- starts a comment
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
133 blank lines, or lines containing only a comment, are ignored
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
134 other lines are expected to have the form
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
135 id fn arg -> expected [flag]*
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
136
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
137 """
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
138 with open(fname) as fp:
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
139 for line in fp:
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
140 # strip comments, and skip blank lines
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
141 if '--' in line:
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
142 line = line[:line.index('--')]
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
143 if not line.strip():
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
144 continue
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
145
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
146 lhs, rhs = line.split('->')
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
147 id, fn, arg = lhs.split()
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
148 rhs_pieces = rhs.split()
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
149 exp = rhs_pieces[0]
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
150 flags = rhs_pieces[1:]
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
151
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
152 yield (id, fn, float(arg), float(exp), flags)
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
153
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
154 def parse_testfile(fname):
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
155 """Parse a file with test values
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
156
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
157 Empty lines or lines starting with -- are ignored
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
158 yields id, fn, arg_real, arg_imag, exp_real, exp_imag
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
159 """
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
160 with open(fname) as fp:
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
161 for line in fp:
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
162 # skip comment lines and blank lines
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
163 if line.startswith('--') or not line.strip():
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
164 continue
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
165
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
166 lhs, rhs = line.split('->')
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
167 id, fn, arg_real, arg_imag = lhs.split()
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
168 rhs_pieces = rhs.split()
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
169 exp_real, exp_imag = rhs_pieces[0], rhs_pieces[1]
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
170 flags = rhs_pieces[2:]
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
171
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
172 yield (id, fn,
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
173 float(arg_real), float(arg_imag),
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
174 float(exp_real), float(exp_imag),
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
175 flags
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
176 )
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
177
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
178 class MathTests(unittest.TestCase):
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
179
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
180 def ftest(self, name, value, expected):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
181 if abs(value-expected) > eps:
42466
3fc3cedc49ca Merged revisions 56753-56781 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41717
diff changeset
182 # Use %r instead of %f so the error message
3fc3cedc49ca Merged revisions 56753-56781 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41717
diff changeset
183 # displays full precision. Otherwise discrepancies
3fc3cedc49ca Merged revisions 56753-56781 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41717
diff changeset
184 # in the last few bits will lead to very confusing
3fc3cedc49ca Merged revisions 56753-56781 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41717
diff changeset
185 # error messages
3fc3cedc49ca Merged revisions 56753-56781 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41717
diff changeset
186 self.fail('%s returned %r, expected %r' %
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
187 (name, value, expected))
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
188
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
189 def testConstants(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
190 self.ftest('pi', math.pi, 3.1415926)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
191 self.ftest('e', math.e, 2.7182818)
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
192
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
193 def testAcos(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
194 self.assertRaises(TypeError, math.acos)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
195 self.ftest('acos(-1)', math.acos(-1), math.pi)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
196 self.ftest('acos(0)', math.acos(0), math.pi/2)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
197 self.ftest('acos(1)', math.acos(1), 0)
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
198 self.assertRaises(ValueError, math.acos, INF)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
199 self.assertRaises(ValueError, math.acos, NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
200 self.assertTrue(math.isnan(math.acos(NAN)))
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
201
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
202 def testAcosh(self):
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
203 self.assertRaises(TypeError, math.acosh)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
204 self.ftest('acosh(1)', math.acosh(1), 0)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
205 self.ftest('acosh(2)', math.acosh(2), 1.3169578969248168)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
206 self.assertRaises(ValueError, math.acosh, 0)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
207 self.assertRaises(ValueError, math.acosh, -1)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
208 self.assertEqual(math.acosh(INF), INF)
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
209 self.assertRaises(ValueError, math.acosh, NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
210 self.assertTrue(math.isnan(math.acosh(NAN)))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
211
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
212 def testAsin(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
213 self.assertRaises(TypeError, math.asin)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
214 self.ftest('asin(-1)', math.asin(-1), -math.pi/2)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
215 self.ftest('asin(0)', math.asin(0), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
216 self.ftest('asin(1)', math.asin(1), math.pi/2)
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
217 self.assertRaises(ValueError, math.asin, INF)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
218 self.assertRaises(ValueError, math.asin, NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
219 self.assertTrue(math.isnan(math.asin(NAN)))
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
220
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
221 def testAsinh(self):
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
222 self.assertRaises(TypeError, math.asinh)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
223 self.ftest('asinh(0)', math.asinh(0), 0)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
224 self.ftest('asinh(1)', math.asinh(1), 0.88137358701954305)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
225 self.ftest('asinh(-1)', math.asinh(-1), -0.88137358701954305)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
226 self.assertEqual(math.asinh(INF), INF)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
227 self.assertEqual(math.asinh(NINF), NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
228 self.assertTrue(math.isnan(math.asinh(NAN)))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
229
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
230 def testAtan(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
231 self.assertRaises(TypeError, math.atan)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
232 self.ftest('atan(-1)', math.atan(-1), -math.pi/4)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
233 self.ftest('atan(0)', math.atan(0), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
234 self.ftest('atan(1)', math.atan(1), math.pi/4)
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
235 self.ftest('atan(inf)', math.atan(INF), math.pi/2)
46505
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
236 self.ftest('atan(-inf)', math.atan(NINF), -math.pi/2)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
237 self.assertTrue(math.isnan(math.atan(NAN)))
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
238
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
239 def testAtanh(self):
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
240 self.assertRaises(TypeError, math.atan)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
241 self.ftest('atanh(0)', math.atanh(0), 0)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
242 self.ftest('atanh(0.5)', math.atanh(0.5), 0.54930614433405489)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
243 self.ftest('atanh(-0.5)', math.atanh(-0.5), -0.54930614433405489)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
244 self.assertRaises(ValueError, math.atanh, 1)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
245 self.assertRaises(ValueError, math.atanh, -1)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
246 self.assertRaises(ValueError, math.atanh, INF)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
247 self.assertRaises(ValueError, math.atanh, NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
248 self.assertTrue(math.isnan(math.atanh(NAN)))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
249
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
250 def testAtan2(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
251 self.assertRaises(TypeError, math.atan2)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
252 self.ftest('atan2(-1, 0)', math.atan2(-1, 0), -math.pi/2)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
253 self.ftest('atan2(-1, 1)', math.atan2(-1, 1), -math.pi/4)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
254 self.ftest('atan2(0, 1)', math.atan2(0, 1), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
255 self.ftest('atan2(1, 1)', math.atan2(1, 1), math.pi/4)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
256 self.ftest('atan2(1, 0)', math.atan2(1, 0), math.pi/2)
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
257
46516
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
258 # math.atan2(0, x)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
259 self.ftest('atan2(0., -inf)', math.atan2(0., NINF), math.pi)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
260 self.ftest('atan2(0., -2.3)', math.atan2(0., -2.3), math.pi)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
261 self.ftest('atan2(0., -0.)', math.atan2(0., -0.), math.pi)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
262 self.assertEqual(math.atan2(0., 0.), 0.)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
263 self.assertEqual(math.atan2(0., 2.3), 0.)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
264 self.assertEqual(math.atan2(0., INF), 0.)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
265 self.assertTrue(math.isnan(math.atan2(0., NAN)))
46516
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
266 # math.atan2(-0, x)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
267 self.ftest('atan2(-0., -inf)', math.atan2(-0., NINF), -math.pi)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
268 self.ftest('atan2(-0., -2.3)', math.atan2(-0., -2.3), -math.pi)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
269 self.ftest('atan2(-0., -0.)', math.atan2(-0., -0.), -math.pi)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
270 self.assertEqual(math.atan2(-0., 0.), -0.)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
271 self.assertEqual(math.atan2(-0., 2.3), -0.)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
272 self.assertEqual(math.atan2(-0., INF), -0.)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
273 self.assertTrue(math.isnan(math.atan2(-0., NAN)))
46516
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
274 # math.atan2(INF, x)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
275 self.ftest('atan2(inf, -inf)', math.atan2(INF, NINF), math.pi*3/4)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
276 self.ftest('atan2(inf, -2.3)', math.atan2(INF, -2.3), math.pi/2)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
277 self.ftest('atan2(inf, -0.)', math.atan2(INF, -0.0), math.pi/2)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
278 self.ftest('atan2(inf, 0.)', math.atan2(INF, 0.0), math.pi/2)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
279 self.ftest('atan2(inf, 2.3)', math.atan2(INF, 2.3), math.pi/2)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
280 self.ftest('atan2(inf, inf)', math.atan2(INF, INF), math.pi/4)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
281 self.assertTrue(math.isnan(math.atan2(INF, NAN)))
46516
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
282 # math.atan2(NINF, x)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
283 self.ftest('atan2(-inf, -inf)', math.atan2(NINF, NINF), -math.pi*3/4)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
284 self.ftest('atan2(-inf, -2.3)', math.atan2(NINF, -2.3), -math.pi/2)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
285 self.ftest('atan2(-inf, -0.)', math.atan2(NINF, -0.0), -math.pi/2)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
286 self.ftest('atan2(-inf, 0.)', math.atan2(NINF, 0.0), -math.pi/2)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
287 self.ftest('atan2(-inf, 2.3)', math.atan2(NINF, 2.3), -math.pi/2)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
288 self.ftest('atan2(-inf, inf)', math.atan2(NINF, INF), -math.pi/4)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
289 self.assertTrue(math.isnan(math.atan2(NINF, NAN)))
46516
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
290 # math.atan2(+finite, x)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
291 self.ftest('atan2(2.3, -inf)', math.atan2(2.3, NINF), math.pi)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
292 self.ftest('atan2(2.3, -0.)', math.atan2(2.3, -0.), math.pi/2)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
293 self.ftest('atan2(2.3, 0.)', math.atan2(2.3, 0.), math.pi/2)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
294 self.assertEqual(math.atan2(2.3, INF), 0.)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
295 self.assertTrue(math.isnan(math.atan2(2.3, NAN)))
46516
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
296 # math.atan2(-finite, x)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
297 self.ftest('atan2(-2.3, -inf)', math.atan2(-2.3, NINF), -math.pi)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
298 self.ftest('atan2(-2.3, -0.)', math.atan2(-2.3, -0.), -math.pi/2)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
299 self.ftest('atan2(-2.3, 0.)', math.atan2(-2.3, 0.), -math.pi/2)
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
300 self.assertEqual(math.atan2(-2.3, INF), -0.)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
301 self.assertTrue(math.isnan(math.atan2(-2.3, NAN)))
46516
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
302 # math.atan2(NAN, x)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
303 self.assertTrue(math.isnan(math.atan2(NAN, NINF)))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
304 self.assertTrue(math.isnan(math.atan2(NAN, -2.3)))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
305 self.assertTrue(math.isnan(math.atan2(NAN, -0.)))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
306 self.assertTrue(math.isnan(math.atan2(NAN, 0.)))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
307 self.assertTrue(math.isnan(math.atan2(NAN, 2.3)))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
308 self.assertTrue(math.isnan(math.atan2(NAN, INF)))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
309 self.assertTrue(math.isnan(math.atan2(NAN, NAN)))
46516
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
310
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
311 def testCeil(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
312 self.assertRaises(TypeError, math.ceil)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
313 self.assertEqual(int, type(math.ceil(0.5)))
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
314 self.ftest('ceil(0.5)', math.ceil(0.5), 1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
315 self.ftest('ceil(1.0)', math.ceil(1.0), 1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
316 self.ftest('ceil(1.5)', math.ceil(1.5), 2)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
317 self.ftest('ceil(-0.5)', math.ceil(-0.5), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
318 self.ftest('ceil(-1.0)', math.ceil(-1.0), -1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
319 self.ftest('ceil(-1.5)', math.ceil(-1.5), -1)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
320 #self.assertEqual(math.ceil(INF), INF)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
321 #self.assertEqual(math.ceil(NINF), NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
322 #self.assertTrue(math.isnan(math.ceil(NAN)))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
323
42754
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
324 class TestCeil:
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
325 def __ceil__(self):
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
326 return 42
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
327 class TestNoCeil:
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
328 pass
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
329 self.ftest('ceil(TestCeil())', math.ceil(TestCeil()), 42)
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
330 self.assertRaises(TypeError, math.ceil, TestNoCeil())
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
331
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
332 t = TestNoCeil()
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
333 t.__ceil__ = lambda *args: args
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
334 self.assertRaises(TypeError, math.ceil, t)
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
335 self.assertRaises(TypeError, math.ceil, t, 0)
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
336
56091
b0e5105ff97b Merged revisions 74925 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 55593
diff changeset
337 @requires_IEEE_754
b0e5105ff97b Merged revisions 74925 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 55593
diff changeset
338 def testCopysign(self):
58769
0b42e1aa4a8b Merged revisions 78041 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57758
diff changeset
339 self.assertEqual(math.copysign(1, 42), 1.0)
0b42e1aa4a8b Merged revisions 78041 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57758
diff changeset
340 self.assertEqual(math.copysign(0., 42), 0.0)
0b42e1aa4a8b Merged revisions 78041 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57758
diff changeset
341 self.assertEqual(math.copysign(1., -42), -1.0)
0b42e1aa4a8b Merged revisions 78041 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57758
diff changeset
342 self.assertEqual(math.copysign(3, 0.), 3.0)
0b42e1aa4a8b Merged revisions 78041 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57758
diff changeset
343 self.assertEqual(math.copysign(4., -0.), -4.0)
58771
a2ab26c5f08b Merged revisions 78045 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 55593
diff changeset
344
56091
b0e5105ff97b Merged revisions 74925 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 55593
diff changeset
345 self.assertRaises(TypeError, math.copysign)
b0e5105ff97b Merged revisions 74925 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 55593
diff changeset
346 # copysign should let us distinguish signs of zeros
66310
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66064
diff changeset
347 self.assertEqual(math.copysign(1., 0.), 1.)
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66064
diff changeset
348 self.assertEqual(math.copysign(1., -0.), -1.)
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66064
diff changeset
349 self.assertEqual(math.copysign(INF, 0.), INF)
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66064
diff changeset
350 self.assertEqual(math.copysign(INF, -0.), NINF)
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66064
diff changeset
351 self.assertEqual(math.copysign(NINF, 0.), INF)
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66064
diff changeset
352 self.assertEqual(math.copysign(NINF, -0.), NINF)
56091
b0e5105ff97b Merged revisions 74925 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 55593
diff changeset
353 # and of infinities
66310
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66064
diff changeset
354 self.assertEqual(math.copysign(1., INF), 1.)
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66064
diff changeset
355 self.assertEqual(math.copysign(1., NINF), -1.)
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66064
diff changeset
356 self.assertEqual(math.copysign(INF, INF), INF)
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66064
diff changeset
357 self.assertEqual(math.copysign(INF, NINF), NINF)
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66064
diff changeset
358 self.assertEqual(math.copysign(NINF, INF), INF)
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66064
diff changeset
359 self.assertEqual(math.copysign(NINF, NINF), NINF)
58769
0b42e1aa4a8b Merged revisions 78041 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57758
diff changeset
360 self.assertTrue(math.isnan(math.copysign(NAN, 1.)))
0b42e1aa4a8b Merged revisions 78041 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57758
diff changeset
361 self.assertTrue(math.isnan(math.copysign(NAN, INF)))
0b42e1aa4a8b Merged revisions 78041 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57758
diff changeset
362 self.assertTrue(math.isnan(math.copysign(NAN, NINF)))
0b42e1aa4a8b Merged revisions 78041 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57758
diff changeset
363 self.assertTrue(math.isnan(math.copysign(NAN, NAN)))
56091
b0e5105ff97b Merged revisions 74925 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 55593
diff changeset
364 # copysign(INF, NAN) may be INF or it may be NINF, since
b0e5105ff97b Merged revisions 74925 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 55593
diff changeset
365 # we don't know whether the sign bit of NAN is set on any
b0e5105ff97b Merged revisions 74925 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 55593
diff changeset
366 # given platform.
58769
0b42e1aa4a8b Merged revisions 78041 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57758
diff changeset
367 self.assertTrue(math.isinf(math.copysign(INF, NAN)))
56091
b0e5105ff97b Merged revisions 74925 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 55593
diff changeset
368 # similarly, copysign(2., NAN) could be 2. or -2.
66310
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66064
diff changeset
369 self.assertEqual(abs(math.copysign(2., NAN)), 2.)
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
370
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
371 def testCos(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
372 self.assertRaises(TypeError, math.cos)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
373 self.ftest('cos(-pi/2)', math.cos(-math.pi/2), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
374 self.ftest('cos(0)', math.cos(0), 1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
375 self.ftest('cos(pi/2)', math.cos(math.pi/2), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
376 self.ftest('cos(pi)', math.cos(math.pi), -1)
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
377 try:
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
378 self.assertTrue(math.isnan(math.cos(INF)))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
379 self.assertTrue(math.isnan(math.cos(NINF)))
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
380 except ValueError:
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
381 self.assertRaises(ValueError, math.cos, INF)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
382 self.assertRaises(ValueError, math.cos, NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
383 self.assertTrue(math.isnan(math.cos(NAN)))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
384
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
385 def testCosh(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
386 self.assertRaises(TypeError, math.cosh)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
387 self.ftest('cosh(0)', math.cosh(0), 1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
388 self.ftest('cosh(2)-2*cosh(1)**2', math.cosh(2)-2*math.cosh(1)**2, -1) # Thanks to Lambert
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
389 self.assertEqual(math.cosh(INF), INF)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
390 self.assertEqual(math.cosh(NINF), INF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
391 self.assertTrue(math.isnan(math.cosh(NAN)))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
392
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
393 def testDegrees(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
394 self.assertRaises(TypeError, math.degrees)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
395 self.ftest('degrees(pi)', math.degrees(math.pi), 180.0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
396 self.ftest('degrees(pi/2)', math.degrees(math.pi/2), 90.0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
397 self.ftest('degrees(-pi/4)', math.degrees(-math.pi/4), -45.0)
23426
1157281f00a0 Adds tests for degrees() and radians() functions added to mathmodule.
Raymond Hettinger <python@rcn.com>
parents: 19750
diff changeset
398
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
399 def testExp(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
400 self.assertRaises(TypeError, math.exp)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
401 self.ftest('exp(-1)', math.exp(-1), 1/math.e)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
402 self.ftest('exp(0)', math.exp(0), 1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
403 self.ftest('exp(1)', math.exp(1), math.e)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
404 self.assertEqual(math.exp(INF), INF)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
405 self.assertEqual(math.exp(NINF), 0.)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
406 self.assertTrue(math.isnan(math.exp(NAN)))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
407
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
408 def testFabs(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
409 self.assertRaises(TypeError, math.fabs)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
410 self.ftest('fabs(-1)', math.fabs(-1), 1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
411 self.ftest('fabs(0)', math.fabs(0), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
412 self.ftest('fabs(1)', math.fabs(1), 1)
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
413
47562
bd584f121c4b Merged revisions 64002-64003,64012,64036-64037,64047,64050-64052,64054-64055,64066,64071 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47559
diff changeset
414 def testFactorial(self):
61599
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
415 self.assertEqual(math.factorial(0), 1)
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
416 self.assertEqual(math.factorial(0.0), 1)
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
417 total = 1
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
418 for i in range(1, 1000):
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
419 total *= i
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
420 self.assertEqual(math.factorial(i), total)
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
421 self.assertEqual(math.factorial(float(i)), total)
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
422 self.assertEqual(math.factorial(i), py_factorial(i))
47562
bd584f121c4b Merged revisions 64002-64003,64012,64036-64037,64047,64050-64052,64054-64055,64066,64071 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47559
diff changeset
423 self.assertRaises(ValueError, math.factorial, -1)
61599
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
424 self.assertRaises(ValueError, math.factorial, -1.0)
47562
bd584f121c4b Merged revisions 64002-64003,64012,64036-64037,64047,64050-64052,64054-64055,64066,64071 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47559
diff changeset
425 self.assertRaises(ValueError, math.factorial, math.pi)
61599
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
426 self.assertRaises(OverflowError, math.factorial, sys.maxsize+1)
1e149b50aca6 Issue #8692: Improve performance of math.factorial:
Mark Dickinson <dickinsm@gmail.com>
parents: 61540
diff changeset
427 self.assertRaises(OverflowError, math.factorial, 10e100)
47562
bd584f121c4b Merged revisions 64002-64003,64012,64036-64037,64047,64050-64052,64054-64055,64066,64071 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47559
diff changeset
428
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
429 def testFloor(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
430 self.assertRaises(TypeError, math.floor)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
431 self.assertEqual(int, type(math.floor(0.5)))
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
432 self.ftest('floor(0.5)', math.floor(0.5), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
433 self.ftest('floor(1.0)', math.floor(1.0), 1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
434 self.ftest('floor(1.5)', math.floor(1.5), 1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
435 self.ftest('floor(-0.5)', math.floor(-0.5), -1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
436 self.ftest('floor(-1.0)', math.floor(-1.0), -1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
437 self.ftest('floor(-1.5)', math.floor(-1.5), -2)
42466
3fc3cedc49ca Merged revisions 56753-56781 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41717
diff changeset
438 # pow() relies on floor() to check for integers
3fc3cedc49ca Merged revisions 56753-56781 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41717
diff changeset
439 # This fails on some platforms - so check it here
3fc3cedc49ca Merged revisions 56753-56781 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41717
diff changeset
440 self.ftest('floor(1.23e167)', math.floor(1.23e167), 1.23e167)
3fc3cedc49ca Merged revisions 56753-56781 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41717
diff changeset
441 self.ftest('floor(-1.23e167)', math.floor(-1.23e167), -1.23e167)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
442 #self.assertEqual(math.ceil(INF), INF)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
443 #self.assertEqual(math.ceil(NINF), NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
444 #self.assertTrue(math.isnan(math.floor(NAN)))
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
445
42754
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
446 class TestFloor:
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
447 def __floor__(self):
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
448 return 42
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
449 class TestNoFloor:
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
450 pass
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
451 self.ftest('floor(TestFloor())', math.floor(TestFloor()), 42)
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
452 self.assertRaises(TypeError, math.floor, TestNoFloor())
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
453
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
454 t = TestNoFloor()
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
455 t.__floor__ = lambda *args: args
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
456 self.assertRaises(TypeError, math.floor, t)
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
457 self.assertRaises(TypeError, math.floor, t, 0)
1c98b445d847 Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
458
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
459 def testFmod(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
460 self.assertRaises(TypeError, math.fmod)
69814
21e2e06fea4a test_math.py: Use correct signs on zeros for expected fmod results.
Mark Dickinson <mdickinson@enthought.com>
parents: 69813
diff changeset
461 self.ftest('fmod(10, 1)', math.fmod(10, 1), 0.0)
21e2e06fea4a test_math.py: Use correct signs on zeros for expected fmod results.
Mark Dickinson <mdickinson@enthought.com>
parents: 69813
diff changeset
462 self.ftest('fmod(10, 0.5)', math.fmod(10, 0.5), 0.0)
21e2e06fea4a test_math.py: Use correct signs on zeros for expected fmod results.
Mark Dickinson <mdickinson@enthought.com>
parents: 69813
diff changeset
463 self.ftest('fmod(10, 1.5)', math.fmod(10, 1.5), 1.0)
21e2e06fea4a test_math.py: Use correct signs on zeros for expected fmod results.
Mark Dickinson <mdickinson@enthought.com>
parents: 69813
diff changeset
464 self.ftest('fmod(-10, 1)', math.fmod(-10, 1), -0.0)
21e2e06fea4a test_math.py: Use correct signs on zeros for expected fmod results.
Mark Dickinson <mdickinson@enthought.com>
parents: 69813
diff changeset
465 self.ftest('fmod(-10, 0.5)', math.fmod(-10, 0.5), -0.0)
21e2e06fea4a test_math.py: Use correct signs on zeros for expected fmod results.
Mark Dickinson <mdickinson@enthought.com>
parents: 69813
diff changeset
466 self.ftest('fmod(-10, 1.5)', math.fmod(-10, 1.5), -1.0)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
467 self.assertTrue(math.isnan(math.fmod(NAN, 1.)))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
468 self.assertTrue(math.isnan(math.fmod(1., NAN)))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
469 self.assertTrue(math.isnan(math.fmod(NAN, NAN)))
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
470 self.assertRaises(ValueError, math.fmod, 1., 0.)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
471 self.assertRaises(ValueError, math.fmod, INF, 1.)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
472 self.assertRaises(ValueError, math.fmod, NINF, 1.)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
473 self.assertRaises(ValueError, math.fmod, INF, 0.)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
474 self.assertEqual(math.fmod(3.0, INF), 3.0)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
475 self.assertEqual(math.fmod(-3.0, INF), -3.0)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
476 self.assertEqual(math.fmod(3.0, NINF), 3.0)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
477 self.assertEqual(math.fmod(-3.0, NINF), -3.0)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
478 self.assertEqual(math.fmod(0.0, 3.0), 0.0)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
479 self.assertEqual(math.fmod(0.0, NINF), 0.0)
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
480
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
481 def testFrexp(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
482 self.assertRaises(TypeError, math.frexp)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
483
41717
9ad84070b22d Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
484 def testfrexp(name, result, expected):
9ad84070b22d Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
485 (mant, exp), (emant, eexp) = result, expected
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
486 if abs(mant-emant) > eps or exp != eexp:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
487 self.fail('%s returned %r, expected %r'%\
41717
9ad84070b22d Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
488 (name, result, expected))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
489
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
490 testfrexp('frexp(-1)', math.frexp(-1), (-0.5, 1))
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
491 testfrexp('frexp(0)', math.frexp(0), (0, 0))
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
492 testfrexp('frexp(1)', math.frexp(1), (0.5, 1))
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
493 testfrexp('frexp(2)', math.frexp(2), (0.5, 2))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
494
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
495 self.assertEqual(math.frexp(INF)[0], INF)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
496 self.assertEqual(math.frexp(NINF)[0], NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
497 self.assertTrue(math.isnan(math.frexp(NAN)[0]))
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
498
56091
b0e5105ff97b Merged revisions 74925 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 55593
diff changeset
499 @requires_IEEE_754
53352
54b4489f1c28 Merged revisions 71837-71838 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48606
diff changeset
500 @unittest.skipIf(HAVE_DOUBLE_ROUNDING,
54b4489f1c28 Merged revisions 71837-71838 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48606
diff changeset
501 "fsum is not exact on machines with double rounding")
48606
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
502 def testFsum(self):
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
503 # math.fsum relies on exact rounding for correct operation.
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
504 # There's a known problem with IA32 floating-point that causes
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
505 # inexact rounding in some situations, and will cause the
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
506 # math.fsum tests below to fail; see issue #2937. On non IEEE
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
507 # 754 platforms, and on IEEE 754 platforms that exhibit the
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
508 # problem described in issue #2937, we simply skip the whole
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
509 # test.
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
510
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
511 # Python version of math.fsum, for comparison. Uses a
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
512 # different algorithm based on frexp, ldexp and integer
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
513 # arithmetic.
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
514 from sys import float_info
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
515 mant_dig = float_info.mant_dig
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
516 etiny = float_info.min_exp - mant_dig
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
517
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
518 def msum(iterable):
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
519 """Full precision summation. Compute sum(iterable) without any
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
520 intermediate accumulation of error. Based on the 'lsum' function
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
521 at http://code.activestate.com/recipes/393090/
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
522
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
523 """
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
524 tmant, texp = 0, 0
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
525 for x in iterable:
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
526 mant, exp = math.frexp(x)
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
527 mant, exp = int(math.ldexp(mant, mant_dig)), exp - mant_dig
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
528 if texp > exp:
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
529 tmant <<= texp-exp
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
530 texp = exp
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
531 else:
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
532 mant <<= exp-texp
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
533 tmant += mant
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
534 # Round tmant * 2**texp to a float. The original recipe
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
535 # used float(str(tmant)) * 2.0**texp for this, but that's
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
536 # a little unsafe because str -> float conversion can't be
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
537 # relied upon to do correct rounding on all platforms.
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
538 tail = max(len(bin(abs(tmant)))-2 - mant_dig, etiny - texp)
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
539 if tail > 0:
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
540 h = 1 << (tail-1)
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
541 tmant = tmant // (2*h) + bool(tmant & h and tmant & 3*h-1)
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
542 texp += tail
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
543 return math.ldexp(tmant, texp)
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
544
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
545 test_values = [
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
546 ([], 0.0),
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
547 ([0.0], 0.0),
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
548 ([1e100, 1.0, -1e100, 1e-100, 1e50, -1.0, -1e50], 1e-100),
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
549 ([2.0**53, -0.5, -2.0**-54], 2.0**53-1.0),
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
550 ([2.0**53, 1.0, 2.0**-100], 2.0**53+2.0),
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
551 ([2.0**53+10.0, 1.0, 2.0**-100], 2.0**53+12.0),
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
552 ([2.0**53-4.0, 0.5, 2.0**-54], 2.0**53-3.0),
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
553 ([1./n for n in range(1, 1001)],
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
554 float.fromhex('0x1.df11f45f4e61ap+2')),
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
555 ([(-1.)**n/n for n in range(1, 1001)],
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
556 float.fromhex('-0x1.62a2af1bd3624p-1')),
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
557 ([1.7**(i+1)-1.7**i for i in range(1000)] + [-1.7**1000], -1.0),
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
558 ([1e16, 1., 1e-16], 10000000000000002.0),
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
559 ([1e16-2., 1.-2.**-53, -(1e16-2.), -(1.-2.**-53)], 0.0),
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
560 # exercise code for resizing partials array
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
561 ([2.**n - 2.**(n+50) + 2.**(n+52) for n in range(-1074, 972, 2)] +
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
562 [-2.**1022],
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
563 float.fromhex('0x1.5555555555555p+970')),
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
564 ]
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
565
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
566 for i, (vals, expected) in enumerate(test_values):
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
567 try:
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
568 actual = math.fsum(vals)
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
569 except OverflowError:
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
570 self.fail("test %d failed: got OverflowError, expected %r "
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
571 "for math.fsum(%.100r)" % (i, expected, vals))
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
572 except ValueError:
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
573 self.fail("test %d failed: got ValueError, expected %r "
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
574 "for math.fsum(%.100r)" % (i, expected, vals))
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
575 self.assertEqual(actual, expected)
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
576
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
577 from random import random, gauss, shuffle
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
578 for j in range(1000):
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
579 vals = [7, 1e100, -7, -1e100, -9e-20, 8e-20] * 10
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
580 s = 0
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
581 for i in range(200):
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
582 v = gauss(0, random()) ** 7 - s
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
583 s += v
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
584 vals.append(v)
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
585 shuffle(vals)
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
586
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
587 s = msum(vals)
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
588 self.assertEqual(msum(vals), math.fsum(vals))
f121a963ab69 Merged revisions 65258,65292,65299,65308-65309,65315,65326 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 47562
diff changeset
589
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
590 def testHypot(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
591 self.assertRaises(TypeError, math.hypot)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
592 self.ftest('hypot(0,0)', math.hypot(0,0), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
593 self.ftest('hypot(3,4)', math.hypot(3,4), 5)
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
594 self.assertEqual(math.hypot(NAN, INF), INF)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
595 self.assertEqual(math.hypot(INF, NAN), INF)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
596 self.assertEqual(math.hypot(NAN, NINF), INF)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
597 self.assertEqual(math.hypot(NINF, NAN), INF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
598 self.assertTrue(math.isnan(math.hypot(1.0, NAN)))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
599 self.assertTrue(math.isnan(math.hypot(NAN, -2.0)))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
600
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
601 def testLdexp(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
602 self.assertRaises(TypeError, math.ldexp)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
603 self.ftest('ldexp(0,1)', math.ldexp(0,1), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
604 self.ftest('ldexp(1,1)', math.ldexp(1,1), 2)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
605 self.ftest('ldexp(1,-1)', math.ldexp(1,-1), 0.5)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
606 self.ftest('ldexp(-1,1)', math.ldexp(-1,1), -2)
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
607 self.assertRaises(OverflowError, math.ldexp, 1., 1000000)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
608 self.assertRaises(OverflowError, math.ldexp, -1., 1000000)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
609 self.assertEqual(math.ldexp(1., -1000000), 0.)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
610 self.assertEqual(math.ldexp(-1., -1000000), -0.)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
611 self.assertEqual(math.ldexp(INF, 30), INF)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
612 self.assertEqual(math.ldexp(NINF, -213), NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
613 self.assertTrue(math.isnan(math.ldexp(NAN, 0)))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
614
47063
081c15806e28 Merged revisions 62914-62916,62918-62919,62921-62922,62924-62942,62944-62945,62947-62949 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 46616
diff changeset
615 # large second argument
081c15806e28 Merged revisions 62914-62916,62918-62919,62921-62922,62924-62942,62944-62945,62947-62949 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 46616
diff changeset
616 for n in [10**5, 10**10, 10**20, 10**40]:
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
617 self.assertEqual(math.ldexp(INF, -n), INF)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
618 self.assertEqual(math.ldexp(NINF, -n), NINF)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
619 self.assertEqual(math.ldexp(1., -n), 0.)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
620 self.assertEqual(math.ldexp(-1., -n), -0.)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
621 self.assertEqual(math.ldexp(0., -n), 0.)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
622 self.assertEqual(math.ldexp(-0., -n), -0.)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
623 self.assertTrue(math.isnan(math.ldexp(NAN, -n)))
47063
081c15806e28 Merged revisions 62914-62916,62918-62919,62921-62922,62924-62942,62944-62945,62947-62949 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 46616
diff changeset
624
081c15806e28 Merged revisions 62914-62916,62918-62919,62921-62922,62924-62942,62944-62945,62947-62949 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 46616
diff changeset
625 self.assertRaises(OverflowError, math.ldexp, 1., n)
081c15806e28 Merged revisions 62914-62916,62918-62919,62921-62922,62924-62942,62944-62945,62947-62949 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 46616
diff changeset
626 self.assertRaises(OverflowError, math.ldexp, -1., n)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
627 self.assertEqual(math.ldexp(0., n), 0.)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
628 self.assertEqual(math.ldexp(-0., n), -0.)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
629 self.assertEqual(math.ldexp(INF, n), INF)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
630 self.assertEqual(math.ldexp(NINF, n), NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
631 self.assertTrue(math.isnan(math.ldexp(NAN, n)))
47063
081c15806e28 Merged revisions 62914-62916,62918-62919,62921-62922,62924-62942,62944-62945,62947-62949 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 46616
diff changeset
632
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
633 def testLog(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
634 self.assertRaises(TypeError, math.log)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
635 self.ftest('log(1/e)', math.log(1/math.e), -1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
636 self.ftest('log(1)', math.log(1), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
637 self.ftest('log(e)', math.log(math.e), 1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
638 self.ftest('log(32,2)', math.log(32,2), 5)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
639 self.ftest('log(10**40, 10)', math.log(10**40, 10), 40)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
640 self.ftest('log(10**40, 10**20)', math.log(10**40, 10**20), 2)
65026
a9349fd3d0f7 Issue #9599: Further accuracy tweaks to loghelper. For an integer n that's small enough to be converted to a float without overflow, log(n) is now computed as log(float(n)), and similarly for log10.
Mark Dickinson <dickinsm@gmail.com>
parents: 62968
diff changeset
641 self.ftest('log(10**1000)', math.log(10**1000),
a9349fd3d0f7 Issue #9599: Further accuracy tweaks to loghelper. For an integer n that's small enough to be converted to a float without overflow, log(n) is now computed as log(float(n)), and similarly for log10.
Mark Dickinson <dickinsm@gmail.com>
parents: 62968
diff changeset
642 2302.5850929940457)
a9349fd3d0f7 Issue #9599: Further accuracy tweaks to loghelper. For an integer n that's small enough to be converted to a float without overflow, log(n) is now computed as log(float(n)), and similarly for log10.
Mark Dickinson <dickinsm@gmail.com>
parents: 62968
diff changeset
643 self.assertRaises(ValueError, math.log, -1.5)
a9349fd3d0f7 Issue #9599: Further accuracy tweaks to loghelper. For an integer n that's small enough to be converted to a float without overflow, log(n) is now computed as log(float(n)), and similarly for log10.
Mark Dickinson <dickinsm@gmail.com>
parents: 62968
diff changeset
644 self.assertRaises(ValueError, math.log, -10**1000)
a9349fd3d0f7 Issue #9599: Further accuracy tweaks to loghelper. For an integer n that's small enough to be converted to a float without overflow, log(n) is now computed as log(float(n)), and similarly for log10.
Mark Dickinson <dickinsm@gmail.com>
parents: 62968
diff changeset
645 self.assertRaises(ValueError, math.log, NINF)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
646 self.assertEqual(math.log(INF), INF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
647 self.assertTrue(math.isnan(math.log(NAN)))
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
648
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
649 def testLog1p(self):
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
650 self.assertRaises(TypeError, math.log1p)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
651 n= 2**90
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
652 self.assertAlmostEqual(math.log1p(n), math.log1p(float(n)))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
653
69946
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
654 @requires_IEEE_754
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
655 def testLog2(self):
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
656 self.assertRaises(TypeError, math.log2)
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
657
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
658 # Check some integer values
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
659 self.assertEqual(math.log2(1), 0.0)
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
660 self.assertEqual(math.log2(2), 1.0)
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
661 self.assertEqual(math.log2(4), 2.0)
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
662
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
663 # Large integer values
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
664 self.assertEqual(math.log2(2**1023), 1023.0)
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
665 self.assertEqual(math.log2(2**1024), 1024.0)
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
666 self.assertEqual(math.log2(2**2000), 2000.0)
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
667
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
668 self.assertRaises(ValueError, math.log2, -1.5)
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
669 self.assertRaises(ValueError, math.log2, NINF)
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
670 self.assertTrue(math.isnan(math.log2(NAN)))
6d1cbfcee45a Issue #11888: Add log2 function to math module. Patch written by Mark
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69814
diff changeset
671
70018
34871c3072c9 Issue #11888: skip some log2 tests on Mac OS X Tiger
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69979
diff changeset
672 @requires_IEEE_754
70576
566c42b0e750 (Merge 3.2) Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes,
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70574
diff changeset
673 # log2() is not accurate enough on Mac OS X Tiger (10.4)
566c42b0e750 (Merge 3.2) Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes,
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70574
diff changeset
674 @support.requires_mac_ver(10, 5)
70018
34871c3072c9 Issue #11888: skip some log2 tests on Mac OS X Tiger
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69979
diff changeset
675 def testLog2Exact(self):
34871c3072c9 Issue #11888: skip some log2 tests on Mac OS X Tiger
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69979
diff changeset
676 # Check that we get exact equality for log2 of powers of 2.
34871c3072c9 Issue #11888: skip some log2 tests on Mac OS X Tiger
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69979
diff changeset
677 actual = [math.log2(math.ldexp(1.0, n)) for n in range(-1074, 1024)]
34871c3072c9 Issue #11888: skip some log2 tests on Mac OS X Tiger
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69979
diff changeset
678 expected = [float(n) for n in range(-1074, 1024)]
34871c3072c9 Issue #11888: skip some log2 tests on Mac OS X Tiger
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69979
diff changeset
679 self.assertEqual(actual, expected)
34871c3072c9 Issue #11888: skip some log2 tests on Mac OS X Tiger
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69979
diff changeset
680
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
681 def testLog10(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
682 self.assertRaises(TypeError, math.log10)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
683 self.ftest('log10(0.1)', math.log10(0.1), -1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
684 self.ftest('log10(1)', math.log10(1), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
685 self.ftest('log10(10)', math.log10(10), 1)
65026
a9349fd3d0f7 Issue #9599: Further accuracy tweaks to loghelper. For an integer n that's small enough to be converted to a float without overflow, log(n) is now computed as log(float(n)), and similarly for log10.
Mark Dickinson <dickinsm@gmail.com>
parents: 62968
diff changeset
686 self.ftest('log10(10**1000)', math.log10(10**1000), 1000.0)
a9349fd3d0f7 Issue #9599: Further accuracy tweaks to loghelper. For an integer n that's small enough to be converted to a float without overflow, log(n) is now computed as log(float(n)), and similarly for log10.
Mark Dickinson <dickinsm@gmail.com>
parents: 62968
diff changeset
687 self.assertRaises(ValueError, math.log10, -1.5)
a9349fd3d0f7 Issue #9599: Further accuracy tweaks to loghelper. For an integer n that's small enough to be converted to a float without overflow, log(n) is now computed as log(float(n)), and similarly for log10.
Mark Dickinson <dickinsm@gmail.com>
parents: 62968
diff changeset
688 self.assertRaises(ValueError, math.log10, -10**1000)
a9349fd3d0f7 Issue #9599: Further accuracy tweaks to loghelper. For an integer n that's small enough to be converted to a float without overflow, log(n) is now computed as log(float(n)), and similarly for log10.
Mark Dickinson <dickinsm@gmail.com>
parents: 62968
diff changeset
689 self.assertRaises(ValueError, math.log10, NINF)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
690 self.assertEqual(math.log(INF), INF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
691 self.assertTrue(math.isnan(math.log10(NAN)))
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
692
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
693 def testModf(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
694 self.assertRaises(TypeError, math.modf)
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
695
41717
9ad84070b22d Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
696 def testmodf(name, result, expected):
9ad84070b22d Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
697 (v1, v2), (e1, e2) = result, expected
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
698 if abs(v1-e1) > eps or abs(v2-e2):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
699 self.fail('%s returned %r, expected %r'%\
41717
9ad84070b22d Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
700 (name, result, expected))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
701
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
702 testmodf('modf(1.5)', math.modf(1.5), (0.5, 1.0))
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
703 testmodf('modf(-1.5)', math.modf(-1.5), (-0.5, -1.0))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
704
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
705 self.assertEqual(math.modf(INF), (0.0, INF))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
706 self.assertEqual(math.modf(NINF), (-0.0, NINF))
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
707
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
708 modf_nan = math.modf(NAN)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
709 self.assertTrue(math.isnan(modf_nan[0]))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
710 self.assertTrue(math.isnan(modf_nan[1]))
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
711
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
712 def testPow(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
713 self.assertRaises(TypeError, math.pow)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
714 self.ftest('pow(0,1)', math.pow(0,1), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
715 self.ftest('pow(1,0)', math.pow(1,0), 1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
716 self.ftest('pow(2,1)', math.pow(2,1), 2)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
717 self.ftest('pow(2,-1)', math.pow(2,-1), 0.5)
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
718 self.assertEqual(math.pow(INF, 1), INF)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
719 self.assertEqual(math.pow(NINF, 1), NINF)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
720 self.assertEqual((math.pow(1, INF)), 1.)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
721 self.assertEqual((math.pow(1, NINF)), 1.)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
722 self.assertTrue(math.isnan(math.pow(NAN, 1)))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
723 self.assertTrue(math.isnan(math.pow(2, NAN)))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
724 self.assertTrue(math.isnan(math.pow(0, NAN)))
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
725 self.assertEqual(math.pow(1, NAN), 1)
46505
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
726
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
727 # pow(0., x)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
728 self.assertEqual(math.pow(0., INF), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
729 self.assertEqual(math.pow(0., 3.), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
730 self.assertEqual(math.pow(0., 2.3), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
731 self.assertEqual(math.pow(0., 2.), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
732 self.assertEqual(math.pow(0., 0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
733 self.assertEqual(math.pow(0., -0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
734 self.assertRaises(ValueError, math.pow, 0., -2.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
735 self.assertRaises(ValueError, math.pow, 0., -2.3)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
736 self.assertRaises(ValueError, math.pow, 0., -3.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
737 self.assertRaises(ValueError, math.pow, 0., NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
738 self.assertTrue(math.isnan(math.pow(0., NAN)))
46505
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
739
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
740 # pow(INF, x)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
741 self.assertEqual(math.pow(INF, INF), INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
742 self.assertEqual(math.pow(INF, 3.), INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
743 self.assertEqual(math.pow(INF, 2.3), INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
744 self.assertEqual(math.pow(INF, 2.), INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
745 self.assertEqual(math.pow(INF, 0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
746 self.assertEqual(math.pow(INF, -0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
747 self.assertEqual(math.pow(INF, -2.), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
748 self.assertEqual(math.pow(INF, -2.3), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
749 self.assertEqual(math.pow(INF, -3.), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
750 self.assertEqual(math.pow(INF, NINF), 0.)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
751 self.assertTrue(math.isnan(math.pow(INF, NAN)))
46505
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
752
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
753 # pow(-0., x)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
754 self.assertEqual(math.pow(-0., INF), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
755 self.assertEqual(math.pow(-0., 3.), -0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
756 self.assertEqual(math.pow(-0., 2.3), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
757 self.assertEqual(math.pow(-0., 2.), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
758 self.assertEqual(math.pow(-0., 0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
759 self.assertEqual(math.pow(-0., -0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
760 self.assertRaises(ValueError, math.pow, -0., -2.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
761 self.assertRaises(ValueError, math.pow, -0., -2.3)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
762 self.assertRaises(ValueError, math.pow, -0., -3.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
763 self.assertRaises(ValueError, math.pow, -0., NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
764 self.assertTrue(math.isnan(math.pow(-0., NAN)))
46505
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
765
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
766 # pow(NINF, x)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
767 self.assertEqual(math.pow(NINF, INF), INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
768 self.assertEqual(math.pow(NINF, 3.), NINF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
769 self.assertEqual(math.pow(NINF, 2.3), INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
770 self.assertEqual(math.pow(NINF, 2.), INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
771 self.assertEqual(math.pow(NINF, 0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
772 self.assertEqual(math.pow(NINF, -0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
773 self.assertEqual(math.pow(NINF, -2.), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
774 self.assertEqual(math.pow(NINF, -2.3), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
775 self.assertEqual(math.pow(NINF, -3.), -0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
776 self.assertEqual(math.pow(NINF, NINF), 0.)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
777 self.assertTrue(math.isnan(math.pow(NINF, NAN)))
46505
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
778
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
779 # pow(-1, x)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
780 self.assertEqual(math.pow(-1., INF), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
781 self.assertEqual(math.pow(-1., 3.), -1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
782 self.assertRaises(ValueError, math.pow, -1., 2.3)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
783 self.assertEqual(math.pow(-1., 2.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
784 self.assertEqual(math.pow(-1., 0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
785 self.assertEqual(math.pow(-1., -0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
786 self.assertEqual(math.pow(-1., -2.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
787 self.assertRaises(ValueError, math.pow, -1., -2.3)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
788 self.assertEqual(math.pow(-1., -3.), -1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
789 self.assertEqual(math.pow(-1., NINF), 1.)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
790 self.assertTrue(math.isnan(math.pow(-1., NAN)))
46505
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
791
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
792 # pow(1, x)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
793 self.assertEqual(math.pow(1., INF), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
794 self.assertEqual(math.pow(1., 3.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
795 self.assertEqual(math.pow(1., 2.3), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
796 self.assertEqual(math.pow(1., 2.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
797 self.assertEqual(math.pow(1., 0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
798 self.assertEqual(math.pow(1., -0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
799 self.assertEqual(math.pow(1., -2.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
800 self.assertEqual(math.pow(1., -2.3), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
801 self.assertEqual(math.pow(1., -3.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
802 self.assertEqual(math.pow(1., NINF), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
803 self.assertEqual(math.pow(1., NAN), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
804
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
805 # pow(x, 0) should be 1 for any x
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
806 self.assertEqual(math.pow(2.3, 0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
807 self.assertEqual(math.pow(-2.3, 0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
808 self.assertEqual(math.pow(NAN, 0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
809 self.assertEqual(math.pow(2.3, -0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
810 self.assertEqual(math.pow(-2.3, -0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
811 self.assertEqual(math.pow(NAN, -0.), 1.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
812
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
813 # pow(x, y) is invalid if x is negative and y is not integral
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
814 self.assertRaises(ValueError, math.pow, -1., 2.3)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
815 self.assertRaises(ValueError, math.pow, -15., -3.1)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
816
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
817 # pow(x, NINF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
818 self.assertEqual(math.pow(1.9, NINF), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
819 self.assertEqual(math.pow(1.1, NINF), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
820 self.assertEqual(math.pow(0.9, NINF), INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
821 self.assertEqual(math.pow(0.1, NINF), INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
822 self.assertEqual(math.pow(-0.1, NINF), INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
823 self.assertEqual(math.pow(-0.9, NINF), INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
824 self.assertEqual(math.pow(-1.1, NINF), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
825 self.assertEqual(math.pow(-1.9, NINF), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
826
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
827 # pow(x, INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
828 self.assertEqual(math.pow(1.9, INF), INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
829 self.assertEqual(math.pow(1.1, INF), INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
830 self.assertEqual(math.pow(0.9, INF), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
831 self.assertEqual(math.pow(0.1, INF), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
832 self.assertEqual(math.pow(-0.1, INF), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
833 self.assertEqual(math.pow(-0.9, INF), 0.)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
834 self.assertEqual(math.pow(-1.1, INF), INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
835 self.assertEqual(math.pow(-1.9, INF), INF)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
836
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
837 # pow(x, y) should work for x negative, y an integer
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
838 self.ftest('(-2.)**3.', math.pow(-2.0, 3.0), -8.0)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
839 self.ftest('(-2.)**2.', math.pow(-2.0, 2.0), 4.0)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
840 self.ftest('(-2.)**1.', math.pow(-2.0, 1.0), -2.0)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
841 self.ftest('(-2.)**0.', math.pow(-2.0, 0.0), 1.0)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
842 self.ftest('(-2.)**-0.', math.pow(-2.0, -0.0), 1.0)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
843 self.ftest('(-2.)**-1.', math.pow(-2.0, -1.0), -0.5)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
844 self.ftest('(-2.)**-2.', math.pow(-2.0, -2.0), 0.25)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
845 self.ftest('(-2.)**-3.', math.pow(-2.0, -3.0), -0.125)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
846 self.assertRaises(ValueError, math.pow, -2.0, -0.5)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
847 self.assertRaises(ValueError, math.pow, -2.0, 0.5)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
848
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
849 # the following tests have been commented out since they don't
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
850 # really belong here: the implementation of ** for floats is
68585
bf94b6a73fc8 #11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66340
diff changeset
851 # independent of the implementation of math.pow
46505
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
852 #self.assertEqual(1**NAN, 1)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
853 #self.assertEqual(1**INF, 1)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
854 #self.assertEqual(1**NINF, 1)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
855 #self.assertEqual(1**0, 1)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
856 #self.assertEqual(1.**NAN, 1)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
857 #self.assertEqual(1.**INF, 1)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
858 #self.assertEqual(1.**NINF, 1)
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
859 #self.assertEqual(1.**0, 1)
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
860
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
861 def testRadians(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
862 self.assertRaises(TypeError, math.radians)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
863 self.ftest('radians(180)', math.radians(180), math.pi)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
864 self.ftest('radians(90)', math.radians(90), math.pi/2)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
865 self.ftest('radians(-45)', math.radians(-45), -math.pi/4)
23426
1157281f00a0 Adds tests for degrees() and radians() functions added to mathmodule.
Raymond Hettinger <python@rcn.com>
parents: 19750
diff changeset
866
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
867 def testSin(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
868 self.assertRaises(TypeError, math.sin)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
869 self.ftest('sin(0)', math.sin(0), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
870 self.ftest('sin(pi/2)', math.sin(math.pi/2), 1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
871 self.ftest('sin(-pi/2)', math.sin(-math.pi/2), -1)
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
872 try:
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
873 self.assertTrue(math.isnan(math.sin(INF)))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
874 self.assertTrue(math.isnan(math.sin(NINF)))
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
875 except ValueError:
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
876 self.assertRaises(ValueError, math.sin, INF)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
877 self.assertRaises(ValueError, math.sin, NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
878 self.assertTrue(math.isnan(math.sin(NAN)))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
879
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
880 def testSinh(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
881 self.assertRaises(TypeError, math.sinh)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
882 self.ftest('sinh(0)', math.sinh(0), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
883 self.ftest('sinh(1)**2-cosh(1)**2', math.sinh(1)**2-math.cosh(1)**2, -1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
884 self.ftest('sinh(1)+sinh(-1)', math.sinh(1)+math.sinh(-1), 0)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
885 self.assertEqual(math.sinh(INF), INF)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
886 self.assertEqual(math.sinh(NINF), NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
887 self.assertTrue(math.isnan(math.sinh(NAN)))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
888
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
889 def testSqrt(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
890 self.assertRaises(TypeError, math.sqrt)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
891 self.ftest('sqrt(0)', math.sqrt(0), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
892 self.ftest('sqrt(1)', math.sqrt(1), 1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
893 self.ftest('sqrt(4)', math.sqrt(4), 2)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61542
diff changeset
894 self.assertEqual(math.sqrt(INF), INF)
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
895 self.assertRaises(ValueError, math.sqrt, NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
896 self.assertTrue(math.isnan(math.sqrt(NAN)))
3950
75d016c97d1c Added test for math module
Guido van Rossum <guido@python.org>
parents:
diff changeset
897
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
898 def testTan(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
899 self.assertRaises(TypeError, math.tan)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
900 self.ftest('tan(0)', math.tan(0), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
901 self.ftest('tan(pi/4)', math.tan(math.pi/4), 1)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
902 self.ftest('tan(-pi/4)', math.tan(-math.pi/4), -1)
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
903 try:
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
904 self.assertTrue(math.isnan(math.tan(INF)))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
905 self.assertTrue(math.isnan(math.tan(NINF)))
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
906 except:
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
907 self.assertRaises(ValueError, math.tan, INF)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
908 self.assertRaises(ValueError, math.tan, NINF)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
909 self.assertTrue(math.isnan(math.tan(NAN)))
15170
09c7ac188ce2 Stop raising OverflowError on underflows reported by libm (errno==ERANGE and
Tim Peters <tim.peters@gmail.com>
parents: 13912
diff changeset
910
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
911 def testTanh(self):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
912 self.assertRaises(TypeError, math.tanh)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
913 self.ftest('tanh(0)', math.tanh(0), 0)
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
914 self.ftest('tanh(1)+tanh(-1)', math.tanh(1)+math.tanh(-1), 0)
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
915 self.ftest('tanh(inf)', math.tanh(INF), 1)
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
916 self.ftest('tanh(-inf)', math.tanh(NINF), -1)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
917 self.assertTrue(math.isnan(math.tanh(NAN)))
66064
fdcaac0e010a Issue #10337: skip tests of tanh() sign in test_math and test_cmath if tanh()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65026
diff changeset
918
fdcaac0e010a Issue #10337: skip tests of tanh() sign in test_math and test_cmath if tanh()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65026
diff changeset
919 @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: 65026
diff changeset
920 @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: 65026
diff changeset
921 "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: 65026
diff changeset
922 def testTanhSign(self):
46516
ec48490b969a Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46505
diff changeset
923 # check that tanh(-0.) == -0. on IEEE 754 systems
66064
fdcaac0e010a Issue #10337: skip tests of tanh() sign in test_math and test_cmath if tanh()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65026
diff changeset
924 self.assertEqual(math.tanh(-0.), -0.)
fdcaac0e010a Issue #10337: skip tests of tanh() sign in test_math and test_cmath if tanh()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65026
diff changeset
925 self.assertEqual(math.copysign(1., math.tanh(-0.)),
fdcaac0e010a Issue #10337: skip tests of tanh() sign in test_math and test_cmath if tanh()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65026
diff changeset
926 math.copysign(1., -0.))
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
927
45082
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
928 def test_trunc(self):
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
929 self.assertEqual(math.trunc(1), 1)
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
930 self.assertEqual(math.trunc(-1), -1)
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
931 self.assertEqual(type(math.trunc(1)), int)
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
932 self.assertEqual(type(math.trunc(1.5)), int)
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
933 self.assertEqual(math.trunc(1.5), 1)
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
934 self.assertEqual(math.trunc(-1.5), -1)
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
935 self.assertEqual(math.trunc(1.999999), 1)
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
936 self.assertEqual(math.trunc(-1.999999), -1)
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
937 self.assertEqual(math.trunc(-0.999999), -0)
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
938 self.assertEqual(math.trunc(-100.999), -100)
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
939
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
940 class TestTrunc(object):
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
941 def __trunc__(self):
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
942 return 23
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
943
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
944 class TestNoTrunc(object):
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
945 pass
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
946
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
947 self.assertEqual(math.trunc(TestTrunc()), 23)
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
948
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
949 self.assertRaises(TypeError, math.trunc)
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
950 self.assertRaises(TypeError, math.trunc, 1, 2)
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
951 self.assertRaises(TypeError, math.trunc, TestNoTrunc())
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
952
62968
53e7ae8ca039 Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents: 62844
diff changeset
953 def testIsfinite(self):
53e7ae8ca039 Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents: 62844
diff changeset
954 self.assertTrue(math.isfinite(0.0))
53e7ae8ca039 Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents: 62844
diff changeset
955 self.assertTrue(math.isfinite(-0.0))
53e7ae8ca039 Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents: 62844
diff changeset
956 self.assertTrue(math.isfinite(1.0))
53e7ae8ca039 Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents: 62844
diff changeset
957 self.assertTrue(math.isfinite(-1.0))
53e7ae8ca039 Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents: 62844
diff changeset
958 self.assertFalse(math.isfinite(float("nan")))
53e7ae8ca039 Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents: 62844
diff changeset
959 self.assertFalse(math.isfinite(float("inf")))
53e7ae8ca039 Issue #9165: Add math.isfinite and cmath.isfinite.
Mark Dickinson <dickinsm@gmail.com>
parents: 62844
diff changeset
960 self.assertFalse(math.isfinite(float("-inf")))
45082
d7540031b959 Merged revisions 60475-60479,60481-60488 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44499
diff changeset
961
44441
b91ca87e6f32 Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 42754
diff changeset
962 def testIsnan(self):
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
963 self.assertTrue(math.isnan(float("nan")))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
964 self.assertTrue(math.isnan(float("inf")* 0.))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
965 self.assertFalse(math.isnan(float("inf")))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
966 self.assertFalse(math.isnan(0.))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
967 self.assertFalse(math.isnan(1.))
44441
b91ca87e6f32 Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 42754
diff changeset
968
b91ca87e6f32 Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 42754
diff changeset
969 def testIsinf(self):
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
970 self.assertTrue(math.isinf(float("inf")))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
971 self.assertTrue(math.isinf(float("-inf")))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
972 self.assertTrue(math.isinf(1E400))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
973 self.assertTrue(math.isinf(-1E400))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
974 self.assertFalse(math.isinf(float("nan")))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
975 self.assertFalse(math.isinf(0.))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53352
diff changeset
976 self.assertFalse(math.isinf(1.))
44441
b91ca87e6f32 Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 42754
diff changeset
977
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
978 # RED_FLAG 16-Oct-2000 Tim
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
979 # While 2.0 is more consistent about exceptions than previous releases, it
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
980 # still fails this part of the test on some platforms. For now, we only
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
981 # *run* test_exceptions() in verbose mode, so that this isn't normally
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
982 # tested.
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
983 @unittest.skipUnless(verbose, 'requires verbose mode')
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
984 def test_exceptions(self):
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
985 try:
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
986 x = math.exp(-1000000000)
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
987 except:
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
988 # mathmodule.c is failing to weed out underflows from libm, or
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
989 # we've got an fp format with huge dynamic range
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
990 self.fail("underflowing exp() should not have raised "
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
991 "an exception")
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
992 if x != 0:
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
993 self.fail("underflowing exp() should have returned 0")
15170
09c7ac188ce2 Stop raising OverflowError on underflows reported by libm (errno==ERANGE and
Tim Peters <tim.peters@gmail.com>
parents: 13912
diff changeset
994
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
995 # If this fails, probably using a strict IEEE-754 conforming libm, and x
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
996 # is +Inf afterwards. But Python wants overflows detected by default.
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
997 try:
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
998 x = math.exp(1000000000)
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
999 except OverflowError:
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
1000 pass
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
1001 else:
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
1002 self.fail("overflowing exp() didn't trigger OverflowError")
15170
09c7ac188ce2 Stop raising OverflowError on underflows reported by libm (errno==ERANGE and
Tim Peters <tim.peters@gmail.com>
parents: 13912
diff changeset
1003
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
1004 # If this fails, it could be a puzzle. One odd possibility is that
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
1005 # mathmodule.c's macros are getting confused while comparing
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
1006 # Inf (HUGE_VAL) to a NaN, and artificially setting errno to ERANGE
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
1007 # as a result (and so raising OverflowError instead).
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
1008 try:
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
1009 x = math.sqrt(-1.0)
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
1010 except ValueError:
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
1011 pass
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
1012 else:
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 70576
diff changeset
1013 self.fail("sqrt(-1) didn't raise ValueError")
15247
dd0d199674f8 Test for math.* exceptional behavior only in verbose mode, so that the
Tim Peters <tim.peters@gmail.com>
parents: 15171
diff changeset
1014
56091
b0e5105ff97b Merged revisions 74925 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 55593
diff changeset
1015 @requires_IEEE_754
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
1016 def test_testfile(self):
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
1017 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: 45082
diff changeset
1018 # Skip if either the input or result is complex, or if
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
1019 # flags is nonempty
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
1020 if ai != 0. or ei != 0. or flags:
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
1021 continue
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
1022 if fn in ['rect', 'polar']:
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
1023 # no real versions of rect, polar
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
1024 continue
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
1025 func = getattr(math, fn)
46505
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
1026 try:
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
1027 result = func(ar)
46616
3f2117d3271f Make floating-point exception error messages slightly more verbose: in
Mark Dickinson <dickinsm@gmail.com>
parents: 46516
diff changeset
1028 except ValueError as exc:
3f2117d3271f Make floating-point exception error messages slightly more verbose: in
Mark Dickinson <dickinsm@gmail.com>
parents: 46516
diff changeset
1029 message = (("Unexpected ValueError: %s\n " +
3f2117d3271f Make floating-point exception error messages slightly more verbose: in
Mark Dickinson <dickinsm@gmail.com>
parents: 46516
diff changeset
1030 "in test %s:%s(%r)\n") % (exc.args[0], id, fn, ar))
46505
63965327b3ef Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46477
diff changeset
1031 self.fail(message)
47320
3975ec2b0de2 Merged revisions 63542-63544,63546,63553,63563-63564,63567,63569,63576 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47201
diff changeset
1032 except OverflowError:
3975ec2b0de2 Merged revisions 63542-63544,63546,63553,63563-63564,63567,63569,63576 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47201
diff changeset
1033 message = ("Unexpected OverflowError in " +
3975ec2b0de2 Merged revisions 63542-63544,63546,63553,63563-63564,63567,63569,63576 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47201
diff changeset
1034 "test %s:%s(%r)\n" % (id, fn, ar))
3975ec2b0de2 Merged revisions 63542-63544,63546,63553,63563-63564,63567,63569,63576 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47201
diff changeset
1035 self.fail(message)
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
1036 self.ftest("%s:%s(%r)" % (id, fn, ar), result, er)
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
1037
66064
fdcaac0e010a Issue #10337: skip tests of tanh() sign in test_math and test_cmath if tanh()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65026
diff changeset
1038 @requires_IEEE_754
56270
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1039 def test_mtestfile(self):
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1040 fail_fmt = "{}:{}({!r}): expected {!r}, got {!r}"
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1041
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1042 failures = []
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1043 for id, fn, arg, expected, flags in parse_mtestfile(math_testcases):
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1044 func = getattr(math, fn)
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1045
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1046 if 'invalid' in flags or 'divide-by-zero' in flags:
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1047 expected = 'ValueError'
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1048 elif 'overflow' in flags:
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1049 expected = 'OverflowError'
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1050
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1051 try:
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1052 got = func(arg)
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1053 except ValueError:
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1054 got = 'ValueError'
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1055 except OverflowError:
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1056 got = 'OverflowError'
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1057
57660
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
1058 accuracy_failure = None
56270
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1059 if isinstance(got, float) and isinstance(expected, float):
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1060 if math.isnan(expected) and math.isnan(got):
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1061 continue
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1062 if not math.isnan(expected) and not math.isnan(got):
57758
b45ca11b9a3e Merged revisions 76861 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57660
diff changeset
1063 if fn == 'lgamma':
b45ca11b9a3e Merged revisions 76861 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57660
diff changeset
1064 # we use a weaker accuracy test for lgamma;
b45ca11b9a3e Merged revisions 76861 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57660
diff changeset
1065 # lgamma only achieves an absolute error of
b45ca11b9a3e Merged revisions 76861 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57660
diff changeset
1066 # a few multiples of the machine accuracy, in
b45ca11b9a3e Merged revisions 76861 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57660
diff changeset
1067 # general.
57660
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
1068 accuracy_failure = acc_check(expected, got,
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
1069 rel_err = 5e-15,
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
1070 abs_err = 5e-15)
62317
d064e8934f4d Merged revisions 81967 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61599
diff changeset
1071 elif fn == 'erfc':
d064e8934f4d Merged revisions 81967 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61599
diff changeset
1072 # erfc has less-than-ideal accuracy for large
d064e8934f4d Merged revisions 81967 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61599
diff changeset
1073 # arguments (x ~ 25 or so), mainly due to the
d064e8934f4d Merged revisions 81967 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61599
diff changeset
1074 # error involved in computing exp(-x*x).
d064e8934f4d Merged revisions 81967 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61599
diff changeset
1075 #
d064e8934f4d Merged revisions 81967 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61599
diff changeset
1076 # XXX Would be better to weaken this test only
d064e8934f4d Merged revisions 81967 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61599
diff changeset
1077 # for large x, instead of for all x.
d064e8934f4d Merged revisions 81967 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61599
diff changeset
1078 accuracy_failure = ulps_check(expected, got, 2000)
d064e8934f4d Merged revisions 81967 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61599
diff changeset
1079
57660
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
1080 else:
57758
b45ca11b9a3e Merged revisions 76861 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57660
diff changeset
1081 accuracy_failure = ulps_check(expected, got, 20)
57660
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
1082 if accuracy_failure is None:
56270
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1083 continue
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1084
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1085 if isinstance(got, str) and isinstance(expected, str):
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1086 if got == expected:
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1087 continue
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1088
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1089 fail_msg = fail_fmt.format(id, fn, arg, expected, got)
57660
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
1090 if accuracy_failure is not None:
7cb73e7c176d Merged revisions 76755 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56557
diff changeset
1091 fail_msg += ' ({})'.format(accuracy_failure)
56270
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1092 failures.append(fail_msg)
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1093
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1094 if failures:
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1095 self.fail('Failures in test_mtestfile:\n ' +
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1096 '\n '.join(failures))
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1097
47b82fbdc2bb Merged revisions 75117 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56091
diff changeset
1098
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
1099 def test_main():
46477
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
1100 from doctest import DocFileSuite
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
1101 suite = unittest.TestSuite()
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
1102 suite.addTest(unittest.makeSuite(MathTests))
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
1103 suite.addTest(DocFileSuite("ieee754.txt"))
b69f443ef480 Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45082
diff changeset
1104 run_unittest(suite)
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
1105
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
1106 if __name__ == '__main__':
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 31515
diff changeset
1107 test_main()