From f5cd9f26f27f86d532bdd2ae176c1fcd007a3201 Mon Sep 17 00:00:00 2001 From: Tim S Date: Sun, 29 Sep 2019 12:14:17 +0200 Subject: [PATCH 1/4] Fix 103 --- py/float.go | 7 ++++++- py/tests/float.py | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/py/float.go b/py/float.go index 94fddde3..c9629294 100644 --- a/py/float.go +++ b/py/float.go @@ -48,7 +48,12 @@ func FloatNew(metatype *Type, args Tuple, kwargs StringDict) (Object, error) { } func (a Float) M__str__() (Object, error) { - return String(fmt.Sprintf("%g", a)), nil + s := fmt.Sprintf("%g", a) + if idx := strings.IndexByte(s, '.'); idx == -1 { + // Sprintf implementation could change, so it's safer to check for '.' + s += ".0" + } + return String(s), nil } func (a Float) M__repr__() (Object, error) { diff --git a/py/tests/float.py b/py/tests/float.py index 8b8a84af..0f7bb69e 100644 --- a/py/tests/float.py +++ b/py/tests/float.py @@ -12,6 +12,12 @@ assert float("-1E9") == -1E9 assert float("1E400") == float("inf") assert float(" -1E400") == float("-inf") +assert repr(float("1.0")) == "1.0" +assert repr(float("1.")) == "1.0" +assert repr(float("1.1")) == "1.1" +assert repr(float("1.11")) == "1.11" +assert repr(float("-1.0")) == "-1.0" +assert repr(float("1.00101")) == "1.00101" assertRaises(ValueError, float, "1 E200") doc="finished" From 804ee41d5e3cc31512fd334676bc77699ad36db7 Mon Sep 17 00:00:00 2001 From: Tim S Date: Sun, 29 Sep 2019 12:33:36 +0200 Subject: [PATCH 2/4] more tests --- py/tests/float.py | 2 ++ py/tests/list.py | 2 ++ py/tests/tuple.py | 2 ++ 3 files changed, 6 insertions(+) diff --git a/py/tests/float.py b/py/tests/float.py index 0f7bb69e..5ed9ab2b 100644 --- a/py/tests/float.py +++ b/py/tests/float.py @@ -18,6 +18,8 @@ assert repr(float("1.11")) == "1.11" assert repr(float("-1.0")) == "-1.0" assert repr(float("1.00101")) == "1.00101" +assert repr(float("1.00")) == "1.0" +assert repr(float("2.010")) == "2.01" assertRaises(ValueError, float, "1 E200") doc="finished" diff --git a/py/tests/list.py b/py/tests/list.py index 3e8468b0..0f6691f0 100644 --- a/py/tests/list.py +++ b/py/tests/list.py @@ -9,12 +9,14 @@ assert str([1,2,3]) == "[1, 2, 3]" assert str([1,[2,3],4]) == "[1, [2, 3], 4]" assert str(["1",[2.5,17,[]]]) == "['1', [2.5, 17, []]]" +assert str([1, 1.0]) == "[1, 1.0]" doc="repr" assert repr([]) == "[]" assert repr([1,2,3]) == "[1, 2, 3]" assert repr([1,[2,3],4]) == "[1, [2, 3], 4]" assert repr(["1",[2.5,17,[]]]) == "['1', [2.5, 17, []]]" +assert repr([1, 1.0]) == "[1, 1.0]" doc="enumerate" a = [e for e in enumerate([3,4,5,6,7], 4)] diff --git a/py/tests/tuple.py b/py/tests/tuple.py index 609a687c..e5df3c81 100644 --- a/py/tests/tuple.py +++ b/py/tests/tuple.py @@ -7,12 +7,14 @@ assert str((1,2,3)) == "(1, 2, 3)" assert str((1,(2,3),4)) == "(1, (2, 3), 4)" assert str(("1",(2.5,17,()))) == "('1', (2.5, 17, ()))" +assert str((1, 1.0)) == "(1, 1.0)" doc="repr" assert repr(()) == "()" assert repr((1,2,3)) == "(1, 2, 3)" assert repr((1,(2,3),4)) == "(1, (2, 3), 4)" assert repr(("1",(2.5,17,()))) == "('1', (2.5, 17, ()))" +assert repr((1, 1.0)) == "(1, 1.0)" doc="mul" a = (1, 2, 3) From 5057b16e6b5ec25829d6dd57940d203f5ea9dadc Mon Sep 17 00:00:00 2001 From: Tim S Date: Sun, 29 Sep 2019 17:58:28 +0200 Subject: [PATCH 3/4] target only integer-like floats --- py/float.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/py/float.go b/py/float.go index c9629294..1f9e1f99 100644 --- a/py/float.go +++ b/py/float.go @@ -48,12 +48,10 @@ func FloatNew(metatype *Type, args Tuple, kwargs StringDict) (Object, error) { } func (a Float) M__str__() (Object, error) { - s := fmt.Sprintf("%g", a) - if idx := strings.IndexByte(s, '.'); idx == -1 { - // Sprintf implementation could change, so it's safer to check for '.' - s += ".0" + if i := int64(a); Float(i) == a { + return String(fmt.Sprintf("%d.0", i)), nil } - return String(s), nil + return String(fmt.Sprintf("%g", a)), nil } func (a Float) M__repr__() (Object, error) { From 95ae69d53bcdffb27a0265a8060aaac475506324 Mon Sep 17 00:00:00 2001 From: Tim S Date: Sun, 29 Sep 2019 21:52:43 +0200 Subject: [PATCH 4/4] Update float.py --- py/tests/float.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/py/tests/float.py b/py/tests/float.py index 5ed9ab2b..7f4cc7e7 100644 --- a/py/tests/float.py +++ b/py/tests/float.py @@ -12,6 +12,9 @@ assert float("-1E9") == -1E9 assert float("1E400") == float("inf") assert float(" -1E400") == float("-inf") +assertRaises(ValueError, float, "1 E200") + +doc="repr" assert repr(float("1.0")) == "1.0" assert repr(float("1.")) == "1.0" assert repr(float("1.1")) == "1.1" @@ -20,6 +23,15 @@ assert repr(float("1.00101")) == "1.00101" assert repr(float("1.00")) == "1.0" assert repr(float("2.010")) == "2.01" -assertRaises(ValueError, float, "1 E200") + +doc="str" +assert str(float("1.0")) == "1.0" +assert str(float("1.")) == "1.0" +assert str(float("1.1")) == "1.1" +assert str(float("1.11")) == "1.11" +assert str(float("-1.0")) == "-1.0" +assert str(float("1.00101")) == "1.00101" +assert str(float("1.00")) == "1.0" +assert str(float("2.010")) == "2.01" doc="finished"