[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