From cba8c10b5c262f41873ac877d25c242823ab668c Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Wed, 30 Jun 2010 11:45:53 +0000 Subject: Unparse infinite imaginary literals correctly. Add some more numeric tests. --- Demo/parser/test_unparse.py | 14 ++++++++++++++ Demo/parser/unparse.py | 11 ++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Demo/parser/test_unparse.py b/Demo/parser/test_unparse.py index 3a795e9..d457523 100644 --- a/Demo/parser/test_unparse.py +++ b/Demo/parser/test_unparse.py @@ -123,6 +123,8 @@ class UnparseTestCase(ASTTestCase): def test_unary_parens(self): 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("True or not False") @@ -132,6 +134,18 @@ class UnparseTestCase(ASTTestCase): def test_huge_float(self): 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): self.check_roundtrip("(lambda: int)()") diff --git a/Demo/parser/unparse.py b/Demo/parser/unparse.py index e1c2719..e96ef54 100644 --- a/Demo/parser/unparse.py +++ b/Demo/parser/unparse.py @@ -6,6 +6,10 @@ import tokenize import io 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): """Call f on each item in seq, calling inter() in between. """ @@ -311,11 +315,8 @@ class Unparser: self.write(t.id) def _Num(self, t): - if isinstance(t.n, float) and math.isinf(t.n): - # Subsitute overflowing decimal literal for AST infinity - self.write("1e" + repr(sys.float_info.max_10_exp + 1)) - else: - self.write(repr(t.n)) + # Substitute overflowing decimal literal for AST infinities. + self.write(repr(t.n).replace("inf", INFSTR)) def _List(self, t): self.write("[") -- cgit v0.12