summaryrefslogtreecommitdiff
path: root/numpy/tests
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/tests')
-rw-r--r--numpy/tests/test_ctypeslib.py92
1 files changed, 92 insertions, 0 deletions
diff --git a/numpy/tests/test_ctypeslib.py b/numpy/tests/test_ctypeslib.py
new file mode 100644
index 000000000..aad6c96af
--- /dev/null
+++ b/numpy/tests/test_ctypeslib.py
@@ -0,0 +1,92 @@
+import sys
+
+import numpy as np
+from numpy.ctypeslib import ndpointer, load_library
+from numpy.testing import *
+
+class TestLoadLibrary(TestCase):
+ @dec.knownfailureif(sys.platform=='cygwin', "This test is known to fail on cygwin")
+ def test_basic(self):
+ try:
+ cdll = load_library('multiarray',
+ np.core.multiarray.__file__)
+ except ImportError, e:
+ msg = "ctypes is not available on this python: skipping the test" \
+ " (import error was: %s)" % str(e)
+ print msg
+
+ @dec.knownfailureif(sys.platform=='cygwin', "This test is known to fail on cygwin")
+ def test_basic2(self):
+ """Regression for #801: load_library with a full library name
+ (including extension) does not work."""
+ try:
+ try:
+ from distutils import sysconfig
+ so = sysconfig.get_config_var('SO')
+ cdll = load_library('multiarray%s' % so,
+ np.core.multiarray.__file__)
+ except ImportError:
+ print "No distutils available, skipping test."
+ except ImportError, e:
+ msg = "ctypes is not available on this python: skipping the test" \
+ " (import error was: %s)" % str(e)
+ print msg
+
+class TestNdpointer(TestCase):
+ def test_dtype(self):
+ dt = np.intc
+ p = ndpointer(dtype=dt)
+ self.assert_(p.from_param(np.array([1], dt)))
+ dt = '<i4'
+ p = ndpointer(dtype=dt)
+ self.assert_(p.from_param(np.array([1], dt)))
+ dt = np.dtype('>i4')
+ p = ndpointer(dtype=dt)
+ p.from_param(np.array([1], dt))
+ self.assertRaises(TypeError, p.from_param,
+ np.array([1], dt.newbyteorder('swap')))
+ dtnames = ['x', 'y']
+ dtformats = [np.intc, np.float64]
+ dtdescr = {'names' : dtnames, 'formats' : dtformats}
+ dt = np.dtype(dtdescr)
+ p = ndpointer(dtype=dt)
+ self.assert_(p.from_param(np.zeros((10,), dt)))
+ samedt = np.dtype(dtdescr)
+ p = ndpointer(dtype=samedt)
+ self.assert_(p.from_param(np.zeros((10,), dt)))
+ dt2 = np.dtype(dtdescr, align=True)
+ if dt.itemsize != dt2.itemsize:
+ self.assertRaises(TypeError, p.from_param, np.zeros((10,), dt2))
+ else:
+ self.assert_(p.from_param(np.zeros((10,), dt2)))
+
+ def test_ndim(self):
+ p = ndpointer(ndim=0)
+ self.assert_(p.from_param(np.array(1)))
+ self.assertRaises(TypeError, p.from_param, np.array([1]))
+ p = ndpointer(ndim=1)
+ self.assertRaises(TypeError, p.from_param, np.array(1))
+ self.assert_(p.from_param(np.array([1])))
+ p = ndpointer(ndim=2)
+ self.assert_(p.from_param(np.array([[1]])))
+
+ def test_shape(self):
+ p = ndpointer(shape=(1,2))
+ self.assert_(p.from_param(np.array([[1,2]])))
+ self.assertRaises(TypeError, p.from_param, np.array([[1],[2]]))
+ p = ndpointer(shape=())
+ self.assert_(p.from_param(np.array(1)))
+
+ def test_flags(self):
+ x = np.array([[1,2,3]], order='F')
+ p = ndpointer(flags='FORTRAN')
+ self.assert_(p.from_param(x))
+ p = ndpointer(flags='CONTIGUOUS')
+ self.assertRaises(TypeError, p.from_param, x)
+ p = ndpointer(flags=x.flags.num)
+ self.assert_(p.from_param(x))
+ self.assertRaises(TypeError, p.from_param, np.array([[1,2,3]]))
+
+
+if __name__ == "__main__":
+ run_module_suite()