Skip to content

Commit 1316cb9

Browse files
committed
add unit test for reference types
1 parent 0ba5298 commit 1316cb9

File tree

1 file changed

+45
-1
lines changed

1 file changed

+45
-1
lines changed

test/unit/hdf5dtypeTest.py

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import sys
1616
from h5py import special_dtype
1717
from h5py import check_dtype
18+
from h5py import Reference
19+
from h5py import RegionReference
1820
import six
1921

2022

@@ -121,6 +123,25 @@ def testBaseArrayTypeItem(self):
121123
self.assertEqual(baseItem['base'], 'H5T_STD_I32LE')
122124
self.assertEqual(typeSize, 16)
123125

126+
def testObjReferenceTypeItem(self):
127+
#dt = np.dtype('S48', metadata={'ref': val.__class__})
128+
dt = special_dtype(ref=Reference)
129+
typeItem = hdf5dtype.getTypeItem(dt)
130+
typeSize = hdf5dtype.getItemSize(typeItem)
131+
self.assertEqual(typeItem['class'], 'H5T_REFERENCE')
132+
self.assertEqual(typeItem['base'], 'H5T_STD_REF_OBJ')
133+
self.assertEqual(typeSize, 'H5T_VARIABLE')
134+
135+
def testRegionReferenceTypeItem(self):
136+
dt = special_dtype(ref=RegionReference)
137+
typeItem = hdf5dtype.getTypeItem(dt)
138+
typeSize = hdf5dtype.getItemSize(typeItem)
139+
self.assertEqual(typeItem['class'], 'H5T_REFERENCE')
140+
self.assertEqual(typeItem['base'], 'H5T_STD_REF_DSETREG')
141+
self.assertEqual(typeSize, 'H5T_VARIABLE')
142+
143+
144+
124145
def testCompoundArrayTypeItem(self):
125146
dt = np.dtype([('a', '<i1'), ('b', 'S1', (10,))])
126147
typeItem = hdf5dtype.getTypeItem(dt)
@@ -220,6 +241,17 @@ def testVlenDataItem(self):
220241
self.assertEqual(baseItem['base'], 'H5T_STD_I32LE')
221242
self.assertEqual(typeSize, 'H5T_VARIABLE')
222243

244+
def testVlenReferenceDataItem(self):
245+
ref_dt = special_dtype(ref=Reference)
246+
dt = special_dtype(vlen=ref_dt)
247+
typeItem = hdf5dtype.getTypeItem(dt)
248+
typeSize = hdf5dtype.getItemSize(typeItem)
249+
self.assertEqual(typeItem['class'], 'H5T_VLEN')
250+
self.assertEqual(typeItem['size'], 'H5T_VARIABLE')
251+
baseItem = typeItem['base']
252+
self.assertEqual(baseItem['base'], 'H5T_STD_REF_OBJ')
253+
self.assertEqual(typeSize, 'H5T_VARIABLE')
254+
223255
def testCompoundTypeItem(self):
224256
dt = np.dtype([("temp", np.float32), ("pressure", np.float32), ("wind", np.int16)])
225257
typeItem = hdf5dtype.getTypeItem(dt)
@@ -495,7 +527,19 @@ def testCreateArrayIntegerType(self):
495527
self.assertTrue(False) # expected exception - dims used with none array type
496528
except TypeError:
497529
pass # should get exception
498-
530+
531+
532+
def testCreateVlenObjRefType(self):
533+
typeItem = {'class': 'H5T_VLEN',
534+
'base': {'class': 'H5T_REFERENCE', 'base': 'H5T_STD_REF_OBJ'} }
535+
dt = hdf5dtype.createDataType(typeItem)
536+
self.assertEqual(dt.name, 'object')
537+
self.assertEqual(dt.kind, 'O')
538+
self.assertTrue(check_dtype(ref=dt) is None)
539+
dt_base = check_dtype(vlen=dt)
540+
self.assertTrue(dt_base is not None)
541+
self.assertTrue(check_dtype(ref=dt_base) is Reference)
542+
499543

500544
def testCreateCompoundArrayType(self):
501545
typeItem = {

0 commit comments

Comments
 (0)