[pypy-commit] pypy dtypes-compatability: test align more thoroughly (from numpy tests), percolate align argument
mattip
noreply at buildbot.pypy.org
Sun Jun 21 21:32:19 CEST 2015
Author: mattip <matti.picus at gmail.com>
Branch: dtypes-compatability
Changeset: r78231:e00c9f683a8c
Date: 2015-06-20 21:14 +0300
http://bitbucket.org/pypy/pypy/changeset/e00c9f683a8c/
Log: test align more thoroughly (from numpy tests), percolate align
argument
diff --git a/pypy/module/micronumpy/test/test_dtypes.py b/pypy/module/micronumpy/test/test_dtypes.py
--- a/pypy/module/micronumpy/test/test_dtypes.py
+++ b/pypy/module/micronumpy/test/test_dtypes.py
@@ -1310,6 +1310,54 @@
raises(ValueError, np.dtype, [('a', 'f4', -1)])
raises(ValueError, np.dtype, [('a', 'f4', (-1, -1))])
+ def test_aligned_size(self):
+ import numpy as np
+ # Check that structured dtypes get padded to an aligned size
+ dt = np.dtype('i4, i1', align=True)
+ assert dt.itemsize == 8
+ dt = np.dtype([('f0', 'i4'), ('f1', 'i1')], align=True)
+ assert dt.itemsize == 8
+ dt = np.dtype({'names':['f0', 'f1'],
+ 'formats':['i4', 'u1'],
+ 'offsets':[0, 4]}, align=True)
+ assert dt.itemsize == 8
+ dt = np.dtype({'f0': ('i4', 0), 'f1':('u1', 4)}, align=True)
+ assert dt.itemsize == 8
+ # Nesting should preserve that alignment
+ dt1 = np.dtype([('f0', 'i4'),
+ ('f1', [('f1', 'i1'), ('f2', 'i4'), ('f3', 'i1')]),
+ ('f2', 'i1')], align=True)
+ assert dt1.itemsize == 20
+ dt2 = np.dtype({'names':['f0', 'f1', 'f2'],
+ 'formats':['i4',
+ [('f1', 'i1'), ('f2', 'i4'), ('f3', 'i1')],
+ 'i1'],
+ 'offsets':[0, 4, 16]}, align=True)
+ assert dt2.itemsize == 20
+ dt3 = np.dtype({'f0': ('i4', 0),
+ 'f1': ([('f1', 'i1'), ('f2', 'i4'), ('f3', 'i1')], 4),
+ 'f2': ('i1', 16)}, align=True)
+ assert dt3.itemsize == 20
+ assert dt1 == dt2
+ assert dt2 == dt3
+ # Nesting should preserve packing
+ dt1 = np.dtype([('f0', 'i4'),
+ ('f1', [('f1', 'i1'), ('f2', 'i4'), ('f3', 'i1')]),
+ ('f2', 'i1')], align=False)
+ assert dt1.itemsize == 11
+ dt2 = np.dtype({'names':['f0', 'f1', 'f2'],
+ 'formats':['i4',
+ [('f1', 'i1'), ('f2', 'i4'), ('f3', 'i1')],
+ 'i1'],
+ 'offsets':[0, 4, 10]}, align=False)
+ assert dt2.itemsize == 11
+ dt3 = np.dtype({'f0': ('i4', 0),
+ 'f1': ([('f1', 'i1'), ('f2', 'i4'), ('f3', 'i1')], 4),
+ 'f2': ('i1', 10)}, align=False)
+ assert dt3.itemsize == 11
+ assert dt1 == dt2
+ assert dt2 == dt3
+
class AppTestNotDirect(BaseNumpyAppTest):
def setup_class(cls):
More information about the pypy-commit
mailing list