Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_float.py @ 64166:d0e9febfa00a 3.1
Merged revisions 84172 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r84172 | martin.v.loewis | 2010-08-18 18:12:23 +0200 (Mi, 18 Aug 2010) | 2 lines
Restore GIL in nis_cat in case of error.
........
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Thu, 19 Aug 2010 09:03:03 +0000 |
| parents | be32f611183b |
| children | 06e21500119a |
| rev | line source |
|---|---|
| 34972 | 1 |
| 2 import unittest, struct | |
|
44260
682d9788a038
Issue #1580: New free format floating point representation based on "Floating-Point Printer Sample Code", by Robert G. Burger. For example repr(11./5) now returns '2.2' instead of '2.2000000000000002'.
Christian Heimes <christian@cheimes.de>
parents:
43947
diff
changeset
|
3 import os |
|
53187
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
4 import sys |
|
47201
9c930a32cebb
#2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents:
46664
diff
changeset
|
5 from test import support |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45023
diff
changeset
|
6 import math |
|
48497
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
7 from math import isinf, isnan, copysign, ldexp |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45023
diff
changeset
|
8 import operator |
|
49055
ca1a8ac47d04
I modified the tests a bit to account for unicode string
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48817
diff
changeset
|
9 import random, fractions |
|
58280
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
10 import re |
| 34972 | 11 |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45023
diff
changeset
|
12 INF = float("inf") |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45023
diff
changeset
|
13 NAN = float("nan") |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
14 |
|
53187
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
15 #locate file with float format test values |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
16 test_dir = os.path.dirname(__file__) or os.curdir |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
17 format_testfile = os.path.join(test_dir, 'formatfloat_testcases.txt') |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
18 |
|
58280
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
19 finite_decimal_parser = re.compile(r""" # A numeric string consists of: |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
20 (?P<sign>[-+])? # an optional sign, followed by |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
21 (?=\d|\.\d) # a number with at least one digit |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
22 (?P<int>\d*) # having a (possibly empty) integer part |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
23 (?:\.(?P<frac>\d*))? # followed by an optional fractional part |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
24 (?:E(?P<exp>[-+]?\d+))? # and an optional exponent |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
25 \Z |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
26 """, re.VERBOSE | re.IGNORECASE | re.UNICODE).match |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
27 |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
28 # Pure Python version of correctly rounded string->float conversion. |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
29 # Avoids any use of floating-point by returning the result as a hex string. |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
30 def strtod(s, mant_dig=53, min_exp = -1021, max_exp = 1024): |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
31 """Convert a finite decimal string to a hex string representing an |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
32 IEEE 754 binary64 float. Return 'inf' or '-inf' on overflow. |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
33 This function makes no use of floating-point arithmetic at any |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
34 stage.""" |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
35 |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
36 # parse string into a pair of integers 'a' and 'b' such that |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
37 # abs(decimal value) = a/b, and a boolean 'negative'. |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
38 m = finite_decimal_parser(s) |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
39 if m is None: |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
40 raise ValueError('invalid numeric string') |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
41 fraction = m.group('frac') or '' |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
42 intpart = int(m.group('int') + fraction) |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
43 exp = int(m.group('exp') or '0') - len(fraction) |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
44 negative = m.group('sign') == '-' |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
45 a, b = intpart*10**max(exp, 0), 10**max(0, -exp) |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
46 |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
47 # quick return for zeros |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
48 if not a: |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
49 return '-0x0.0p+0' if negative else '0x0.0p+0' |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
50 |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
51 # compute exponent e for result; may be one too small in the case |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
52 # that the rounded value of a/b lies in a different binade from a/b |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
53 d = a.bit_length() - b.bit_length() |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
54 d += (a >> d if d >= 0 else a << -d) >= b |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
55 e = max(d, min_exp) - mant_dig |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
56 |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
57 # approximate a/b by number of the form q * 2**e; adjust e if necessary |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
58 a, b = a << max(-e, 0), b << max(e, 0) |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
59 q, r = divmod(a, b) |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
60 if 2*r > b or 2*r == b and q & 1: |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
61 q += 1 |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
62 if q.bit_length() == mant_dig+1: |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
63 q //= 2 |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
64 e += 1 |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
65 |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
66 # double check that (q, e) has the right form |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
67 assert q.bit_length() <= mant_dig and e >= min_exp - mant_dig |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
68 assert q.bit_length() == mant_dig or e == min_exp - mant_dig |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
69 |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
70 # check for overflow and underflow |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
71 if e + q.bit_length() > max_exp: |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
72 return '-inf' if negative else 'inf' |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
73 if not q: |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
74 return '-0x0.0p+0' if negative else '0x0.0p+0' |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
75 |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
76 # for hex representation, shift so # bits after point is a multiple of 4 |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
77 hexdigs = 1 + (mant_dig-2)//4 |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
78 shift = 3 - (mant_dig-2)%4 |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
79 q, e = q << shift, e - shift |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
80 return '{}0x{:x}.{:0{}x}p{:+d}'.format( |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
81 '-' if negative else '', |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
82 q // 16**hexdigs, |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
83 q % 16**hexdigs, |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
84 hexdigs, |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
85 e + 4*hexdigs) |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
86 |
|
46664
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
87 class GeneralFloatCases(unittest.TestCase): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
88 |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
89 def test_float(self): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
90 self.assertEqual(float(3.14), 3.14) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
91 self.assertEqual(float(314), 314.0) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
92 self.assertEqual(float(" 3.14 "), 3.14) |
|
49055
ca1a8ac47d04
I modified the tests a bit to account for unicode string
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48817
diff
changeset
|
93 self.assertEqual(float(b" 3.14 "), 3.14) |
|
46664
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
94 self.assertRaises(ValueError, float, " 0x3.1 ") |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
95 self.assertRaises(ValueError, float, " -0x3.p-1 ") |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
96 self.assertRaises(ValueError, float, " +0x3.p-1 ") |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
97 self.assertRaises(ValueError, float, "++3.14") |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
98 self.assertRaises(ValueError, float, "+-3.14") |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
99 self.assertRaises(ValueError, float, "-+3.14") |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
100 self.assertRaises(ValueError, float, "--3.14") |
|
53187
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
101 self.assertRaises(ValueError, float, ".nan") |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
102 self.assertRaises(ValueError, float, "+.inf") |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
103 self.assertRaises(ValueError, float, ".") |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
104 self.assertRaises(ValueError, float, "-.") |
|
49055
ca1a8ac47d04
I modified the tests a bit to account for unicode string
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48817
diff
changeset
|
105 self.assertEqual(float(b" \u0663.\u0661\u0664 ".decode('raw-unicode-escape')), 3.14) |
|
56916
690c565c15a9
Merged revisions 75885 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
55593
diff
changeset
|
106 # extra long strings should not be a problem |
|
690c565c15a9
Merged revisions 75885 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
55593
diff
changeset
|
107 float(b'.' + b'1'*1000) |
|
690c565c15a9
Merged revisions 75885 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
55593
diff
changeset
|
108 float('.' + '1'*1000) |
|
46664
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
109 |
|
47201
9c930a32cebb
#2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents:
46664
diff
changeset
|
110 @support.run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE') |
|
46664
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
111 def test_float_with_comma(self): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
112 # set locale to something that doesn't use '.' for the decimal point |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
113 # float must not accept the locale specific decimal point but |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
114 # it still has to accept the normal python syntac |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
115 import locale |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
116 if not locale.localeconv()['decimal_point'] == ',': |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
117 return |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
118 |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
119 self.assertEqual(float(" 3.14 "), 3.14) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
120 self.assertEqual(float("+3.14 "), 3.14) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
121 self.assertEqual(float("-3.14 "), -3.14) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
122 self.assertEqual(float(".14 "), .14) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
123 self.assertEqual(float("3. "), 3.0) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
124 self.assertEqual(float("3.e3 "), 3000.0) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
125 self.assertEqual(float("3.2e3 "), 3200.0) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
126 self.assertEqual(float("2.5e-1 "), 0.25) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
127 self.assertEqual(float("5e-1"), 0.5) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
128 self.assertRaises(ValueError, float, " 3,14 ") |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
129 self.assertRaises(ValueError, float, " +3,14 ") |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
130 self.assertRaises(ValueError, float, " -3,14 ") |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
131 self.assertRaises(ValueError, float, " 0x3.1 ") |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
132 self.assertRaises(ValueError, float, " -0x3.p-1 ") |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
133 self.assertRaises(ValueError, float, " +0x3.p-1 ") |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
134 self.assertEqual(float(" 25.e-1 "), 2.5) |
|
49062
13955bcd08be
Merged revisions 66277 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49055
diff
changeset
|
135 self.assertEqual(support.fcmp(float(" .25e-1 "), .025), 0) |
|
46664
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
136 |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
137 def test_floatconversion(self): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
138 # Make sure that calls to __float__() work properly |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
139 class Foo0: |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
140 def __float__(self): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
141 return 42. |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
142 |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
143 class Foo1(object): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
144 def __float__(self): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
145 return 42. |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
146 |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
147 class Foo2(float): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
148 def __float__(self): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
149 return 42. |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
150 |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
151 class Foo3(float): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
152 def __new__(cls, value=0.): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
153 return float.__new__(cls, 2*value) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
154 |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
155 def __float__(self): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
156 return self |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
157 |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
158 class Foo4(float): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
159 def __float__(self): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
160 return 42 |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
161 |
|
53161
df2638b9bee2
Merged revisions 71628 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49721
diff
changeset
|
162 # Issue 5759: __float__ not called on str subclasses (though it is on |
|
df2638b9bee2
Merged revisions 71628 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49721
diff
changeset
|
163 # unicode subclasses). |
|
df2638b9bee2
Merged revisions 71628 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49721
diff
changeset
|
164 class FooStr(str): |
|
df2638b9bee2
Merged revisions 71628 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49721
diff
changeset
|
165 def __float__(self): |
|
df2638b9bee2
Merged revisions 71628 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49721
diff
changeset
|
166 return float(str(self)) + 1 |
|
df2638b9bee2
Merged revisions 71628 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49721
diff
changeset
|
167 |
|
46664
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
168 self.assertAlmostEqual(float(Foo0()), 42.) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
169 self.assertAlmostEqual(float(Foo1()), 42.) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
170 self.assertAlmostEqual(float(Foo2()), 42.) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
171 self.assertAlmostEqual(float(Foo3(21)), 42.) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
172 self.assertRaises(TypeError, float, Foo4(42)) |
|
53161
df2638b9bee2
Merged revisions 71628 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49721
diff
changeset
|
173 self.assertAlmostEqual(float(FooStr('8')), 9.) |
|
46664
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
174 |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
175 def test_floatasratio(self): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
176 for f, ratio in [ |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
177 (0.875, (7, 8)), |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
178 (-0.875, (-7, 8)), |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
179 (0.0, (0, 1)), |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
180 (11.5, (23, 2)), |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
181 ]: |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
182 self.assertEqual(f.as_integer_ratio(), ratio) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
183 |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
184 for i in range(10000): |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
185 f = random.random() |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
186 f *= 10 ** random.randint(-100, 100) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
187 n, d = f.as_integer_ratio() |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
188 self.assertEqual(float(n).__truediv__(d), f) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
189 |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
190 R = fractions.Fraction |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
191 self.assertEqual(R(0, 1), |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
192 R(*float(0.0).as_integer_ratio())) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
193 self.assertEqual(R(5, 2), |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
194 R(*float(2.5).as_integer_ratio())) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
195 self.assertEqual(R(1, 2), |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
196 R(*float(0.5).as_integer_ratio())) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
197 self.assertEqual(R(4728779608739021, 2251799813685248), |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
198 R(*float(2.1).as_integer_ratio())) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
199 self.assertEqual(R(-4728779608739021, 2251799813685248), |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
200 R(*float(-2.1).as_integer_ratio())) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
201 self.assertEqual(R(-2100, 1), |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
202 R(*float(-2100.0).as_integer_ratio())) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
203 |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
204 self.assertRaises(OverflowError, float('inf').as_integer_ratio) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
205 self.assertRaises(OverflowError, float('-inf').as_integer_ratio) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
206 self.assertRaises(ValueError, float('nan').as_integer_ratio) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
207 |
|
49721
98628dc730da
Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
Mark Dickinson <dickinsm@gmail.com>
parents:
49062
diff
changeset
|
208 def test_float_containment(self): |
|
98628dc730da
Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
Mark Dickinson <dickinsm@gmail.com>
parents:
49062
diff
changeset
|
209 floats = (INF, -INF, 0.0, 1.0, NAN) |
|
98628dc730da
Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
Mark Dickinson <dickinsm@gmail.com>
parents:
49062
diff
changeset
|
210 for f in floats: |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
211 self.assertTrue(f in [f], "'%r' not in []" % f) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
212 self.assertTrue(f in (f,), "'%r' not in ()" % f) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
213 self.assertTrue(f in {f}, "'%r' not in set()" % f) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
214 self.assertTrue(f in {f: None}, "'%r' not in {}" % f) |
|
49721
98628dc730da
Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
Mark Dickinson <dickinsm@gmail.com>
parents:
49062
diff
changeset
|
215 self.assertEqual([f].count(f), 1, "[].count('%r') != 1" % f) |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
216 self.assertTrue(f in floats, "'%r' not in container" % f) |
|
49721
98628dc730da
Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
Mark Dickinson <dickinsm@gmail.com>
parents:
49062
diff
changeset
|
217 |
|
98628dc730da
Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
Mark Dickinson <dickinsm@gmail.com>
parents:
49062
diff
changeset
|
218 for f in floats: |
|
98628dc730da
Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
Mark Dickinson <dickinsm@gmail.com>
parents:
49062
diff
changeset
|
219 # nonidentical containers, same type, same contents |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
220 self.assertTrue([f] == [f], "[%r] != [%r]" % (f, f)) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
221 self.assertTrue((f,) == (f,), "(%r,) != (%r,)" % (f, f)) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
222 self.assertTrue({f} == {f}, "{%r} != {%r}" % (f, f)) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
223 self.assertTrue({f : None} == {f: None}, "{%r : None} != " |
|
49721
98628dc730da
Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
Mark Dickinson <dickinsm@gmail.com>
parents:
49062
diff
changeset
|
224 "{%r : None}" % (f, f)) |
|
98628dc730da
Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
Mark Dickinson <dickinsm@gmail.com>
parents:
49062
diff
changeset
|
225 |
|
98628dc730da
Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
Mark Dickinson <dickinsm@gmail.com>
parents:
49062
diff
changeset
|
226 # identical containers |
|
98628dc730da
Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
Mark Dickinson <dickinsm@gmail.com>
parents:
49062
diff
changeset
|
227 l, t, s, d = [f], (f,), {f}, {f: None} |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
228 self.assertTrue(l == l, "[%r] not equal to itself" % f) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
229 self.assertTrue(t == t, "(%r,) not equal to itself" % f) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
230 self.assertTrue(s == s, "{%r} not equal to itself" % f) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
231 self.assertTrue(d == d, "{%r : None} not equal to itself" % f) |
|
49721
98628dc730da
Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
Mark Dickinson <dickinsm@gmail.com>
parents:
49062
diff
changeset
|
232 |
|
98628dc730da
Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
Mark Dickinson <dickinsm@gmail.com>
parents:
49062
diff
changeset
|
233 |
|
98628dc730da
Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
Mark Dickinson <dickinsm@gmail.com>
parents:
49062
diff
changeset
|
234 |
| 34972 | 235 class FormatFunctionsTestCase(unittest.TestCase): |
| 236 | |
| 237 def setUp(self): | |
| 238 self.save_formats = {'double':float.__getformat__('double'), | |
| 239 'float':float.__getformat__('float')} | |
| 240 | |
| 241 def tearDown(self): | |
| 242 float.__setformat__('double', self.save_formats['double']) | |
| 243 float.__setformat__('float', self.save_formats['float']) | |
| 244 | |
| 245 def test_getformat(self): | |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
246 self.assertTrue(float.__getformat__('double') in |
| 34972 | 247 ['unknown', 'IEEE, big-endian', 'IEEE, little-endian']) |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
248 self.assertTrue(float.__getformat__('float') in |
| 34972 | 249 ['unknown', 'IEEE, big-endian', 'IEEE, little-endian']) |
| 250 self.assertRaises(ValueError, float.__getformat__, 'chicken') | |
| 251 self.assertRaises(TypeError, float.__getformat__, 1) | |
| 252 | |
| 253 def test_setformat(self): | |
| 254 for t in 'double', 'float': | |
| 255 float.__setformat__(t, 'unknown') | |
| 256 if self.save_formats[t] == 'IEEE, big-endian': | |
| 257 self.assertRaises(ValueError, float.__setformat__, | |
| 258 t, 'IEEE, little-endian') | |
| 259 elif self.save_formats[t] == 'IEEE, little-endian': | |
| 260 self.assertRaises(ValueError, float.__setformat__, | |
| 261 t, 'IEEE, big-endian') | |
| 262 else: | |
| 263 self.assertRaises(ValueError, float.__setformat__, | |
| 264 t, 'IEEE, big-endian') | |
| 265 self.assertRaises(ValueError, float.__setformat__, | |
| 266 t, 'IEEE, little-endian') | |
| 267 self.assertRaises(ValueError, float.__setformat__, | |
| 268 t, 'chicken') | |
| 269 self.assertRaises(ValueError, float.__setformat__, | |
| 270 'chicken', 'unknown') | |
| 271 | |
|
41725
d1146d4db549
Make tset_float pass. float(<unicode>) was never very good -- it used
Guido van Rossum <guido@python.org>
parents:
35014
diff
changeset
|
272 BE_DOUBLE_INF = b'\x7f\xf0\x00\x00\x00\x00\x00\x00' |
|
43947
cbc8b3bd3157
Rename buffer -> bytearray.
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
273 LE_DOUBLE_INF = bytes(reversed(BE_DOUBLE_INF)) |
|
41725
d1146d4db549
Make tset_float pass. float(<unicode>) was never very good -- it used
Guido van Rossum <guido@python.org>
parents:
35014
diff
changeset
|
274 BE_DOUBLE_NAN = b'\x7f\xf8\x00\x00\x00\x00\x00\x00' |
|
43947
cbc8b3bd3157
Rename buffer -> bytearray.
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
275 LE_DOUBLE_NAN = bytes(reversed(BE_DOUBLE_NAN)) |
| 34972 | 276 |
|
41725
d1146d4db549
Make tset_float pass. float(<unicode>) was never very good -- it used
Guido van Rossum <guido@python.org>
parents:
35014
diff
changeset
|
277 BE_FLOAT_INF = b'\x7f\x80\x00\x00' |
|
43947
cbc8b3bd3157
Rename buffer -> bytearray.
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
278 LE_FLOAT_INF = bytes(reversed(BE_FLOAT_INF)) |
|
41725
d1146d4db549
Make tset_float pass. float(<unicode>) was never very good -- it used
Guido van Rossum <guido@python.org>
parents:
35014
diff
changeset
|
279 BE_FLOAT_NAN = b'\x7f\xc0\x00\x00' |
|
43947
cbc8b3bd3157
Rename buffer -> bytearray.
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
280 LE_FLOAT_NAN = bytes(reversed(BE_FLOAT_NAN)) |
| 34972 | 281 |
| 282 # on non-IEEE platforms, attempting to unpack a bit pattern | |
| 283 # representing an infinity or a NaN should raise an exception. | |
| 284 | |
| 285 class UnknownFormatTestCase(unittest.TestCase): | |
| 286 def setUp(self): | |
| 287 self.save_formats = {'double':float.__getformat__('double'), | |
| 288 'float':float.__getformat__('float')} | |
| 289 float.__setformat__('double', 'unknown') | |
| 290 float.__setformat__('float', 'unknown') | |
|
35014
275843630522
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
34972
diff
changeset
|
291 |
| 34972 | 292 def tearDown(self): |
| 293 float.__setformat__('double', self.save_formats['double']) | |
| 294 float.__setformat__('float', self.save_formats['float']) | |
| 295 | |
| 296 def test_double_specials_dont_unpack(self): | |
| 297 for fmt, data in [('>d', BE_DOUBLE_INF), | |
| 298 ('>d', BE_DOUBLE_NAN), | |
| 299 ('<d', LE_DOUBLE_INF), | |
| 300 ('<d', LE_DOUBLE_NAN)]: | |
| 301 self.assertRaises(ValueError, struct.unpack, fmt, data) | |
| 302 | |
| 303 def test_float_specials_dont_unpack(self): | |
| 304 for fmt, data in [('>f', BE_FLOAT_INF), | |
| 305 ('>f', BE_FLOAT_NAN), | |
| 306 ('<f', LE_FLOAT_INF), | |
| 307 ('<f', LE_FLOAT_NAN)]: | |
| 308 self.assertRaises(ValueError, struct.unpack, fmt, data) | |
| 309 | |
| 310 | |
| 311 # on an IEEE platform, all we guarantee is that bit patterns | |
| 312 # representing infinities or NaNs do not raise an exception; all else | |
| 313 # is accident (today). | |
|
42775
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41725
diff
changeset
|
314 # let's also try to guarantee that -0.0 and 0.0 don't get confused. |
| 34972 | 315 |
| 316 class IEEEFormatTestCase(unittest.TestCase): | |
| 317 if float.__getformat__("double").startswith("IEEE"): | |
| 318 def test_double_specials_do_unpack(self): | |
| 319 for fmt, data in [('>d', BE_DOUBLE_INF), | |
| 320 ('>d', BE_DOUBLE_NAN), | |
| 321 ('<d', LE_DOUBLE_INF), | |
| 322 ('<d', LE_DOUBLE_NAN)]: | |
| 323 struct.unpack(fmt, data) | |
| 324 | |
| 325 if float.__getformat__("float").startswith("IEEE"): | |
| 326 def test_float_specials_do_unpack(self): | |
| 327 for fmt, data in [('>f', BE_FLOAT_INF), | |
| 328 ('>f', BE_FLOAT_NAN), | |
| 329 ('<f', LE_FLOAT_INF), | |
| 330 ('<f', LE_FLOAT_NAN)]: | |
| 331 struct.unpack(fmt, data) | |
| 332 | |
|
42775
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41725
diff
changeset
|
333 if float.__getformat__("double").startswith("IEEE"): |
|
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41725
diff
changeset
|
334 def test_negative_zero(self): |
|
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41725
diff
changeset
|
335 import math |
|
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41725
diff
changeset
|
336 def pos_pos(): |
|
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41725
diff
changeset
|
337 return 0.0, math.atan2(0.0, -1) |
|
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41725
diff
changeset
|
338 def pos_neg(): |
|
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41725
diff
changeset
|
339 return 0.0, math.atan2(-0.0, -1) |
|
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41725
diff
changeset
|
340 def neg_pos(): |
|
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41725
diff
changeset
|
341 return -0.0, math.atan2(0.0, -1) |
|
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41725
diff
changeset
|
342 def neg_neg(): |
|
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41725
diff
changeset
|
343 return -0.0, math.atan2(-0.0, -1) |
|
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41725
diff
changeset
|
344 self.assertEquals(pos_pos(), neg_pos()) |
|
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41725
diff
changeset
|
345 self.assertEquals(pos_neg(), neg_neg()) |
|
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41725
diff
changeset
|
346 |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
347 class FormatTestCase(unittest.TestCase): |
| 43111 | 348 def test_format(self): |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
349 # these should be rewritten to use both format(x, spec) and |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
350 # x.__format__(spec) |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
351 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
352 self.assertEqual(format(0.0, 'f'), '0.000000') |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
353 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
354 # the default is 'g', except for empty format spec |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
355 self.assertEqual(format(0.0, ''), '0.0') |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
356 self.assertEqual(format(0.01, ''), '0.01') |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
357 self.assertEqual(format(0.01, 'g'), '0.01') |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
358 |
|
53787
c6376d3fa968
Issue #5920: Changed format.__float__ and complex.__float__ to use a precision of 12 when using the empty presentation type. This more closely matches str()'s behavior and reduces surprises when adding alignment flags to an empty format string. Patch by Mark Dickinson.
Eric Smith <eric@trueblade.com>
parents:
53603
diff
changeset
|
359 # empty presentation type should format in the same way as str |
|
c6376d3fa968
Issue #5920: Changed format.__float__ and complex.__float__ to use a precision of 12 when using the empty presentation type. This more closely matches str()'s behavior and reduces surprises when adding alignment flags to an empty format string. Patch by Mark Dickinson.
Eric Smith <eric@trueblade.com>
parents:
53603
diff
changeset
|
360 # (issue 5920) |
|
c6376d3fa968
Issue #5920: Changed format.__float__ and complex.__float__ to use a precision of 12 when using the empty presentation type. This more closely matches str()'s behavior and reduces surprises when adding alignment flags to an empty format string. Patch by Mark Dickinson.
Eric Smith <eric@trueblade.com>
parents:
53603
diff
changeset
|
361 x = 100/7. |
|
c6376d3fa968
Issue #5920: Changed format.__float__ and complex.__float__ to use a precision of 12 when using the empty presentation type. This more closely matches str()'s behavior and reduces surprises when adding alignment flags to an empty format string. Patch by Mark Dickinson.
Eric Smith <eric@trueblade.com>
parents:
53603
diff
changeset
|
362 self.assertEqual(format(x, ''), str(x)) |
|
c6376d3fa968
Issue #5920: Changed format.__float__ and complex.__float__ to use a precision of 12 when using the empty presentation type. This more closely matches str()'s behavior and reduces surprises when adding alignment flags to an empty format string. Patch by Mark Dickinson.
Eric Smith <eric@trueblade.com>
parents:
53603
diff
changeset
|
363 self.assertEqual(format(x, '-'), str(x)) |
|
c6376d3fa968
Issue #5920: Changed format.__float__ and complex.__float__ to use a precision of 12 when using the empty presentation type. This more closely matches str()'s behavior and reduces surprises when adding alignment flags to an empty format string. Patch by Mark Dickinson.
Eric Smith <eric@trueblade.com>
parents:
53603
diff
changeset
|
364 self.assertEqual(format(x, '>'), str(x)) |
|
c6376d3fa968
Issue #5920: Changed format.__float__ and complex.__float__ to use a precision of 12 when using the empty presentation type. This more closely matches str()'s behavior and reduces surprises when adding alignment flags to an empty format string. Patch by Mark Dickinson.
Eric Smith <eric@trueblade.com>
parents:
53603
diff
changeset
|
365 self.assertEqual(format(x, '2'), str(x)) |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
366 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
367 self.assertEqual(format(1.0, 'f'), '1.000000') |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
368 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
369 self.assertEqual(format(-1.0, 'f'), '-1.000000') |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
370 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
371 self.assertEqual(format( 1.0, ' f'), ' 1.000000') |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
372 self.assertEqual(format(-1.0, ' f'), '-1.000000') |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
373 self.assertEqual(format( 1.0, '+f'), '+1.000000') |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
374 self.assertEqual(format(-1.0, '+f'), '-1.000000') |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
375 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
376 # % formatting |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
377 self.assertEqual(format(-1.0, '%'), '-100.000000%') |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
378 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
379 # conversion to string should fail |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
380 self.assertRaises(ValueError, format, 3.0, "s") |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
381 |
|
45023
727cc810d690
Restrict format presentation types to those specified in the 'Standard Format Specifiers' section of PEP 3101.
Eric Smith <eric@trueblade.com>
parents:
44349
diff
changeset
|
382 # other format specifiers shouldn't work on floats, |
|
727cc810d690
Restrict format presentation types to those specified in the 'Standard Format Specifiers' section of PEP 3101.
Eric Smith <eric@trueblade.com>
parents:
44349
diff
changeset
|
383 # in particular int specifiers |
|
727cc810d690
Restrict format presentation types to those specified in the 'Standard Format Specifiers' section of PEP 3101.
Eric Smith <eric@trueblade.com>
parents:
44349
diff
changeset
|
384 for format_spec in ([chr(x) for x in range(ord('a'), ord('z')+1)] + |
|
727cc810d690
Restrict format presentation types to those specified in the 'Standard Format Specifiers' section of PEP 3101.
Eric Smith <eric@trueblade.com>
parents:
44349
diff
changeset
|
385 [chr(x) for x in range(ord('A'), ord('Z')+1)]): |
|
727cc810d690
Restrict format presentation types to those specified in the 'Standard Format Specifiers' section of PEP 3101.
Eric Smith <eric@trueblade.com>
parents:
44349
diff
changeset
|
386 if not format_spec in 'eEfFgGn%': |
|
727cc810d690
Restrict format presentation types to those specified in the 'Standard Format Specifiers' section of PEP 3101.
Eric Smith <eric@trueblade.com>
parents:
44349
diff
changeset
|
387 self.assertRaises(ValueError, format, 0.0, format_spec) |
|
727cc810d690
Restrict format presentation types to those specified in the 'Standard Format Specifiers' section of PEP 3101.
Eric Smith <eric@trueblade.com>
parents:
44349
diff
changeset
|
388 self.assertRaises(ValueError, format, 1.0, format_spec) |
|
727cc810d690
Restrict format presentation types to those specified in the 'Standard Format Specifiers' section of PEP 3101.
Eric Smith <eric@trueblade.com>
parents:
44349
diff
changeset
|
389 self.assertRaises(ValueError, format, -1.0, format_spec) |
|
727cc810d690
Restrict format presentation types to those specified in the 'Standard Format Specifiers' section of PEP 3101.
Eric Smith <eric@trueblade.com>
parents:
44349
diff
changeset
|
390 self.assertRaises(ValueError, format, 1e100, format_spec) |
|
727cc810d690
Restrict format presentation types to those specified in the 'Standard Format Specifiers' section of PEP 3101.
Eric Smith <eric@trueblade.com>
parents:
44349
diff
changeset
|
391 self.assertRaises(ValueError, format, -1e100, format_spec) |
|
727cc810d690
Restrict format presentation types to those specified in the 'Standard Format Specifiers' section of PEP 3101.
Eric Smith <eric@trueblade.com>
parents:
44349
diff
changeset
|
392 self.assertRaises(ValueError, format, 1e-100, format_spec) |
|
727cc810d690
Restrict format presentation types to those specified in the 'Standard Format Specifiers' section of PEP 3101.
Eric Smith <eric@trueblade.com>
parents:
44349
diff
changeset
|
393 self.assertRaises(ValueError, format, -1e-100, format_spec) |
| 34972 | 394 |
|
53849
04bdc944718a
Issue #3382. float 'F' formatting no longer maps to 'f'. This only affects nan and inf.
Eric Smith <eric@trueblade.com>
parents:
53787
diff
changeset
|
395 # issue 3382 |
|
04bdc944718a
Issue #3382. float 'F' formatting no longer maps to 'f'. This only affects nan and inf.
Eric Smith <eric@trueblade.com>
parents:
53787
diff
changeset
|
396 self.assertEqual(format(NAN, 'f'), 'nan') |
|
04bdc944718a
Issue #3382. float 'F' formatting no longer maps to 'f'. This only affects nan and inf.
Eric Smith <eric@trueblade.com>
parents:
53787
diff
changeset
|
397 self.assertEqual(format(NAN, 'F'), 'NAN') |
|
04bdc944718a
Issue #3382. float 'F' formatting no longer maps to 'f'. This only affects nan and inf.
Eric Smith <eric@trueblade.com>
parents:
53787
diff
changeset
|
398 self.assertEqual(format(INF, 'f'), 'inf') |
|
04bdc944718a
Issue #3382. float 'F' formatting no longer maps to 'f'. This only affects nan and inf.
Eric Smith <eric@trueblade.com>
parents:
53787
diff
changeset
|
399 self.assertEqual(format(INF, 'F'), 'INF') |
|
04bdc944718a
Issue #3382. float 'F' formatting no longer maps to 'f'. This only affects nan and inf.
Eric Smith <eric@trueblade.com>
parents:
53787
diff
changeset
|
400 |
|
53187
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
401 @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"), |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
402 "test requires IEEE 754 doubles") |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
403 def test_format_testfile(self): |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
404 for line in open(format_testfile): |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
405 if line.startswith('--'): |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
406 continue |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
407 line = line.strip() |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
408 if not line: |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
409 continue |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
410 |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
411 lhs, rhs = map(str.strip, line.split('->')) |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
412 fmt, arg = lhs.split() |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
413 self.assertEqual(fmt % float(arg), rhs) |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
414 self.assertEqual(fmt % -float(arg), '-' + rhs) |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
415 |
|
53603
3759839b9fa5
Issue #5864: Fix problem with empty code formatting for floats,
Mark Dickinson <dickinsm@gmail.com>
parents:
53218
diff
changeset
|
416 def test_issue5864(self): |
|
3759839b9fa5
Issue #5864: Fix problem with empty code formatting for floats,
Mark Dickinson <dickinsm@gmail.com>
parents:
53218
diff
changeset
|
417 self.assertEquals(format(123.456, '.4'), '123.5') |
|
3759839b9fa5
Issue #5864: Fix problem with empty code formatting for floats,
Mark Dickinson <dickinsm@gmail.com>
parents:
53218
diff
changeset
|
418 self.assertEquals(format(1234.56, '.4'), '1.235e+03') |
|
3759839b9fa5
Issue #5864: Fix problem with empty code formatting for floats,
Mark Dickinson <dickinsm@gmail.com>
parents:
53218
diff
changeset
|
419 self.assertEquals(format(12345.6, '.4'), '1.235e+04') |
|
3759839b9fa5
Issue #5864: Fix problem with empty code formatting for floats,
Mark Dickinson <dickinsm@gmail.com>
parents:
53218
diff
changeset
|
420 |
|
53209
8d8f2f98a752
Sort out some confusion in test_float.py: the two
Mark Dickinson <dickinsm@gmail.com>
parents:
53187
diff
changeset
|
421 class ReprTestCase(unittest.TestCase): |
|
8d8f2f98a752
Sort out some confusion in test_float.py: the two
Mark Dickinson <dickinsm@gmail.com>
parents:
53187
diff
changeset
|
422 def test_repr(self): |
|
8d8f2f98a752
Sort out some confusion in test_float.py: the two
Mark Dickinson <dickinsm@gmail.com>
parents:
53187
diff
changeset
|
423 floats_file = open(os.path.join(os.path.split(__file__)[0], |
|
8d8f2f98a752
Sort out some confusion in test_float.py: the two
Mark Dickinson <dickinsm@gmail.com>
parents:
53187
diff
changeset
|
424 'floating_points.txt')) |
|
8d8f2f98a752
Sort out some confusion in test_float.py: the two
Mark Dickinson <dickinsm@gmail.com>
parents:
53187
diff
changeset
|
425 for line in floats_file: |
|
8d8f2f98a752
Sort out some confusion in test_float.py: the two
Mark Dickinson <dickinsm@gmail.com>
parents:
53187
diff
changeset
|
426 line = line.strip() |
|
8d8f2f98a752
Sort out some confusion in test_float.py: the two
Mark Dickinson <dickinsm@gmail.com>
parents:
53187
diff
changeset
|
427 if not line or line.startswith('#'): |
|
8d8f2f98a752
Sort out some confusion in test_float.py: the two
Mark Dickinson <dickinsm@gmail.com>
parents:
53187
diff
changeset
|
428 continue |
|
8d8f2f98a752
Sort out some confusion in test_float.py: the two
Mark Dickinson <dickinsm@gmail.com>
parents:
53187
diff
changeset
|
429 v = eval(line) |
|
8d8f2f98a752
Sort out some confusion in test_float.py: the two
Mark Dickinson <dickinsm@gmail.com>
parents:
53187
diff
changeset
|
430 self.assertEqual(v, eval(repr(v))) |
|
8d8f2f98a752
Sort out some confusion in test_float.py: the two
Mark Dickinson <dickinsm@gmail.com>
parents:
53187
diff
changeset
|
431 floats_file.close() |
|
8d8f2f98a752
Sort out some confusion in test_float.py: the two
Mark Dickinson <dickinsm@gmail.com>
parents:
53187
diff
changeset
|
432 |
|
53187
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
433 @unittest.skipUnless(getattr(sys, 'float_repr_style', '') == 'short', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
434 "applies only when using short float repr style") |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
435 def test_short_repr(self): |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
436 # test short float repr introduced in Python 3.1. One aspect |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
437 # of this repr is that we get some degree of str -> float -> |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
438 # str roundtripping. In particular, for any numeric string |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
439 # containing 15 or fewer significant digits, those exact same |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
440 # digits (modulo trailing zeros) should appear in the output. |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
441 # No more repr(0.03) -> "0.029999999999999999"! |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
442 |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
443 test_strings = [ |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
444 # output always includes *either* a decimal point and at |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
445 # least one digit after that point, or an exponent. |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
446 '0.0', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
447 '1.0', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
448 '0.01', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
449 '0.02', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
450 '0.03', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
451 '0.04', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
452 '0.05', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
453 '1.23456789', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
454 '10.0', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
455 '100.0', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
456 # values >= 1e16 get an exponent... |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
457 '1000000000000000.0', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
458 '9999999999999990.0', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
459 '1e+16', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
460 '1e+17', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
461 # ... and so do values < 1e-4 |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
462 '0.001', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
463 '0.001001', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
464 '0.00010000000000001', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
465 '0.0001', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
466 '9.999999999999e-05', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
467 '1e-05', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
468 # values designed to provoke failure if the FPU rounding |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
469 # precision isn't set correctly |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
470 '8.72293771110361e+25', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
471 '7.47005307342313e+26', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
472 '2.86438000439698e+28', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
473 '8.89142905246179e+28', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
474 '3.08578087079232e+35', |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
475 ] |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
476 |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
477 for s in test_strings: |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
478 negs = '-'+s |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
479 self.assertEqual(s, repr(float(s))) |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
480 self.assertEqual(negs, repr(float(negs))) |
|
b653eab13b73
The other half of Issue #1580: use short float repr where possible.
Eric Smith <eric@trueblade.com>
parents:
53161
diff
changeset
|
481 |
|
53218
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
482 class RoundTestCase(unittest.TestCase): |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
483 @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"), |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
484 "test requires IEEE 754 doubles") |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
485 def test_inf_nan(self): |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
486 self.assertRaises(OverflowError, round, INF) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
487 self.assertRaises(OverflowError, round, -INF) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
488 self.assertRaises(ValueError, round, NAN) |
|
57425
b7fbef077eae
Merged revisions 76485 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
56922
diff
changeset
|
489 self.assertRaises(TypeError, round, INF, 0.0) |
|
b7fbef077eae
Merged revisions 76485 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
56922
diff
changeset
|
490 self.assertRaises(TypeError, round, -INF, 1.0) |
|
b7fbef077eae
Merged revisions 76485 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
56922
diff
changeset
|
491 self.assertRaises(TypeError, round, NAN, "ceci n'est pas un integer") |
|
b7fbef077eae
Merged revisions 76485 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
56922
diff
changeset
|
492 self.assertRaises(TypeError, round, -0.0, 1j) |
|
53218
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
493 |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
494 @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"), |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
495 "test requires IEEE 754 doubles") |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
496 def test_large_n(self): |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
497 for n in [324, 325, 400, 2**31-1, 2**31, 2**32, 2**100]: |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
498 self.assertEqual(round(123.456, n), 123.456) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
499 self.assertEqual(round(-123.456, n), -123.456) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
500 self.assertEqual(round(1e300, n), 1e300) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
501 self.assertEqual(round(1e-320, n), 1e-320) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
502 self.assertEqual(round(1e150, 300), 1e150) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
503 self.assertEqual(round(1e300, 307), 1e300) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
504 self.assertEqual(round(-3.1415, 308), -3.1415) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
505 self.assertEqual(round(1e150, 309), 1e150) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
506 self.assertEqual(round(1.4e-315, 315), 1e-315) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
507 |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
508 @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"), |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
509 "test requires IEEE 754 doubles") |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
510 def test_small_n(self): |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
511 for n in [-308, -309, -400, 1-2**31, -2**31, -2**31-1, -2**100]: |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
512 self.assertEqual(round(123.456, n), 0.0) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
513 self.assertEqual(round(-123.456, n), -0.0) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
514 self.assertEqual(round(1e300, n), 0.0) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
515 self.assertEqual(round(1e-320, n), 0.0) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
516 |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
517 @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"), |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
518 "test requires IEEE 754 doubles") |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
519 def test_overflow(self): |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
520 self.assertRaises(OverflowError, round, 1.6e308, -308) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
521 self.assertRaises(OverflowError, round, -1.7e308, -308) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
522 |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
523 @unittest.skipUnless(getattr(sys, 'float_repr_style', '') == 'short', |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
524 "applies only when using short float repr style") |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
525 def test_previous_round_bugs(self): |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
526 # particular cases that have occurred in bug reports |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
527 self.assertEqual(round(562949953421312.5, 1), |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
528 562949953421312.5) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
529 self.assertEqual(round(56294995342131.5, 3), |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
530 56294995342131.5) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
531 # round-half-even |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
532 self.assertEqual(round(25.0, -1), 20.0) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
533 self.assertEqual(round(35.0, -1), 40.0) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
534 self.assertEqual(round(45.0, -1), 40.0) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
535 self.assertEqual(round(55.0, -1), 60.0) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
536 self.assertEqual(round(65.0, -1), 60.0) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
537 self.assertEqual(round(75.0, -1), 80.0) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
538 self.assertEqual(round(85.0, -1), 80.0) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
539 self.assertEqual(round(95.0, -1), 100.0) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
540 |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
541 @unittest.skipUnless(getattr(sys, 'float_repr_style', '') == 'short', |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
542 "applies only when using short float repr style") |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
543 def test_matches_float_format(self): |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
544 # round should give the same results as float formatting |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
545 for i in range(500): |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
546 x = i/1000. |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
547 self.assertEqual(float(format(x, '.0f')), round(x, 0)) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
548 self.assertEqual(float(format(x, '.1f')), round(x, 1)) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
549 self.assertEqual(float(format(x, '.2f')), round(x, 2)) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
550 self.assertEqual(float(format(x, '.3f')), round(x, 3)) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
551 |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
552 for i in range(5, 5000, 10): |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
553 x = i/1000. |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
554 self.assertEqual(float(format(x, '.0f')), round(x, 0)) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
555 self.assertEqual(float(format(x, '.1f')), round(x, 1)) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
556 self.assertEqual(float(format(x, '.2f')), round(x, 2)) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
557 self.assertEqual(float(format(x, '.3f')), round(x, 3)) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
558 |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
559 for i in range(500): |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
560 x = random.random() |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
561 self.assertEqual(float(format(x, '.0f')), round(x, 0)) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
562 self.assertEqual(float(format(x, '.1f')), round(x, 1)) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
563 self.assertEqual(float(format(x, '.2f')), round(x, 2)) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
564 self.assertEqual(float(format(x, '.3f')), round(x, 3)) |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
565 |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
566 |
|
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
567 |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
568 # Beginning with Python 2.6 float has cross platform compatible |
|
48499
de0bf60f1245
Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48498
diff
changeset
|
569 # ways to create and represent inf and nan |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
570 class InfNanTest(unittest.TestCase): |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
571 def test_inf_from_str(self): |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
572 self.assertTrue(isinf(float("inf"))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
573 self.assertTrue(isinf(float("+inf"))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
574 self.assertTrue(isinf(float("-inf"))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
575 self.assertTrue(isinf(float("infinity"))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
576 self.assertTrue(isinf(float("+infinity"))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
577 self.assertTrue(isinf(float("-infinity"))) |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
578 |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
579 self.assertEqual(repr(float("inf")), "inf") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
580 self.assertEqual(repr(float("+inf")), "inf") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
581 self.assertEqual(repr(float("-inf")), "-inf") |
|
48499
de0bf60f1245
Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48498
diff
changeset
|
582 self.assertEqual(repr(float("infinity")), "inf") |
|
de0bf60f1245
Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48498
diff
changeset
|
583 self.assertEqual(repr(float("+infinity")), "inf") |
|
de0bf60f1245
Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48498
diff
changeset
|
584 self.assertEqual(repr(float("-infinity")), "-inf") |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
585 |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
586 self.assertEqual(repr(float("INF")), "inf") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
587 self.assertEqual(repr(float("+Inf")), "inf") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
588 self.assertEqual(repr(float("-iNF")), "-inf") |
|
48499
de0bf60f1245
Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48498
diff
changeset
|
589 self.assertEqual(repr(float("Infinity")), "inf") |
|
de0bf60f1245
Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48498
diff
changeset
|
590 self.assertEqual(repr(float("+iNfInItY")), "inf") |
|
de0bf60f1245
Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48498
diff
changeset
|
591 self.assertEqual(repr(float("-INFINITY")), "-inf") |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
592 |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
593 self.assertEqual(str(float("inf")), "inf") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
594 self.assertEqual(str(float("+inf")), "inf") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
595 self.assertEqual(str(float("-inf")), "-inf") |
|
48499
de0bf60f1245
Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48498
diff
changeset
|
596 self.assertEqual(str(float("infinity")), "inf") |
|
de0bf60f1245
Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48498
diff
changeset
|
597 self.assertEqual(str(float("+infinity")), "inf") |
|
de0bf60f1245
Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48498
diff
changeset
|
598 self.assertEqual(str(float("-infinity")), "-inf") |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
599 |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
600 self.assertRaises(ValueError, float, "info") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
601 self.assertRaises(ValueError, float, "+info") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
602 self.assertRaises(ValueError, float, "-info") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
603 self.assertRaises(ValueError, float, "in") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
604 self.assertRaises(ValueError, float, "+in") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
605 self.assertRaises(ValueError, float, "-in") |
|
48499
de0bf60f1245
Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48498
diff
changeset
|
606 self.assertRaises(ValueError, float, "infinit") |
|
de0bf60f1245
Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48498
diff
changeset
|
607 self.assertRaises(ValueError, float, "+Infin") |
|
de0bf60f1245
Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48498
diff
changeset
|
608 self.assertRaises(ValueError, float, "-INFI") |
|
de0bf60f1245
Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48498
diff
changeset
|
609 self.assertRaises(ValueError, float, "infinitys") |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
610 |
|
54232
4501b638fc3f
Refactor to remove duplicated nan/inf parsing code in
Mark Dickinson <dickinsm@gmail.com>
parents:
54001
diff
changeset
|
611 self.assertRaises(ValueError, float, "++Inf") |
|
4501b638fc3f
Refactor to remove duplicated nan/inf parsing code in
Mark Dickinson <dickinsm@gmail.com>
parents:
54001
diff
changeset
|
612 self.assertRaises(ValueError, float, "-+inf") |
|
4501b638fc3f
Refactor to remove duplicated nan/inf parsing code in
Mark Dickinson <dickinsm@gmail.com>
parents:
54001
diff
changeset
|
613 self.assertRaises(ValueError, float, "+-infinity") |
|
4501b638fc3f
Refactor to remove duplicated nan/inf parsing code in
Mark Dickinson <dickinsm@gmail.com>
parents:
54001
diff
changeset
|
614 self.assertRaises(ValueError, float, "--Infinity") |
|
4501b638fc3f
Refactor to remove duplicated nan/inf parsing code in
Mark Dickinson <dickinsm@gmail.com>
parents:
54001
diff
changeset
|
615 |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
616 def test_inf_as_str(self): |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
617 self.assertEqual(repr(1e300 * 1e300), "inf") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
618 self.assertEqual(repr(-1e300 * 1e300), "-inf") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
619 |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
620 self.assertEqual(str(1e300 * 1e300), "inf") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
621 self.assertEqual(str(-1e300 * 1e300), "-inf") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
622 |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
623 def test_nan_from_str(self): |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
624 self.assertTrue(isnan(float("nan"))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
625 self.assertTrue(isnan(float("+nan"))) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
626 self.assertTrue(isnan(float("-nan"))) |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
627 |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
628 self.assertEqual(repr(float("nan")), "nan") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
629 self.assertEqual(repr(float("+nan")), "nan") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
630 self.assertEqual(repr(float("-nan")), "nan") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
631 |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
632 self.assertEqual(repr(float("NAN")), "nan") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
633 self.assertEqual(repr(float("+NAn")), "nan") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
634 self.assertEqual(repr(float("-NaN")), "nan") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
635 |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
636 self.assertEqual(str(float("nan")), "nan") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
637 self.assertEqual(str(float("+nan")), "nan") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
638 self.assertEqual(str(float("-nan")), "nan") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
639 |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
640 self.assertRaises(ValueError, float, "nana") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
641 self.assertRaises(ValueError, float, "+nana") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
642 self.assertRaises(ValueError, float, "-nana") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
643 self.assertRaises(ValueError, float, "na") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
644 self.assertRaises(ValueError, float, "+na") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
645 self.assertRaises(ValueError, float, "-na") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
646 |
|
54232
4501b638fc3f
Refactor to remove duplicated nan/inf parsing code in
Mark Dickinson <dickinsm@gmail.com>
parents:
54001
diff
changeset
|
647 self.assertRaises(ValueError, float, "++nan") |
|
4501b638fc3f
Refactor to remove duplicated nan/inf parsing code in
Mark Dickinson <dickinsm@gmail.com>
parents:
54001
diff
changeset
|
648 self.assertRaises(ValueError, float, "-+NAN") |
|
4501b638fc3f
Refactor to remove duplicated nan/inf parsing code in
Mark Dickinson <dickinsm@gmail.com>
parents:
54001
diff
changeset
|
649 self.assertRaises(ValueError, float, "+-NaN") |
|
4501b638fc3f
Refactor to remove duplicated nan/inf parsing code in
Mark Dickinson <dickinsm@gmail.com>
parents:
54001
diff
changeset
|
650 self.assertRaises(ValueError, float, "--nAn") |
|
4501b638fc3f
Refactor to remove duplicated nan/inf parsing code in
Mark Dickinson <dickinsm@gmail.com>
parents:
54001
diff
changeset
|
651 |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
652 def test_nan_as_str(self): |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
653 self.assertEqual(repr(1e300 * 1e300 * 0), "nan") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
654 self.assertEqual(repr(-1e300 * 1e300 * 0), "nan") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
655 |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
656 self.assertEqual(str(1e300 * 1e300 * 0), "nan") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
657 self.assertEqual(str(-1e300 * 1e300 * 0), "nan") |
|
44260
682d9788a038
Issue #1580: New free format floating point representation based on "Floating-Point Printer Sample Code", by Robert G. Burger. For example repr(11./5) now returns '2.2' instead of '2.2000000000000002'.
Christian Heimes <christian@cheimes.de>
parents:
43947
diff
changeset
|
658 |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45023
diff
changeset
|
659 def notest_float_nan(self): |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
660 self.assertTrue(NAN.is_nan()) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
661 self.assertFalse(INF.is_nan()) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
662 self.assertFalse((0.).is_nan()) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45023
diff
changeset
|
663 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45023
diff
changeset
|
664 def notest_float_inf(self): |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
665 self.assertTrue(INF.is_inf()) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
666 self.assertFalse(NAN.is_inf()) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54232
diff
changeset
|
667 self.assertFalse((0.).is_inf()) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45023
diff
changeset
|
668 |
|
48497
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
669 fromHex = float.fromhex |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
670 toHex = float.hex |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
671 class HexFloatTestCase(unittest.TestCase): |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
672 MAX = fromHex('0x.fffffffffffff8p+1024') # max normal |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
673 MIN = fromHex('0x1p-1022') # min normal |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
674 TINY = fromHex('0x0.0000000000001p-1022') # min subnormal |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
675 EPS = fromHex('0x0.0000000000001p0') # diff between 1.0 and next float up |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
676 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
677 def identical(self, x, y): |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
678 # check that floats x and y are identical, or that both |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
679 # are NaNs |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
680 if isnan(x) or isnan(y): |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
681 if isnan(x) == isnan(y): |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
682 return |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
683 elif x == y and (x != 0.0 or copysign(1.0, x) == copysign(1.0, y)): |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
684 return |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
685 self.fail('%r not identical to %r' % (x, y)) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
686 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
687 def test_ends(self): |
|
48498
177302feab36
Merged revisions 64981 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48497
diff
changeset
|
688 self.identical(self.MIN, ldexp(1.0, -1022)) |
|
177302feab36
Merged revisions 64981 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48497
diff
changeset
|
689 self.identical(self.TINY, ldexp(1.0, -1074)) |
|
177302feab36
Merged revisions 64981 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48497
diff
changeset
|
690 self.identical(self.EPS, ldexp(1.0, -52)) |
|
177302feab36
Merged revisions 64981 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48497
diff
changeset
|
691 self.identical(self.MAX, 2.*(ldexp(1.0, 1023) - ldexp(1.0, 970))) |
|
48497
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
692 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
693 def test_invalid_inputs(self): |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
694 invalid_inputs = [ |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
695 'infi', # misspelt infinities and nans |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
696 '-Infinit', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
697 '++inf', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
698 '-+Inf', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
699 '--nan', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
700 '+-NaN', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
701 'snan', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
702 'NaNs', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
703 'nna', |
|
54001
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
704 'an', |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
705 'nf', |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
706 'nfinity', |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
707 'inity', |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
708 'iinity', |
|
48497
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
709 '0xnan', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
710 '', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
711 ' ', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
712 'x1.0p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
713 '0xX1.0p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
714 '+ 0x1.0p0', # internal whitespace |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
715 '- 0x1.0p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
716 '0 x1.0p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
717 '0x 1.0p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
718 '0x1 2.0p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
719 '+0x1 .0p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
720 '0x1. 0p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
721 '-0x1.0 1p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
722 '-0x1.0 p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
723 '+0x1.0p +0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
724 '0x1.0p -0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
725 '0x1.0p 0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
726 '+0x1.0p+ 0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
727 '-0x1.0p- 0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
728 '++0x1.0p-0', # double signs |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
729 '--0x1.0p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
730 '+-0x1.0p+0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
731 '-+0x1.0p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
732 '0x1.0p++0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
733 '+0x1.0p+-0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
734 '-0x1.0p-+0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
735 '0x1.0p--0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
736 '0x1.0.p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
737 '0x.p0', # no hex digits before or after point |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
738 '0x1,p0', # wrong decimal point character |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
739 '0x1pa', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
740 '0x1p\uff10', # fullwidth Unicode digits |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
741 '\uff10x1p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
742 '0x\uff11p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
743 '0x1.\uff10p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
744 '0x1p0 \n 0x2p0', |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
745 '0x1p0\0 0x1p0', # embedded null byte is not end of string |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
746 ] |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
747 for x in invalid_inputs: |
|
48817
a77022dc3f61
Merged revisions 65958 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48499
diff
changeset
|
748 try: |
|
a77022dc3f61
Merged revisions 65958 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48499
diff
changeset
|
749 result = fromHex(x) |
|
a77022dc3f61
Merged revisions 65958 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48499
diff
changeset
|
750 except ValueError: |
|
a77022dc3f61
Merged revisions 65958 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48499
diff
changeset
|
751 pass |
|
a77022dc3f61
Merged revisions 65958 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48499
diff
changeset
|
752 else: |
|
a77022dc3f61
Merged revisions 65958 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48499
diff
changeset
|
753 self.fail('Expected float.fromhex(%r) to raise ValueError; ' |
|
a77022dc3f61
Merged revisions 65958 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
48499
diff
changeset
|
754 'got %r instead' % (x, result)) |
|
48497
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
755 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
756 |
|
54001
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
757 def test_whitespace(self): |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
758 value_pairs = [ |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
759 ('inf', INF), |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
760 ('-Infinity', -INF), |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
761 ('nan', NAN), |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
762 ('1.0', 1.0), |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
763 ('-0x.2', -0.125), |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
764 ('-0.0', -0.0) |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
765 ] |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
766 whitespace = [ |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
767 '', |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
768 ' ', |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
769 '\t', |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
770 '\n', |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
771 '\n \t', |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
772 '\f', |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
773 '\v', |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
774 '\r' |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
775 ] |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
776 for inp, expected in value_pairs: |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
777 for lead in whitespace: |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
778 for trail in whitespace: |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
779 got = fromHex(lead + inp + trail) |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
780 self.identical(got, expected) |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
781 |
|
9414c2b1923e
Merged revisions 72564 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
53849
diff
changeset
|
782 |
|
48497
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
783 def test_from_hex(self): |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
784 MIN = self.MIN; |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
785 MAX = self.MAX; |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
786 TINY = self.TINY; |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
787 EPS = self.EPS; |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
788 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
789 # two spellings of infinity, with optional signs; case-insensitive |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
790 self.identical(fromHex('inf'), INF) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
791 self.identical(fromHex('+Inf'), INF) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
792 self.identical(fromHex('-INF'), -INF) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
793 self.identical(fromHex('iNf'), INF) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
794 self.identical(fromHex('Infinity'), INF) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
795 self.identical(fromHex('+INFINITY'), INF) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
796 self.identical(fromHex('-infinity'), -INF) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
797 self.identical(fromHex('-iNFiNitY'), -INF) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
798 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
799 # nans with optional sign; case insensitive |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
800 self.identical(fromHex('nan'), NAN) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
801 self.identical(fromHex('+NaN'), NAN) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
802 self.identical(fromHex('-NaN'), NAN) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
803 self.identical(fromHex('-nAN'), NAN) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
804 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
805 # variations in input format |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
806 self.identical(fromHex('1'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
807 self.identical(fromHex('+1'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
808 self.identical(fromHex('1.'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
809 self.identical(fromHex('1.0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
810 self.identical(fromHex('1.0p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
811 self.identical(fromHex('01'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
812 self.identical(fromHex('01.'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
813 self.identical(fromHex('0x1'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
814 self.identical(fromHex('0x1.'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
815 self.identical(fromHex('0x1.0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
816 self.identical(fromHex('+0x1.0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
817 self.identical(fromHex('0x1p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
818 self.identical(fromHex('0X1p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
819 self.identical(fromHex('0X1P0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
820 self.identical(fromHex('0x1P0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
821 self.identical(fromHex('0x1.p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
822 self.identical(fromHex('0x1.0p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
823 self.identical(fromHex('0x.1p4'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
824 self.identical(fromHex('0x.1p04'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
825 self.identical(fromHex('0x.1p004'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
826 self.identical(fromHex('0x1p+0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
827 self.identical(fromHex('0x1P-0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
828 self.identical(fromHex('+0x1p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
829 self.identical(fromHex('0x01p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
830 self.identical(fromHex('0x1p00'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
831 self.identical(fromHex(' 0x1p0 '), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
832 self.identical(fromHex('\n 0x1p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
833 self.identical(fromHex('0x1p0 \t'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
834 self.identical(fromHex('0xap0'), 10.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
835 self.identical(fromHex('0xAp0'), 10.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
836 self.identical(fromHex('0xaP0'), 10.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
837 self.identical(fromHex('0xAP0'), 10.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
838 self.identical(fromHex('0xbep0'), 190.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
839 self.identical(fromHex('0xBep0'), 190.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
840 self.identical(fromHex('0xbEp0'), 190.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
841 self.identical(fromHex('0XBE0P-4'), 190.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
842 self.identical(fromHex('0xBEp0'), 190.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
843 self.identical(fromHex('0xB.Ep4'), 190.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
844 self.identical(fromHex('0x.BEp8'), 190.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
845 self.identical(fromHex('0x.0BEp12'), 190.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
846 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
847 # moving the point around |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
848 pi = fromHex('0x1.921fb54442d18p1') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
849 self.identical(fromHex('0x.006487ed5110b46p11'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
850 self.identical(fromHex('0x.00c90fdaa22168cp10'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
851 self.identical(fromHex('0x.01921fb54442d18p9'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
852 self.identical(fromHex('0x.03243f6a8885a3p8'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
853 self.identical(fromHex('0x.06487ed5110b46p7'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
854 self.identical(fromHex('0x.0c90fdaa22168cp6'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
855 self.identical(fromHex('0x.1921fb54442d18p5'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
856 self.identical(fromHex('0x.3243f6a8885a3p4'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
857 self.identical(fromHex('0x.6487ed5110b46p3'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
858 self.identical(fromHex('0x.c90fdaa22168cp2'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
859 self.identical(fromHex('0x1.921fb54442d18p1'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
860 self.identical(fromHex('0x3.243f6a8885a3p0'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
861 self.identical(fromHex('0x6.487ed5110b46p-1'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
862 self.identical(fromHex('0xc.90fdaa22168cp-2'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
863 self.identical(fromHex('0x19.21fb54442d18p-3'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
864 self.identical(fromHex('0x32.43f6a8885a3p-4'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
865 self.identical(fromHex('0x64.87ed5110b46p-5'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
866 self.identical(fromHex('0xc9.0fdaa22168cp-6'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
867 self.identical(fromHex('0x192.1fb54442d18p-7'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
868 self.identical(fromHex('0x324.3f6a8885a3p-8'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
869 self.identical(fromHex('0x648.7ed5110b46p-9'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
870 self.identical(fromHex('0xc90.fdaa22168cp-10'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
871 self.identical(fromHex('0x1921.fb54442d18p-11'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
872 # ... |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
873 self.identical(fromHex('0x1921fb54442d1.8p-47'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
874 self.identical(fromHex('0x3243f6a8885a3p-48'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
875 self.identical(fromHex('0x6487ed5110b46p-49'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
876 self.identical(fromHex('0xc90fdaa22168cp-50'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
877 self.identical(fromHex('0x1921fb54442d18p-51'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
878 self.identical(fromHex('0x3243f6a8885a30p-52'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
879 self.identical(fromHex('0x6487ed5110b460p-53'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
880 self.identical(fromHex('0xc90fdaa22168c0p-54'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
881 self.identical(fromHex('0x1921fb54442d180p-55'), pi) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
882 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
883 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
884 # results that should overflow... |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
885 self.assertRaises(OverflowError, fromHex, '-0x1p1024') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
886 self.assertRaises(OverflowError, fromHex, '0x1p+1025') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
887 self.assertRaises(OverflowError, fromHex, '+0X1p1030') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
888 self.assertRaises(OverflowError, fromHex, '-0x1p+1100') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
889 self.assertRaises(OverflowError, fromHex, '0X1p123456789123456789') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
890 self.assertRaises(OverflowError, fromHex, '+0X.8p+1025') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
891 self.assertRaises(OverflowError, fromHex, '+0x0.8p1025') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
892 self.assertRaises(OverflowError, fromHex, '-0x0.4p1026') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
893 self.assertRaises(OverflowError, fromHex, '0X2p+1023') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
894 self.assertRaises(OverflowError, fromHex, '0x2.p1023') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
895 self.assertRaises(OverflowError, fromHex, '-0x2.0p+1023') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
896 self.assertRaises(OverflowError, fromHex, '+0X4p+1022') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
897 self.assertRaises(OverflowError, fromHex, '0x1.ffffffffffffffp+1023') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
898 self.assertRaises(OverflowError, fromHex, '-0X1.fffffffffffff9p1023') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
899 self.assertRaises(OverflowError, fromHex, '0X1.fffffffffffff8p1023') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
900 self.assertRaises(OverflowError, fromHex, '+0x3.fffffffffffffp1022') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
901 self.assertRaises(OverflowError, fromHex, '0x3fffffffffffffp+970') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
902 self.assertRaises(OverflowError, fromHex, '0x10000000000000000p960') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
903 self.assertRaises(OverflowError, fromHex, '-0Xffffffffffffffffp960') |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
904 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
905 # ...and those that round to +-max float |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
906 self.identical(fromHex('+0x1.fffffffffffffp+1023'), MAX) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
907 self.identical(fromHex('-0X1.fffffffffffff7p1023'), -MAX) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
908 self.identical(fromHex('0X1.fffffffffffff7fffffffffffffp1023'), MAX) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
909 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
910 # zeros |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
911 self.identical(fromHex('0x0p0'), 0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
912 self.identical(fromHex('0x0p1000'), 0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
913 self.identical(fromHex('-0x0p1023'), -0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
914 self.identical(fromHex('0X0p1024'), 0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
915 self.identical(fromHex('-0x0p1025'), -0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
916 self.identical(fromHex('0X0p2000'), 0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
917 self.identical(fromHex('0x0p123456789123456789'), 0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
918 self.identical(fromHex('-0X0p-0'), -0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
919 self.identical(fromHex('-0X0p-1000'), -0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
920 self.identical(fromHex('0x0p-1023'), 0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
921 self.identical(fromHex('-0X0p-1024'), -0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
922 self.identical(fromHex('-0x0p-1025'), -0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
923 self.identical(fromHex('-0x0p-1072'), -0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
924 self.identical(fromHex('0X0p-1073'), 0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
925 self.identical(fromHex('-0x0p-1074'), -0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
926 self.identical(fromHex('0x0p-1075'), 0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
927 self.identical(fromHex('0X0p-1076'), 0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
928 self.identical(fromHex('-0X0p-2000'), -0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
929 self.identical(fromHex('-0x0p-123456789123456789'), -0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
930 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
931 # values that should underflow to 0 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
932 self.identical(fromHex('0X1p-1075'), 0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
933 self.identical(fromHex('-0X1p-1075'), -0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
934 self.identical(fromHex('-0x1p-123456789123456789'), -0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
935 self.identical(fromHex('0x1.00000000000000001p-1075'), TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
936 self.identical(fromHex('-0x1.1p-1075'), -TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
937 self.identical(fromHex('0x1.fffffffffffffffffp-1075'), TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
938 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
939 # check round-half-even is working correctly near 0 ... |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
940 self.identical(fromHex('0x1p-1076'), 0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
941 self.identical(fromHex('0X2p-1076'), 0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
942 self.identical(fromHex('0X3p-1076'), TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
943 self.identical(fromHex('0x4p-1076'), TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
944 self.identical(fromHex('0X5p-1076'), TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
945 self.identical(fromHex('0X6p-1076'), 2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
946 self.identical(fromHex('0x7p-1076'), 2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
947 self.identical(fromHex('0X8p-1076'), 2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
948 self.identical(fromHex('0X9p-1076'), 2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
949 self.identical(fromHex('0xap-1076'), 2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
950 self.identical(fromHex('0Xbp-1076'), 3*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
951 self.identical(fromHex('0xcp-1076'), 3*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
952 self.identical(fromHex('0Xdp-1076'), 3*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
953 self.identical(fromHex('0Xep-1076'), 4*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
954 self.identical(fromHex('0xfp-1076'), 4*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
955 self.identical(fromHex('0x10p-1076'), 4*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
956 self.identical(fromHex('-0x1p-1076'), -0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
957 self.identical(fromHex('-0X2p-1076'), -0.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
958 self.identical(fromHex('-0x3p-1076'), -TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
959 self.identical(fromHex('-0X4p-1076'), -TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
960 self.identical(fromHex('-0x5p-1076'), -TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
961 self.identical(fromHex('-0x6p-1076'), -2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
962 self.identical(fromHex('-0X7p-1076'), -2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
963 self.identical(fromHex('-0X8p-1076'), -2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
964 self.identical(fromHex('-0X9p-1076'), -2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
965 self.identical(fromHex('-0Xap-1076'), -2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
966 self.identical(fromHex('-0xbp-1076'), -3*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
967 self.identical(fromHex('-0xcp-1076'), -3*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
968 self.identical(fromHex('-0Xdp-1076'), -3*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
969 self.identical(fromHex('-0xep-1076'), -4*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
970 self.identical(fromHex('-0Xfp-1076'), -4*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
971 self.identical(fromHex('-0X10p-1076'), -4*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
972 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
973 # ... and near MIN ... |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
974 self.identical(fromHex('0x0.ffffffffffffd6p-1022'), MIN-3*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
975 self.identical(fromHex('0x0.ffffffffffffd8p-1022'), MIN-2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
976 self.identical(fromHex('0x0.ffffffffffffdap-1022'), MIN-2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
977 self.identical(fromHex('0x0.ffffffffffffdcp-1022'), MIN-2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
978 self.identical(fromHex('0x0.ffffffffffffdep-1022'), MIN-2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
979 self.identical(fromHex('0x0.ffffffffffffe0p-1022'), MIN-2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
980 self.identical(fromHex('0x0.ffffffffffffe2p-1022'), MIN-2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
981 self.identical(fromHex('0x0.ffffffffffffe4p-1022'), MIN-2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
982 self.identical(fromHex('0x0.ffffffffffffe6p-1022'), MIN-2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
983 self.identical(fromHex('0x0.ffffffffffffe8p-1022'), MIN-2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
984 self.identical(fromHex('0x0.ffffffffffffeap-1022'), MIN-TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
985 self.identical(fromHex('0x0.ffffffffffffecp-1022'), MIN-TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
986 self.identical(fromHex('0x0.ffffffffffffeep-1022'), MIN-TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
987 self.identical(fromHex('0x0.fffffffffffff0p-1022'), MIN-TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
988 self.identical(fromHex('0x0.fffffffffffff2p-1022'), MIN-TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
989 self.identical(fromHex('0x0.fffffffffffff4p-1022'), MIN-TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
990 self.identical(fromHex('0x0.fffffffffffff6p-1022'), MIN-TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
991 self.identical(fromHex('0x0.fffffffffffff8p-1022'), MIN) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
992 self.identical(fromHex('0x0.fffffffffffffap-1022'), MIN) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
993 self.identical(fromHex('0x0.fffffffffffffcp-1022'), MIN) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
994 self.identical(fromHex('0x0.fffffffffffffep-1022'), MIN) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
995 self.identical(fromHex('0x1.00000000000000p-1022'), MIN) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
996 self.identical(fromHex('0x1.00000000000002p-1022'), MIN) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
997 self.identical(fromHex('0x1.00000000000004p-1022'), MIN) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
998 self.identical(fromHex('0x1.00000000000006p-1022'), MIN) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
999 self.identical(fromHex('0x1.00000000000008p-1022'), MIN) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1000 self.identical(fromHex('0x1.0000000000000ap-1022'), MIN+TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1001 self.identical(fromHex('0x1.0000000000000cp-1022'), MIN+TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1002 self.identical(fromHex('0x1.0000000000000ep-1022'), MIN+TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1003 self.identical(fromHex('0x1.00000000000010p-1022'), MIN+TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1004 self.identical(fromHex('0x1.00000000000012p-1022'), MIN+TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1005 self.identical(fromHex('0x1.00000000000014p-1022'), MIN+TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1006 self.identical(fromHex('0x1.00000000000016p-1022'), MIN+TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1007 self.identical(fromHex('0x1.00000000000018p-1022'), MIN+2*TINY) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1008 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1009 # ... and near 1.0. |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1010 self.identical(fromHex('0x0.fffffffffffff0p0'), 1.0-EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1011 self.identical(fromHex('0x0.fffffffffffff1p0'), 1.0-EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1012 self.identical(fromHex('0X0.fffffffffffff2p0'), 1.0-EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1013 self.identical(fromHex('0x0.fffffffffffff3p0'), 1.0-EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1014 self.identical(fromHex('0X0.fffffffffffff4p0'), 1.0-EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1015 self.identical(fromHex('0X0.fffffffffffff5p0'), 1.0-EPS/2) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1016 self.identical(fromHex('0X0.fffffffffffff6p0'), 1.0-EPS/2) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1017 self.identical(fromHex('0x0.fffffffffffff7p0'), 1.0-EPS/2) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1018 self.identical(fromHex('0x0.fffffffffffff8p0'), 1.0-EPS/2) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1019 self.identical(fromHex('0X0.fffffffffffff9p0'), 1.0-EPS/2) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1020 self.identical(fromHex('0X0.fffffffffffffap0'), 1.0-EPS/2) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1021 self.identical(fromHex('0x0.fffffffffffffbp0'), 1.0-EPS/2) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1022 self.identical(fromHex('0X0.fffffffffffffcp0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1023 self.identical(fromHex('0x0.fffffffffffffdp0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1024 self.identical(fromHex('0X0.fffffffffffffep0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1025 self.identical(fromHex('0x0.ffffffffffffffp0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1026 self.identical(fromHex('0X1.00000000000000p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1027 self.identical(fromHex('0X1.00000000000001p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1028 self.identical(fromHex('0x1.00000000000002p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1029 self.identical(fromHex('0X1.00000000000003p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1030 self.identical(fromHex('0x1.00000000000004p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1031 self.identical(fromHex('0X1.00000000000005p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1032 self.identical(fromHex('0X1.00000000000006p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1033 self.identical(fromHex('0X1.00000000000007p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1034 self.identical(fromHex('0x1.00000000000007ffffffffffffffffffffp0'), |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1035 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1036 self.identical(fromHex('0x1.00000000000008p0'), 1.0) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1037 self.identical(fromHex('0x1.00000000000008000000000000000001p0'), |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1038 1+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1039 self.identical(fromHex('0X1.00000000000009p0'), 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1040 self.identical(fromHex('0x1.0000000000000ap0'), 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1041 self.identical(fromHex('0x1.0000000000000bp0'), 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1042 self.identical(fromHex('0X1.0000000000000cp0'), 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1043 self.identical(fromHex('0x1.0000000000000dp0'), 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1044 self.identical(fromHex('0x1.0000000000000ep0'), 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1045 self.identical(fromHex('0X1.0000000000000fp0'), 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1046 self.identical(fromHex('0x1.00000000000010p0'), 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1047 self.identical(fromHex('0X1.00000000000011p0'), 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1048 self.identical(fromHex('0x1.00000000000012p0'), 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1049 self.identical(fromHex('0X1.00000000000013p0'), 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1050 self.identical(fromHex('0X1.00000000000014p0'), 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1051 self.identical(fromHex('0x1.00000000000015p0'), 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1052 self.identical(fromHex('0x1.00000000000016p0'), 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1053 self.identical(fromHex('0X1.00000000000017p0'), 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1054 self.identical(fromHex('0x1.00000000000017ffffffffffffffffffffp0'), |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1055 1.0+EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1056 self.identical(fromHex('0x1.00000000000018p0'), 1.0+2*EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1057 self.identical(fromHex('0X1.00000000000018000000000000000001p0'), |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1058 1.0+2*EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1059 self.identical(fromHex('0x1.00000000000019p0'), 1.0+2*EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1060 self.identical(fromHex('0X1.0000000000001ap0'), 1.0+2*EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1061 self.identical(fromHex('0X1.0000000000001bp0'), 1.0+2*EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1062 self.identical(fromHex('0x1.0000000000001cp0'), 1.0+2*EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1063 self.identical(fromHex('0x1.0000000000001dp0'), 1.0+2*EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1064 self.identical(fromHex('0x1.0000000000001ep0'), 1.0+2*EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1065 self.identical(fromHex('0X1.0000000000001fp0'), 1.0+2*EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1066 self.identical(fromHex('0x1.00000000000020p0'), 1.0+2*EPS) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1067 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1068 def test_roundtrip(self): |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1069 def roundtrip(x): |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1070 return fromHex(toHex(x)) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1071 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1072 for x in [NAN, INF, self.MAX, self.MIN, self.MIN-self.TINY, self.TINY, 0.0]: |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1073 self.identical(x, roundtrip(x)) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1074 self.identical(-x, roundtrip(-x)) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1075 |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1076 # fromHex(toHex(x)) should exactly recover x, for any non-NaN float x. |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1077 import random |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1078 for i in range(10000): |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1079 e = random.randrange(-1200, 1200) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1080 m = random.random() |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1081 s = random.choice([1.0, -1.0]) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1082 try: |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1083 x = s*ldexp(m, e) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1084 except OverflowError: |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1085 pass |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1086 else: |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1087 self.identical(x, fromHex(toHex(x))) |
|
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1088 |
|
58280
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1089 class StrtodTestCase(unittest.TestCase): |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1090 def check_string(self, s): |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1091 expected = strtod(s) |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1092 try: |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1093 fs = float(s) |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1094 except OverflowError: |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1095 got = '-inf' if s[0] == '-' else 'inf' |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1096 else: |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1097 got = fs.hex() |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1098 self.assertEqual(expected, got, |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1099 "Incorrectly rounded str->float conversion for " |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1100 "{}: expected {}, got {}".format(s, expected, got)) |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1101 |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1102 @unittest.skipUnless(getattr(sys, 'float_repr_style', '') == 'short', |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1103 "applies only when using short float repr style") |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1104 def test_bug7632(self): |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1105 # check a few particular values that gave incorrectly rounded |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1106 # results with previous versions of dtoa.c |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1107 test_strings = [ |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1108 '94393431193180696942841837085033647913224148539854e-358', |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1109 '12579816049008305546974391768996369464963024663104e-357', |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1110 '17489628565202117263145367596028389348922981857013e-357', |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1111 '18487398785991994634182916638542680759613590482273e-357', |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1112 '32002864200581033134358724675198044527469366773928e-358', |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1113 '73608278998966969345824653500136787876436005957953e-358', |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1114 '64774478836417299491718435234611299336288082136054e-358', |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1115 '13704940134126574534878641876947980878824688451169e-357', |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1116 '46697445774047060960624497964425416610480524760471e-358', |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1117 ] |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1118 for s in test_strings: |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1119 self.check_string(s) |
|
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1120 |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45023
diff
changeset
|
1121 |
| 34972 | 1122 def test_main(): |
|
47201
9c930a32cebb
#2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents:
46664
diff
changeset
|
1123 support.run_unittest( |
|
49055
ca1a8ac47d04
I modified the tests a bit to account for unicode string
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48817
diff
changeset
|
1124 GeneralFloatCases, |
| 34972 | 1125 FormatFunctionsTestCase, |
| 1126 UnknownFormatTestCase, | |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42775
diff
changeset
|
1127 IEEEFormatTestCase, |
|
44260
682d9788a038
Issue #1580: New free format floating point representation based on "Floating-Point Printer Sample Code", by Robert G. Burger. For example repr(11./5) now returns '2.2' instead of '2.2000000000000002'.
Christian Heimes <christian@cheimes.de>
parents:
43947
diff
changeset
|
1128 FormatTestCase, |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
1129 ReprTestCase, |
|
53218
d43d64252d36
Issue #1869 (and 4707, 5118, 5473, 1456775): use the new
Mark Dickinson <dickinsm@gmail.com>
parents:
53209
diff
changeset
|
1130 RoundTestCase, |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44268
diff
changeset
|
1131 InfNanTest, |
|
48497
2bb866d282ba
Merged revisions 64974 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47322
diff
changeset
|
1132 HexFloatTestCase, |
|
58280
be32f611183b
Merged revisions 77452 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57425
diff
changeset
|
1133 StrtodTestCase, |
|
44268
7ae604b3533b
Merged revisions 59450-59464 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44260
diff
changeset
|
1134 ) |
| 34972 | 1135 |
| 1136 if __name__ == '__main__': | |
| 1137 test_main() |
