summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-04-12 00:35:51 (GMT)
committerTim Peters <tim.peters@gmail.com>2001-04-12 00:35:51 (GMT)
commit711088d9b8c6898aad571fb251cb40a8b7d42f64 (patch)
tree937822a57e2984b35b9720c9b67fa0f0e0d213f0 /Lib
parent4642cb9ac9636dec1e939a75f5da3fc263b51326 (diff)
downloadcpython-711088d9b8c6898aad571fb251cb40a8b7d42f64.zip
cpython-711088d9b8c6898aad571fb251cb40a8b7d42f64.tar.gz
cpython-711088d9b8c6898aad571fb251cb40a8b7d42f64.tar.bz2
Fix for SF bug #415514: "%#x" % 0 caused assertion failure/abort.
http://sourceforge.net/tracker/index.php?func=detail&aid=415514&group_id=5470&atid=105470 For short ints, Python defers to the platform C library to figure out what %#x should do. The code asserted that the platform C returned a string beginning with "0x". However, that's not true when-- and only when --the *value* being formatted is 0. Changed the code to live with C's inconsistency here. In the meantime, the problem does not arise if you format a long 0 (0L) instead. However, that's because the code *we* wrote to do %#x conversions on longs produces a leading "0x" regardless of value. That's probably wrong too: we should drop leading "0x", for consistency with C, when (& only when) formatting 0L. So I changed the long formatting code to do that too.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_format.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/Lib/test/test_format.py b/Lib/test/test_format.py
index 6a60603..ce5d5f2 100644
--- a/Lib/test/test_format.py
+++ b/Lib/test/test_format.py
@@ -164,6 +164,22 @@ testboth("%d", 42, "42")
testboth("%d", -42, "-42")
testboth("%d", 42L, "42")
testboth("%d", -42L, "-42")
+testboth("%#x", 1, "0x1")
+testboth("%#x", 1L, "0x1")
+testboth("%#X", 1, "0X1")
+testboth("%#X", 1L, "0X1")
+testboth("%#o", 1, "01")
+testboth("%#o", 1L, "01")
+testboth("%#o", 0, "0")
+testboth("%#o", 0L, "0")
+testboth("%o", 0, "0")
+testboth("%o", 0L, "0")
+testboth("%d", 0, "0")
+testboth("%d", 0L, "0")
+testboth("%#x", 0, "0")
+testboth("%#x", 0L, "0")
+testboth("%#X", 0, "0")
+testboth("%#X", 0L, "0")
testboth("%x", 0x42, "42")
# testboth("%x", -0x42, "ffffffbe") # Alas, that's specific to 32-bit machines