|
15 | 15 | import sys
|
16 | 16 | from h5py import special_dtype
|
17 | 17 | from h5py import check_dtype
|
| 18 | +from h5py import Reference |
| 19 | +from h5py import RegionReference |
18 | 20 | import six
|
19 | 21 |
|
20 | 22 |
|
@@ -121,6 +123,25 @@ def testBaseArrayTypeItem(self):
|
121 | 123 | self.assertEqual(baseItem['base'], 'H5T_STD_I32LE')
|
122 | 124 | self.assertEqual(typeSize, 16)
|
123 | 125 |
|
| 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 | + |
124 | 145 | def testCompoundArrayTypeItem(self):
|
125 | 146 | dt = np.dtype([('a', '<i1'), ('b', 'S1', (10,))])
|
126 | 147 | typeItem = hdf5dtype.getTypeItem(dt)
|
@@ -220,6 +241,17 @@ def testVlenDataItem(self):
|
220 | 241 | self.assertEqual(baseItem['base'], 'H5T_STD_I32LE')
|
221 | 242 | self.assertEqual(typeSize, 'H5T_VARIABLE')
|
222 | 243 |
|
| 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 | + |
223 | 255 | def testCompoundTypeItem(self):
|
224 | 256 | dt = np.dtype([("temp", np.float32), ("pressure", np.float32), ("wind", np.int16)])
|
225 | 257 | typeItem = hdf5dtype.getTypeItem(dt)
|
@@ -495,7 +527,19 @@ def testCreateArrayIntegerType(self):
|
495 | 527 | self.assertTrue(False) # expected exception - dims used with none array type
|
496 | 528 | except TypeError:
|
497 | 529 | 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 | + |
499 | 543 |
|
500 | 544 | def testCreateCompoundArrayType(self):
|
501 | 545 | typeItem = {
|
|
0 commit comments