File powerpc.patch of Package python-python-prctl

Index: python-prctl-1.8.1/test_prctl.py
===================================================================
--- python-prctl-1.8.1.orig/test_prctl.py
+++ python-prctl-1.8.1/test_prctl.py
@@ -45,6 +45,8 @@ def require(attr):
 class PrctlTest(unittest.TestCase):
     # There are architecture specific tests
     arch = os.uname()[4]
+    if arch == 'ppc' or arch == 'ppc64' or arch == 'ppc64le':
+        arch = 'powerpc'
     # prctl behaviour differs when root, so you should test as root and non-root
     am_root = os.geteuid() == 0
 
@@ -111,6 +113,7 @@ class PrctlTest(unittest.TestCase):
         self.assertEqual(prctl.get_dumpable(), False)
         self.assertRaises(TypeError, prctl.get_dumpable, "42")
 
+    @unittest.skip('cannot change endianness of running python interpreter')
     def test_endian(self):
         """Test manipulation of the endianness setting"""
         if self.arch == 'powerpc':
@@ -137,13 +140,55 @@ class PrctlTest(unittest.TestCase):
             self.assertRaises(OSError, prctl.get_fpemu)
             self.assertRaises(OSError, prctl.set_fpemu, prctl.FPEMU_SIGFPE)
 
+# define PR_FP_EXC_SW_ENABLE	0x80	/* Use FPEXC for FP exception enables */
+# define PR_FP_EXC_DIV		0x010000	/* floating point divide by zero */
+# define PR_FP_EXC_OVF		0x020000	/* floating point overflow */
+# define PR_FP_EXC_UND		0x040000	/* floating point underflow */
+# define PR_FP_EXC_RES		0x080000	/* floating point inexact result */
+# define PR_FP_EXC_INV		0x100000	/* floating point invalid operation */
+# define PR_FP_EXC_DISABLED	0	/* FP exceptions disabled */
+# define PR_FP_EXC_NONRECOV	1	/* async non-recoverable exc. mode */
+# define PR_FP_EXC_ASYNC	2	/* async recoverable exception mode */
+# define PR_FP_EXC_PRECISE	3	/* precise exception mode */
+    def print_fpexc(self, fpexc):
+        if fpexc == 0:
+            print("PR_FP_EXC_DISABLED")
+        else:
+            if fpexc & 3 == _prctl.PR_FP_EXC_ASYNC:
+                print('PR_FP_EXC_ASYNC')
+            if fpexc & 3 == _prctl.PR_FP_EXC_NONRECOV:
+                print('PR_FP_EXC_NONRECOV')
+            if fpexc & 3 == _prctl.PR_FP_EXC_PRECISE:
+                print('PR_FP_EXC_PRECISE')
+            if fpexc & prctl.PR_FP_EXC_SW_ENABLE:
+                print('PR_FP_EXC_SW_ENABLE')
+            if fpexc & _prctl.PR_FP_EXC_DIV:
+                print('PR_FP_EXC_DIV')
+            if fpexc & _prctl.PR_FP_EXC_OVF:
+                print('PR_FP_EXC_OVF')
+            if fpexc & _prctl.PR_FP_EXC_UND:
+                print('PR_FP_EXC_UND')
+            if fpexc & _prctl.PR_FP_EXC_RES:
+                print('PR_FP_EXC_RES')
+            if fpexc & _prctl.PR_FP_EXC_INV:
+                print('PR_FP_EXC_INV')
+        print('\n');
+
     def test_fpexc(self):
         """Test manipulation of the fpexc setting"""
         if self.arch == 'powerpc':
-            # FIXME - untested
-            prctl.set_fpexc(prctl.FP_EXC_SW_ENABLE)
-            self.assertEqual(prctl.get_fpexc() & prctl.PR_FP_EXC_SW_ENABLE, prctl.PR_FP_EXC_SW_ENABLE)
+            fpexc = prctl.get_fpexc()
+            self.print_fpexc(fpexc)
+            # Did not find a sane combination of flags that is supported.
+            self.assertRaises(OSError, prctl.set_fpexc,
+                    prctl.FP_EXC_SW_ENABLE | _prctl.PR_FP_EXC_ASYNC | _prctl.PR_FP_EXC_DIV | _prctl.PR_FP_EXC_INV)
+            self.print_fpexc(prctl.get_fpexc())
+            self.assertEqual(prctl.get_fpexc(), fpexc)
+            prctl.set_fpexc(_prctl.PR_FP_EXC_DISABLED)
+            self.print_fpexc(prctl.get_fpexc())
+            self.assertEqual(prctl.get_fpexc(), _prctl.PR_FP_EXC_DISABLED)
             self.assertRaises(ValueError, prctl.set_fpexc, 999)
+            prctl.set_fpexc(fpexc)
         else:
             self.assertRaises(OSError, prctl.get_fpexc)
             self.assertRaises(OSError, prctl.set_fpexc)
openSUSE Build Service is sponsored by