mp.c, catacomb/__init__.py, pyke/: Fix mixed-mode arithmetic involving `float'.
[catacomb-python] / t / t-mp.py
index ff373ca..a88fa8d 100644 (file)
--- a/t/t-mp.py
+++ b/t/t-mp.py
@@ -135,6 +135,20 @@ class TestMP (U.TestCase):
     me.assertTrue(y < x)
     me.assertFalse(x < x)
 
+  def test_float(me):
+    x, y = C.MP(169), 24.0
+    for fn in [T.add, T.sub, T.mul, T.div]:
+      me.assertEqual(type(fn(x, y)), float)
+      me.assertEqual(type(fn(y, x)), float)
+    me.assertEqual(x, 169.0)
+    me.assertNotEqual(x, 169.1)
+    me.assertNotEqual(x, 168.9)
+    me.assertTrue(x > 168.9)
+    me.assertTrue(x < 169.1)
+    z = 1.0
+    while z == z + 1: z *= 2.0
+    me.assertNotEqual(C.MP(int(z)) + 1, z)
+
   def test_bits(me):
     x, y, zero = C.MP(169), C.MP(-24), C.MP(0)
     me.assertTrue(x.testbit(0))