[Python-Dev] alpha problems -- need input (original) (raw)
Neal Norwitz nnorwitz at gmail.com
Thu Mar 30 07:37:21 CEST 2006
- Previous message: [Python-Dev] pysqlite for 2.5?
- Next message: [Python-Dev] alpha problems -- need input
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
These issues are on HEAD. There might be some others I missed.
With cc there are at least 2 issues:
- test_file causes interpreter exit due to sys.stdin.seek(-1)
- test_pty fails apparently due to whitespace differences
http://www.python.org/dev/buildbot/all/alpha%20Tru64%205.1%20trunk/builds/18/step-test/0
Should we skip the test for an invalid seek on stdin on osf1? I haven't investigated the test_pty failure further.
With gcc, there are also several issues:
- test_float and test_struct fail due to NaN handling
- test_long fails
- test_ctypes
The question is how to fix these. test_float and test_struct fail due to a Floating Point Exception signal (SIGFPE). test_long fails due to float(shuge) raising a ValueError. There is a comment:
# XXX Perhaps float(shuge) can raise OverflowError on some box?
# The comparison should not.
Note: it raises value error, not OverflowError.
Should I just wrap the float(shuge) in a try/except and skip the test if an exception is raised?
The patches below fix the float and struct problems. I'm not sure if we should ignore SIGFPE in test_float. I'm also not sure if the change to floatobject.c should be made. It's possible there is a compiler flag that would help. I tried -mieee and a few others, but none seemed to make a difference for gcc.
test_ctypes fails because _findLib() doesn't seem to work properly on OSF1. Note: libc.so => /usr/shlib/libc.so
ERROR: test_find (ctypes.test.test_loading.LoaderTest)
Traceback (most recent call last): File "/net/ringneck/scratch1/nnorwitz/python/trunk/Lib/ctypes/test/test_loading.py", line 40, in test_find cdll.find(name) File "/net/ringneck/scratch1/nnorwitz/python/trunk/Lib/ctypes/_loader.py", line 205, in find raise OSError("Library %r not found" % name) OSError: Library 'c' not found
====================================================================== ERROR: test_load (ctypes.test.test_loading.LoaderTest)
Traceback (most recent call last): File "/net/ringneck/scratch1/nnorwitz/python/trunk/Lib/ctypes/test/test_loading.py", line 25, in test_load cdll.load(name) File "/net/ringneck/scratch1/nnorwitz/python/trunk/Lib/ctypes/_loader.py", line 112, in load return self._load(libname, mode) File "/net/ringneck/scratch1/nnorwitz/python/trunk/Lib/ctypes/_loader.py", line 124, in load_library return self._dlltype(libname, mode) File "/net/ringneck/scratch1/nnorwitz/python/trunk/Lib/ctypes/init.py", line 292, in init self._handle = _dlopen(self._name, mode) OSError: dlopen: Cannot map library libc.so.6
======================================================================
Below are the patches.
Index: Objects/floatobject.c
--- Objects/floatobject.c (revision 43416) +++ Objects/floatobject.c (working copy) @@ -1430,10 +1430,19 @@ return -1; } else {
float y = (float)x;
float y; const char *s = (char*)&y; int i, incr = 1;
/* The conversion of x to a float causes a floating exception
on some platforms (at least OSF1 v5.1 gcc-4.0.1)
*/
+#ifndef MAXFLOAT +#define MAXFLOAT ((float)3.40282346638528860e+38) +#endif + if (x > MAXFLOAT || x < -MAXFLOAT) + goto Overflow; + y = (float)x; if ((float_format == ieee_little_endian_format && !le) || (float_format == ieee_big_endian_format && le)) { p += 3; Index: Lib/test/test_float.py
--- Lib/test/test_float.py (revision 43416) +++ Lib/test/test_float.py (working copy) @@ -1,4 +1,5 @@
+import signal import unittest, struct from test import test_support
@@ -83,6 +84,12 @@
is accident (today).
class IEEEFormatTestCase(unittest.TestCase): + def setUp(self): + signal.signal(signal.SIGFPE, signal.SIG_IGN) + + def tearDown(self): + signal.signal(signal.SIGFPE, signal.SIG_DFL) + if float.getformat("double").startswith("IEEE"): def test_double_specials_do_unpack(self): for fmt, data in [('>d', BE_DOUBLE_INF), Index: Lib/test/test_file.py
--- Lib/test/test_file.py (revision 43416) +++ Lib/test/test_file.py (working copy) @@ -100,12 +100,14 @@ print "writelines accepted sequence of non-string objects" f.close()
-try:
- sys.stdin.seek(-1)
-except IOError:
- pass
-else:
- print "should not be able to seek on sys.stdin"
+# This causes the interpreter to exit on OSF1 v5.1. +if sys.platform != 'osf1V5':
- try:
sys.stdin.seek(-1)
- except IOError:
pass
- else:
print "should not be able to seek on sys.stdin"
try: sys.stdin.truncate() Index: Lib/test/test_long.py
--- Lib/test/test_long.py (revision 43416) +++ Lib/test/test_long.py (working copy) @@ -372,10 +372,15 @@
self.assertRaises(OverflowError, eval, test, namespace)
# XXX Perhaps float(shuge) can raise OverflowError on some box?
# The comparison should not.
self.assertNotEqual(float(shuge), int(shuge),
"float(shuge) should not equal int(shuge)")
# float(shuge) can raise OverflowError on an Alpha built with gcc.
try:
fshuge = float(shuge)
except ValueError:
pass
else:
# The comparison should not.
self.assertNotEqual(fshuge, int(shuge),
def test_logs(self): import math"float(shuge) should not equal int(shuge)")
Index: Lib/test/test_struct.py
--- Lib/test/test_struct.py (revision 43416) +++ Lib/test/test_struct.py (working copy) @@ -429,11 +429,12 @@ # The same, but tack on a 1 bit so it rounds up to infinity. big = (1 << 25) - 1 big = math.ldexp(big, 127 - 24)
- try:
packed = struct.pack(">f", big)
- except OverflowError:
pass
- else:
TestFailed("expected OverflowError")
- for value in (big, -big):
try:
packed = struct.pack(">f", value)
except OverflowError:
pass
else:
TestFailed("expected OverflowError")
test_705836()
- Previous message: [Python-Dev] pysqlite for 2.5?
- Next message: [Python-Dev] alpha problems -- need input
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]