[Numpy-svn] r6239 - in branches/fix_float_format: . numpy/core/tests

numpy-svn@scip... numpy-svn@scip...
Mon Dec 29 21:19:57 CST 2008


Author: cdavid
Date: 2008-12-29 21:19:53 -0600 (Mon, 29 Dec 2008)
New Revision: 6239

Modified:
   branches/fix_float_format/
   branches/fix_float_format/numpy/core/tests/test_print.py
Log:
Merged revisions 6236-6238 via svnmerge from 
http://svn.scipy.org/svn/numpy/trunk

........
  r6236 | cdavid | 2008-12-29 17:02:15 +0900 (Mon, 29 Dec 2008) | 1 line
  
  Add nan/inf tests for formatting.
........
  r6237 | cdavid | 2008-12-29 17:26:04 +0900 (Mon, 29 Dec 2008) | 1 line
  
  Add test for real float types locale independance.
........
  r6238 | cdavid | 2008-12-29 17:35:06 +0900 (Mon, 29 Dec 2008) | 1 line
  
  Clearer error messages for formatting failures.
........



Property changes on: branches/fix_float_format
___________________________________________________________________
Name: svnmerge-integrated
   - /branches/distutils-revamp:1-2752 /branches/dynamic_cpu_configuration:1-6101 /branches/multicore:1-3687 /branches/numpy-mingw-w64:1-6150 /branches/visualstudio_manifest:1-6077 /trunk:1-6221
   + /branches/distutils-revamp:1-2752 /branches/dynamic_cpu_configuration:1-6101 /branches/multicore:1-3687 /branches/numpy-mingw-w64:1-6150 /branches/visualstudio_manifest:1-6077 /trunk:1-6238

Modified: branches/fix_float_format/numpy/core/tests/test_print.py
===================================================================
--- branches/fix_float_format/numpy/core/tests/test_print.py	2008-12-29 08:35:06 UTC (rev 6238)
+++ branches/fix_float_format/numpy/core/tests/test_print.py	2008-12-30 03:19:53 UTC (rev 6239)
@@ -1,9 +1,13 @@
 import numpy as np
 from numpy.testing import *
 
+import locale
+import sys
+
 def check_float_type(tp):
     for x in [0, 1,-1, 1e10, 1e20] :
-        assert_equal(str(tp(x)), str(float(x)))
+        assert_equal(str(tp(x)), str(float(x)),
+                     err_msg='Failed str formatting for type %s' % tp)
 
 def test_float_types():
     """ Check formatting.
@@ -16,11 +20,30 @@
     for t in [np.float32, np.double, np.longdouble] :
         yield check_float_type, t
 
+def check_nan_inf_float(tp):
+    for x in [float('inf'), float('-inf'), float('nan')]:
+        assert_equal(str(tp(x)), str(float(x)),
+                     err_msg='Failed str formatting for type %s' % tp)
+
+def test_nan_inf_float():
+    """ Check formatting.
+
+        This is only for the str function, and only for simple types.
+        The precision of np.float and np.longdouble aren't the same as the
+        python float precision.
+
+    """
+    for t in [np.float32, np.double, np.longdouble] :
+        yield check_nan_inf_float, t
+
 def check_complex_type(tp):
     for x in [0, 1,-1, 1e10, 1e20] :
-        assert_equal(str(tp(x)), str(complex(x)))
-        assert_equal(str(tp(x*1j)), str(complex(x*1j)))
-        assert_equal(str(tp(x + x*1j)), str(complex(x + x*1j)))
+        assert_equal(str(tp(x)), str(complex(x)),
+                     err_msg='Failed str formatting for type %s' % tp)
+        assert_equal(str(tp(x*1j)), str(complex(x*1j)),
+                     err_msg='Failed str formatting for type %s' % tp)
+        assert_equal(str(tp(x + x*1j)), str(complex(x + x*1j)),
+                     err_msg='Failed str formatting for type %s' % tp)
 
 def test_complex_types():
     """Check formatting.
@@ -33,5 +56,53 @@
     for t in [np.complex64, np.cdouble, np.clongdouble] :
         yield check_complex_type, t
 
+def has_french_locale():
+    curloc = locale.getlocale(locale.LC_NUMERIC)
+    try:
+        if not sys.platform == 'win32':
+            locale.setlocale(locale.LC_NUMERIC, 'fr_FR')
+        else:
+            locale.setlocale(locale.LC_NUMERIC, 'FRENCH')
+
+        st = True
+    except:
+        st = False
+    finally:
+        locale.setlocale(locale.LC_NUMERIC, locale=curloc)
+
+    return st
+
+def _test_locale_independance(tp):
+    # XXX: How to query locale on a given system ?
+
+    # French is one language where the decimal is ',' not '.', and should be
+    # relatively common on many systems
+    curloc = locale.getlocale(locale.LC_NUMERIC)
+    try:
+        if not sys.platform == 'win32':
+            locale.setlocale(locale.LC_NUMERIC, 'fr_FR')
+        else:
+            locale.setlocale(locale.LC_NUMERIC, 'FRENCH')
+
+        assert_equal(str(tp(1.2)), str(float(1.2)),
+                     err_msg='Failed locale test for type %s' % tp)
+    finally:
+        locale.setlocale(locale.LC_NUMERIC, locale=curloc)
+
+@np.testing.dec.skipif(not has_french_locale(),
+                       "Skipping locale test, French locale not found")
+def test_locale_single():
+    return _test_locale_independance(np.float32)
+
+@np.testing.dec.skipif(not has_french_locale(),
+                       "Skipping locale test, French locale not found")
+def test_locale_double():
+    return _test_locale_independance(np.double)
+
+@np.testing.dec.skipif(not has_french_locale(),
+                       "Skipping locale test, French locale not found")
+def test_locale_longdouble():
+    return _test_locale_independance(np.longdouble)
+
 if __name__ == "__main__":
     run_module_suite()



More information about the Numpy-svn mailing list