[pypy-svn] r75773 - in pypy/branch/fast-forward/pypy/module/sys: . test
benjamin at codespeak.net
benjamin at codespeak.net
Fri Jul 2 17:09:23 CEST 2010
Author: benjamin
Date: Fri Jul 2 17:09:21 2010
New Revision: 75773
Added:
pypy/branch/fast-forward/pypy/module/sys/system.py (contents, props changed)
Modified:
pypy/branch/fast-forward/pypy/module/sys/__init__.py
pypy/branch/fast-forward/pypy/module/sys/test/test_sysmodule.py
Log:
add sys.float_info
Modified: pypy/branch/fast-forward/pypy/module/sys/__init__.py
==============================================================================
--- pypy/branch/fast-forward/pypy/module/sys/__init__.py (original)
+++ pypy/branch/fast-forward/pypy/module/sys/__init__.py Fri Jul 2 17:09:21 2010
@@ -73,6 +73,8 @@
'getdefaultencoding' : 'interp_encoding.getdefaultencoding',
'setdefaultencoding' : 'interp_encoding.setdefaultencoding',
'getfilesystemencoding' : 'interp_encoding.getfilesystemencoding',
+
+ 'float_info' : 'system.get_float_info(space)',
}
if sys.platform == 'win32':
Added: pypy/branch/fast-forward/pypy/module/sys/system.py
==============================================================================
--- (empty file)
+++ pypy/branch/fast-forward/pypy/module/sys/system.py Fri Jul 2 17:09:21 2010
@@ -0,0 +1,61 @@
+"""Information about the current system."""
+
+from pypy.interpreter import gateway
+
+from pypy.rpython.tool import rffi_platform
+from pypy.translator.tool.cbuild import ExternalCompilationInfo
+
+
+class CConfig:
+ _compilation_info_ = ExternalCompilationInfo(includes=["float.h"])
+
+float_constants = ["DBL_MAX", "DBL_MIN", "DBL_EPSILON"]
+int_constants = ["DBL_MAX_EXP", "DBL_MAX_10_EXP",
+ "DBL_MIN_EXP", "DBL_MIN_10_EXP",
+ "DBL_DIG", "DBL_MANT_DIG",
+ "FLT_RADIX", "FLT_ROUNDS"]
+for const in float_constants:
+ setattr(CConfig, const, rffi_platform.DefinedConstantDouble(const))
+for const in int_constants:
+ setattr(CConfig, const, rffi_platform.DefinedConstantInteger(const))
+del float_constants, int_constants, const
+
+globals().update(rffi_platform.configure(CConfig))
+
+
+app = gateway.applevel("""
+"NOT_RPYTHON"
+from _structseq import structseqtype, structseqfield
+class float_info:
+ __metaclass__ = structseqtype
+
+ max = structseqfield(0)
+ max_exp = structseqfield(1)
+ max_10_exp = structseqfield(2)
+ min = structseqfield(3)
+ min_exp = structseqfield(4)
+ min_10_exp = structseqfield(5)
+ dig = structseqfield(6)
+ mant_dig = structseqfield(7)
+ epsilon = structseqfield(8)
+ radix = structseqfield(9)
+ rounds = structseqfield(10)
+""")
+
+
+def get_float_info(space):
+ info_w = [
+ space.wrap(DBL_MAX),
+ space.wrap(DBL_MAX_EXP),
+ space.wrap(DBL_MAX_10_EXP),
+ space.wrap(DBL_MIN),
+ space.wrap(DBL_MIN_EXP),
+ space.wrap(DBL_MIN_10_EXP),
+ space.wrap(DBL_DIG),
+ space.wrap(DBL_MANT_DIG),
+ space.wrap(DBL_EPSILON),
+ space.wrap(FLT_RADIX),
+ space.wrap(FLT_ROUNDS),
+ ]
+ w_float_info = app.wget(space, "float_info")
+ return space.call_function(w_float_info, space.newtuple(info_w))
Modified: pypy/branch/fast-forward/pypy/module/sys/test/test_sysmodule.py
==============================================================================
--- pypy/branch/fast-forward/pypy/module/sys/test/test_sysmodule.py (original)
+++ pypy/branch/fast-forward/pypy/module/sys/test/test_sysmodule.py Fri Jul 2 17:09:21 2010
@@ -114,6 +114,22 @@
import sys
assert sys.getfilesystemencoding() == self.filesystemenc
+ def test_float_info(self):
+ import sys
+ fi = sys.float_info
+ assert isinstance(fi.epsilon, float)
+ assert isinstance(fi.dig, int)
+ assert isinstance(fi.mant_dig, int)
+ assert isinstance(fi.max, float)
+ assert isinstance(fi.max_exp, int)
+ assert isinstance(fi.max_10_exp, int)
+ assert isinstance(fi.min, float)
+ assert isinstance(fi.min_exp, int)
+ assert isinstance(fi.min_10_exp, int)
+ assert isinstance(fi.radix, int)
+ assert isinstance(fi.rounds, int)
+
+
class AppTestSysModulePortedFromCPython:
def setup_class(cls):
More information about the Pypy-commit
mailing list