From 43b05afdf51d19caadafd27562dafc4a85f0b67d Mon Sep 17 00:00:00 2001 From: Alessandro Gatti Date: Mon, 23 Sep 2024 18:07:47 +0200 Subject: [PATCH] py/mpz: Skip separators when running out of digits to print. This commit fixes the addition of a stray separator before the number when printing an MPZ-backed integer and the first group is three digits long. This fixes #8984. Signed-off-by: Alessandro Gatti --- py/mpz.c | 2 +- tests/basics/string_format_intbig.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 tests/basics/string_format_intbig.py diff --git a/py/mpz.c b/py/mpz.c index 750664ad9a..084aebda9e 100644 --- a/py/mpz.c +++ b/py/mpz.c @@ -1717,7 +1717,7 @@ size_t mpz_as_str_inpl(const mpz_t *i, unsigned int base, const char *prefix, ch break; } } - if (comma && (s - last_comma) == 3) { + if (!done && comma && (s - last_comma) == 3) { *s++ = comma; last_comma = s; } diff --git a/tests/basics/string_format_intbig.py b/tests/basics/string_format_intbig.py new file mode 100644 index 0000000000..a36c36752e --- /dev/null +++ b/tests/basics/string_format_intbig.py @@ -0,0 +1,15 @@ +# basic functionality test for {} format string using large integers + + +def test(fmt, *args): + print("{:8s}".format(fmt) + ">" + fmt.format(*args) + "<") + + +# Separator formatter + +test("{:,}", 123_456_789_012_345_678_901_234_567) +test("{:,}", 23_456_789_012_345_678_901_234_567) +test("{:,}", 3_456_789_012_345_678_901_234_567) +test("{:,}", -123_456_789_012_345_678_901_234_567) +test("{:,}", -23_456_789_012_345_678_901_234_567) +test("{:,}", -3_456_789_012_345_678_901_234_567)