diff options
author | Vincent Bernat <bernat@luffy.cx> | 2013-12-21 22:30:14 +0100 |
---|---|---|
committer | Vincent Bernat <bernat@luffy.cx> | 2013-12-21 22:30:14 +0100 |
commit | b80e0a00b607ebc82ae058a2816b7f992a1fa5ec (patch) | |
tree | dac0fd56240a516e4847827bfdc9f4a1e6d4bba4 | |
parent | 5460111de8f263d846fd01f189ece24132cd5799 (diff) | |
download | cffi-b80e0a00b607ebc82ae058a2816b7f992a1fa5ec.tar.gz |
Link math tests using `sin()` to `libm`
While this linking seems to be done indirectly on most platforms, it
fails to work correctly on Sparc and S390x where an inappropriate
version of `sin()` is used. This should additional occurrences of bug #68.
Tests are passing on amd64, sparc and s390x Debian Linux platforms. Both
Python 2.x and Python 3.x.
-rw-r--r-- | testing/test_verify.py | 8 | ||||
-rw-r--r-- | testing/test_zdistutils.py | 33 |
2 files changed, 26 insertions, 15 deletions
diff --git a/testing/test_verify.py b/testing/test_verify.py index 442c2cb..9ddbfc6 100644 --- a/testing/test_verify.py +++ b/testing/test_verify.py @@ -63,13 +63,13 @@ def test_missing_function_import_error(): def test_simple_case(): ffi = FFI() ffi.cdef("double sin(double x);") - lib = ffi.verify('#include <math.h>') + lib = ffi.verify('#include <math.h>', libraries=["m"]) assert lib.sin(1.23) == math.sin(1.23) def test_rounding_1(): ffi = FFI() ffi.cdef("float sin(double x);") - lib = ffi.verify('#include <math.h>') + lib = ffi.verify('#include <math.h>', libraries=["m"]) res = lib.sin(1.23) assert res != math.sin(1.23) # not exact, because of double->float assert abs(res - math.sin(1.23)) < 1E-5 @@ -77,7 +77,7 @@ def test_rounding_1(): def test_rounding_2(): ffi = FFI() ffi.cdef("double sin(float x);") - lib = ffi.verify('#include <math.h>') + lib = ffi.verify('#include <math.h>', libraries=["m"]) res = lib.sin(1.23) assert res != math.sin(1.23) # not exact, because of double->float assert abs(res - math.sin(1.23)) < 1E-5 @@ -103,7 +103,7 @@ def test_strlen_array_of_char(): def test_longdouble(): ffi = FFI() ffi.cdef("long double sinl(long double x);") - lib = ffi.verify('#include <math.h>') + lib = ffi.verify('#include <math.h>', libraries=["m"]) for input in [1.23, ffi.cast("double", 1.23), ffi.cast("long double", 1.23)]: diff --git a/testing/test_zdistutils.py b/testing/test_zdistutils.py index 692eebd..2137a89 100644 --- a/testing/test_zdistutils.py +++ b/testing/test_zdistutils.py @@ -25,7 +25,8 @@ class DistUtilsTest(object): ffi = FFI() ffi.cdef("double sin(double x);") csrc = '/*hi there %s!*/\n#include <math.h>\n' % self - v = Verifier(ffi, csrc, force_generic_engine=self.generic) + v = Verifier(ffi, csrc, force_generic_engine=self.generic, + libraries=["m"]) v.write_source() with open(v.sourcefilename, 'r') as f: data = f.read() @@ -35,7 +36,8 @@ class DistUtilsTest(object): ffi = FFI() ffi.cdef("double sin(double x);") csrc = '/*hi there %s!*/\n#include <math.h>\n' % self - v = Verifier(ffi, csrc, force_generic_engine=self.generic) + v = Verifier(ffi, csrc, force_generic_engine=self.generic, + libraries=["m"]) v.sourcefilename = filename = str(udir.join('write_source.c')) v.write_source() assert filename == v.sourcefilename @@ -47,7 +49,8 @@ class DistUtilsTest(object): ffi = FFI() ffi.cdef("double sin(double x);") csrc = '/*hi there %s!*/\n#include <math.h>\n' % self - v = Verifier(ffi, csrc, force_generic_engine=self.generic) + v = Verifier(ffi, csrc, force_generic_engine=self.generic, + libraries=["m"]) try: from StringIO import StringIO except ImportError: @@ -60,7 +63,8 @@ class DistUtilsTest(object): ffi = FFI() ffi.cdef("double sin(double x);") csrc = '/*hi there %s!*/\n#include <math.h>\n' % self - v = Verifier(ffi, csrc, force_generic_engine=self.generic) + v = Verifier(ffi, csrc, force_generic_engine=self.generic, + libraries=["m"]) v.compile_module() assert v.get_module_name().startswith('_cffi_') if v.generates_python_module(): @@ -71,7 +75,8 @@ class DistUtilsTest(object): ffi = FFI() ffi.cdef("double sin(double x);") csrc = '/*hi there %s!2*/\n#include <math.h>\n' % self - v = Verifier(ffi, csrc, force_generic_engine=self.generic) + v = Verifier(ffi, csrc, force_generic_engine=self.generic, + libraries=["m"]) basename = self.__class__.__name__ + 'test_compile_module' v.modulefilename = filename = str(udir.join(basename + '.so')) v.compile_module() @@ -87,7 +92,8 @@ class DistUtilsTest(object): ffi = FFI() ffi.cdef("%s sin(double x);" % csrc) v = Verifier(ffi, "#include <math.h>", - force_generic_engine=self.generic) + force_generic_engine=self.generic, + libraries=["m"]) names.append(v.get_module_name()) assert names[0] == names[1] != names[2] @@ -104,7 +110,8 @@ class DistUtilsTest(object): ffi = FFI() ffi.cdef("double sin(double x);") csrc = '/*hi there %s!3*/\n#include <math.h>\n' % self - v = Verifier(ffi, csrc, force_generic_engine=self.generic) + v = Verifier(ffi, csrc, force_generic_engine=self.generic, + libraries=["m"]) library = v.load_library() assert library.sin(12.3) == math.sin(12.3) @@ -114,7 +121,8 @@ class DistUtilsTest(object): csrc = '/*hi there %s!4*/#include "test_verifier_args.h"\n' % self udir.join('test_verifier_args.h').write('#include <math.h>\n') v = Verifier(ffi, csrc, include_dirs=[str(udir)], - force_generic_engine=self.generic) + force_generic_engine=self.generic, + libraries=["m"]) library = v.load_library() assert library.sin(12.3) == math.sin(12.3) @@ -122,7 +130,8 @@ class DistUtilsTest(object): ffi = FFI() ffi.cdef("double sin(double x);") csrc = "/*6%s*/\n#include <math.h>" % self - lib = ffi.verify(csrc, force_generic_engine=self.generic) + lib = ffi.verify(csrc, force_generic_engine=self.generic, + libraries=["m"]) assert lib.sin(12.3) == math.sin(12.3) assert isinstance(ffi.verifier, Verifier) with open(ffi.verifier.sourcefilename, 'r') as f: @@ -139,7 +148,8 @@ class DistUtilsTest(object): #endif ''' lib = ffi.verify(csrc, define_macros=[('TEST_EXTENSION_OBJECT', '1')], - force_generic_engine=self.generic) + force_generic_engine=self.generic, + libraries=["m"]) assert lib.sin(12.3) == math.sin(12.3) v = ffi.verifier ext = v.get_extension() @@ -152,7 +162,8 @@ class DistUtilsTest(object): ffi = FFI() ffi.cdef("double sin(double x);") csrc = '/*hi there9!%s*/\n#include <math.h>\n' % self - v = Verifier(ffi, csrc, force_generic_engine=self.generic) + v = Verifier(ffi, csrc, force_generic_engine=self.generic, + libraries=["m"]) assert not os.path.exists(v.sourcefilename) v.get_extension() assert os.path.exists(v.sourcefilename) |