[Scipy-svn] r4493 - trunk/scipy/sandbox/mkufunc

scipy-svn@scip... scipy-svn@scip...
Sat Jun 28 15:37:05 CDT 2008


Author: ilan
Date: 2008-06-28 15:37:04 -0500 (Sat, 28 Jun 2008)
New Revision: 4493

Modified:
   trunk/scipy/sandbox/mkufunc/test_mkufunc.py
Log:
Added more test cases

Modified: trunk/scipy/sandbox/mkufunc/test_mkufunc.py
===================================================================
--- trunk/scipy/sandbox/mkufunc/test_mkufunc.py	2008-06-28 19:05:29 UTC (rev 4492)
+++ trunk/scipy/sandbox/mkufunc/test_mkufunc.py	2008-06-28 20:37:04 UTC (rev 4493)
@@ -1,7 +1,7 @@
 import math
 import unittest
 
-from numpy import array, arange, allclose, vectorize
+from numpy import array, arange, allclose
 
 from mkufunc import Cfunc, genufunc, mkufunc
 
@@ -66,7 +66,27 @@
                 return x * x
             self.check_ufunc(f)
 
+    def test_int(self):
+        @mkufunc(int)
+        def f(x):
+            return x * x
+        self.assertEqual(f(3), 9)
+        self.assert_(isinstance(f(42), int))
 
+    def test_mixed(self):
+        @mkufunc([(int, float, int), float])
+        def f(n, x):
+            return n + x * x
+        
+        y = f(2, 3.9)            # Note that int(2 + 3.9 * 3.9) = 17
+        self.assertEqual(y, 17)
+        self.assert_(isinstance(y, int))
+        
+        y = f(2.0, 3.9)
+        self.assert_(abs(y - 17.21) < 1E-10)
+        self.assert_(isinstance(y, float))
+
+
 class Math_Tests(unittest.TestCase):
     
     def test_func1arg(self):
@@ -112,15 +132,69 @@
         self.assert_(allclose(uf(x, y, z), f(x, y, z)))
 
 
-class Loop_Tests(unittest.TestCase):
-    pass
+class Control_Flow_Tests(unittest.TestCase):
 
-class Switch_Tests(unittest.TestCase):
-    pass
+    def test_if(self):
+        @mkufunc(int)
+        def f(n):
+            if n < 4:
+                return n
+            else:
+                return n * n
 
+        self.assertEqual(f(3), 3)
+        self.assertEqual(f(4), 16)
+
+    def test_switch(self):
+        @mkufunc(int)
+        def f(n):
+            if n < 4:
+                return n
+            elif n == 4:
+                return 42
+            elif n == 5:
+                return 73
+            else:
+                return n * n
+
+        self.assertEqual(f(3), 3)
+        self.assertEqual(f(4), 42)
+        self.assertEqual(f(5), 73)
+        self.assertEqual(f(6), 36)
+
+    def test_loop(self):
+        @mkufunc(int)
+        def f(n):
+            res = 0
+            for i in xrange(n):
+                res += i*i
+            return res
+
+        self.assertEqual(f(3), 5)
+        self.assertEqual(f(95), 281295)
+
+
 class FreeVariable_Tests(unittest.TestCase):
-    pass
 
+    def test_const(self):
+        a = 13.6
+        @mkufunc
+        def f(x):
+            return a * x
+        
+        x = arange(0, 1, 0.1)
+        self.assert_(allclose(f(x), a * x))
+
+    def test_const2(self):
+        from math import sin, pi, sqrt
+        @mkufunc
+        def sin_deg(angle):
+            return sin(angle / 180.0 * pi)
+        
+        self.assert_(allclose(sin_deg([0, 30, 45, 60, 90, 180, 270, 360]),
+                              [0, 0.5, 1/sqrt(2), sqrt(3)/2, 1, 0, -1, 0]))
+        
+
 class Misc_Tests(unittest.TestCase):
     pass
 



More information about the Scipy-svn mailing list