mirror of
https://github.com/python/cpython.git
synced 2025-07-27 21:24:32 +00:00
Unparse infinite imaginary literals correctly. Add some more numeric tests.
This commit is contained in:
parent
abe52d749c
commit
cba8c10b5c
2 changed files with 20 additions and 5 deletions
|
@ -123,6 +123,8 @@ class UnparseTestCase(ASTTestCase):
|
||||||
|
|
||||||
def test_unary_parens(self):
|
def test_unary_parens(self):
|
||||||
self.check_roundtrip("(-1)**7")
|
self.check_roundtrip("(-1)**7")
|
||||||
|
self.check_roundtrip("(-1.)**8")
|
||||||
|
self.check_roundtrip("(-1j)**6")
|
||||||
self.check_roundtrip("not True or False")
|
self.check_roundtrip("not True or False")
|
||||||
self.check_roundtrip("True or not False")
|
self.check_roundtrip("True or not False")
|
||||||
|
|
||||||
|
@ -132,6 +134,18 @@ class UnparseTestCase(ASTTestCase):
|
||||||
def test_huge_float(self):
|
def test_huge_float(self):
|
||||||
self.check_roundtrip("1e1000")
|
self.check_roundtrip("1e1000")
|
||||||
self.check_roundtrip("-1e1000")
|
self.check_roundtrip("-1e1000")
|
||||||
|
self.check_roundtrip("1e1000j")
|
||||||
|
self.check_roundtrip("-1e1000j")
|
||||||
|
|
||||||
|
def test_min_int(self):
|
||||||
|
self.check_roundtrip(str(-2**31))
|
||||||
|
self.check_roundtrip(str(-2**63))
|
||||||
|
|
||||||
|
def test_imaginary_literals(self):
|
||||||
|
self.check_roundtrip("7j")
|
||||||
|
self.check_roundtrip("-7j")
|
||||||
|
self.check_roundtrip("0j")
|
||||||
|
self.check_roundtrip("-0j")
|
||||||
|
|
||||||
def test_lambda_parentheses(self):
|
def test_lambda_parentheses(self):
|
||||||
self.check_roundtrip("(lambda: int)()")
|
self.check_roundtrip("(lambda: int)()")
|
||||||
|
|
|
@ -6,6 +6,10 @@ import tokenize
|
||||||
import io
|
import io
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
# Large float and imaginary literals get turned into infinities in the AST.
|
||||||
|
# We unparse those infinities to INFSTR.
|
||||||
|
INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1)
|
||||||
|
|
||||||
def interleave(inter, f, seq):
|
def interleave(inter, f, seq):
|
||||||
"""Call f on each item in seq, calling inter() in between.
|
"""Call f on each item in seq, calling inter() in between.
|
||||||
"""
|
"""
|
||||||
|
@ -311,11 +315,8 @@ class Unparser:
|
||||||
self.write(t.id)
|
self.write(t.id)
|
||||||
|
|
||||||
def _Num(self, t):
|
def _Num(self, t):
|
||||||
if isinstance(t.n, float) and math.isinf(t.n):
|
# Substitute overflowing decimal literal for AST infinities.
|
||||||
# Subsitute overflowing decimal literal for AST infinity
|
self.write(repr(t.n).replace("inf", INFSTR))
|
||||||
self.write("1e" + repr(sys.float_info.max_10_exp + 1))
|
|
||||||
else:
|
|
||||||
self.write(repr(t.n))
|
|
||||||
|
|
||||||
def _List(self, t):
|
def _List(self, t):
|
||||||
self.write("[")
|
self.write("[")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue