test_h5p.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. # This file is part of h5py, a Python interface to the HDF5 library.
  2. #
  3. # http://www.h5py.org
  4. #
  5. # Copyright 2008-2013 Andrew Collette and contributors
  6. #
  7. # License: Standard 3-clause BSD; see "license.txt" for full license terms
  8. # and contributor agreement.
  9. import unittest as ut
  10. from h5py import h5p, h5f, version
  11. from .common import TestCase
  12. class TestLibver(TestCase):
  13. """
  14. Feature: Setting/getting lib ver bounds
  15. """
  16. def test_libver(self):
  17. """ Test libver bounds set/get """
  18. plist = h5p.create(h5p.FILE_ACCESS)
  19. plist.set_libver_bounds(h5f.LIBVER_EARLIEST, h5f.LIBVER_LATEST)
  20. self.assertEqual((h5f.LIBVER_EARLIEST, h5f.LIBVER_LATEST),
  21. plist.get_libver_bounds())
  22. def test_libver_v18(self):
  23. """ Test libver bounds set/get for H5F_LIBVER_V18"""
  24. plist = h5p.create(h5p.FILE_ACCESS)
  25. plist.set_libver_bounds(h5f.LIBVER_EARLIEST, h5f.LIBVER_V18)
  26. self.assertEqual((h5f.LIBVER_EARLIEST, h5f.LIBVER_V18),
  27. plist.get_libver_bounds())
  28. def test_libver_v110(self):
  29. """ Test libver bounds set/get for H5F_LIBVER_V110"""
  30. plist = h5p.create(h5p.FILE_ACCESS)
  31. plist.set_libver_bounds(h5f.LIBVER_V18, h5f.LIBVER_V110)
  32. self.assertEqual((h5f.LIBVER_V18, h5f.LIBVER_V110),
  33. plist.get_libver_bounds())
  34. @ut.skipIf(version.hdf5_version_tuple < (1, 11, 4),
  35. 'Requires HDF5 1.11.4 or later')
  36. def test_libver_v112(self):
  37. """ Test libver bounds set/get for H5F_LIBVER_V112"""
  38. plist = h5p.create(h5p.FILE_ACCESS)
  39. plist.set_libver_bounds(h5f.LIBVER_V18, h5f.LIBVER_V112)
  40. self.assertEqual((h5f.LIBVER_V18, h5f.LIBVER_V112),
  41. plist.get_libver_bounds())
  42. @ut.skipIf(version.hdf5_version_tuple < (1, 14, 0),
  43. 'Requires HDF5 1.14 or later')
  44. def test_libver_v114(self):
  45. """ Test libver bounds set/get for H5F_LIBVER_V114"""
  46. plist = h5p.create(h5p.FILE_ACCESS)
  47. plist.set_libver_bounds(h5f.LIBVER_V18, h5f.LIBVER_V114)
  48. self.assertEqual((h5f.LIBVER_V18, h5f.LIBVER_V114),
  49. plist.get_libver_bounds())
  50. @ut.skipIf(version.hdf5_version_tuple < (2, 0, 0),
  51. 'Requires HDF5 2.0 or later')
  52. def test_libver_v200(self):
  53. """ Test libver bounds set/get for H5F_LIBVER_V200"""
  54. plist = h5p.create(h5p.FILE_ACCESS)
  55. plist.set_libver_bounds(h5f.LIBVER_V18, h5f.LIBVER_V200)
  56. self.assertEqual((h5f.LIBVER_V18, h5f.LIBVER_V200),
  57. plist.get_libver_bounds())
  58. class TestDA(TestCase):
  59. '''
  60. Feature: setting/getting chunk cache size on a dataset access property list
  61. '''
  62. def test_chunk_cache(self):
  63. '''test get/set chunk cache '''
  64. dalist = h5p.create(h5p.DATASET_ACCESS)
  65. nslots = 10000 # 40kb hash table
  66. nbytes = 1000000 # 1MB cache size
  67. w0 = .5 # even blend of eviction strategy
  68. dalist.set_chunk_cache(nslots, nbytes, w0)
  69. self.assertEqual((nslots, nbytes, w0),
  70. dalist.get_chunk_cache())
  71. def test_efile_prefix(self):
  72. '''test get/set efile prefix '''
  73. dalist = h5p.create(h5p.DATASET_ACCESS)
  74. self.assertEqual(dalist.get_efile_prefix().decode(), '')
  75. efile_prefix = "path/to/external/dataset"
  76. dalist.set_efile_prefix(efile_prefix.encode('utf-8'))
  77. self.assertEqual(dalist.get_efile_prefix().decode(),
  78. efile_prefix)
  79. efile_prefix = "${ORIGIN}"
  80. dalist.set_efile_prefix(efile_prefix.encode('utf-8'))
  81. self.assertEqual(dalist.get_efile_prefix().decode(),
  82. efile_prefix)
  83. def test_virtual_prefix(self):
  84. '''test get/set virtual prefix '''
  85. dalist = h5p.create(h5p.DATASET_ACCESS)
  86. self.assertEqual(dalist.get_virtual_prefix().decode(), '')
  87. virtual_prefix = "path/to/virtual/dataset"
  88. dalist.set_virtual_prefix(virtual_prefix.encode('utf-8'))
  89. self.assertEqual(dalist.get_virtual_prefix().decode(),
  90. virtual_prefix)
  91. class TestFA(TestCase):
  92. '''
  93. Feature: setting/getting mdc config on a file access property list
  94. '''
  95. def test_mdc_config(self):
  96. '''test get/set mdc config '''
  97. falist = h5p.create(h5p.FILE_ACCESS)
  98. config = falist.get_mdc_config()
  99. falist.set_mdc_config(config)
  100. def test_set_alignment(self):
  101. '''test get/set chunk cache '''
  102. falist = h5p.create(h5p.FILE_ACCESS)
  103. threshold = 10 * 1024 # threshold of 10kiB
  104. alignment = 1024 * 1024 # threshold of 1kiB
  105. falist.set_alignment(threshold, alignment)
  106. self.assertEqual((threshold, alignment),
  107. falist.get_alignment())
  108. def test_set_file_locking(self):
  109. '''test get/set file locking'''
  110. falist = h5p.create(h5p.FILE_ACCESS)
  111. use_file_locking = False
  112. ignore_when_disabled = False
  113. falist.set_file_locking(use_file_locking, ignore_when_disabled)
  114. self.assertEqual((use_file_locking, ignore_when_disabled),
  115. falist.get_file_locking())
  116. class TestPL(TestCase):
  117. def test_obj_track_times(self):
  118. """
  119. tests if the object track times set/get
  120. """
  121. # test for groups
  122. gcid = h5p.create(h5p.GROUP_CREATE)
  123. gcid.set_obj_track_times(False)
  124. self.assertEqual(False, gcid.get_obj_track_times())
  125. gcid.set_obj_track_times(True)
  126. self.assertEqual(True, gcid.get_obj_track_times())
  127. # test for datasets
  128. dcid = h5p.create(h5p.DATASET_CREATE)
  129. dcid.set_obj_track_times(False)
  130. self.assertEqual(False, dcid.get_obj_track_times())
  131. dcid.set_obj_track_times(True)
  132. self.assertEqual(True, dcid.get_obj_track_times())
  133. # test for generic objects
  134. ocid = h5p.create(h5p.OBJECT_CREATE)
  135. ocid.set_obj_track_times(False)
  136. self.assertEqual(False, ocid.get_obj_track_times())
  137. ocid.set_obj_track_times(True)
  138. self.assertEqual(True, ocid.get_obj_track_times())
  139. def test_link_creation_tracking(self):
  140. """
  141. tests the link creation order set/get
  142. """
  143. gcid = h5p.create(h5p.GROUP_CREATE)
  144. gcid.set_link_creation_order(0)
  145. self.assertEqual(0, gcid.get_link_creation_order())
  146. flags = h5p.CRT_ORDER_TRACKED | h5p.CRT_ORDER_INDEXED
  147. gcid.set_link_creation_order(flags)
  148. self.assertEqual(flags, gcid.get_link_creation_order())
  149. # test for file creation
  150. fcpl = h5p.create(h5p.FILE_CREATE)
  151. fcpl.set_link_creation_order(flags)
  152. self.assertEqual(flags, fcpl.get_link_creation_order())
  153. def test_attr_phase_change(self):
  154. """
  155. test the attribute phase change
  156. """
  157. cid = h5p.create(h5p.OBJECT_CREATE)
  158. # test default value
  159. ret = cid.get_attr_phase_change()
  160. self.assertEqual((8,6), ret)
  161. # max_compact must < 65536 (64kb)
  162. with self.assertRaises(ValueError):
  163. cid.set_attr_phase_change(65536, 6)
  164. # Using dense attributes storage to avoid 64kb size limitation
  165. # for a single attribute in compact attribute storage.
  166. cid.set_attr_phase_change(0, 0)
  167. self.assertEqual((0,0), cid.get_attr_phase_change())
  168. def test_proplaid():
  169. """Test Link Access Property List"""
  170. lapl = h5p.create(h5p.LINK_ACCESS)
  171. nlinks = 3
  172. lapl.set_nlinks(nlinks)
  173. assert lapl.get_nlinks() == nlinks
  174. prefix = b"/prefix"
  175. lapl.set_elink_prefix(prefix)
  176. assert lapl.get_elink_prefix() == prefix
  177. flags = h5f.ACC_RDWR & h5f.ACC_SWMR_WRITE
  178. lapl.set_elink_acc_flags(flags)
  179. assert lapl.get_elink_acc_flags() == flags
  180. fapl = h5p.create(h5p.FILE_ACCESS)
  181. fapl.set_file_locking(False, False)
  182. lapl.set_elink_fapl(fapl)
  183. assert lapl.get_elink_fapl().get_file_locking() == (False, False)
  184. fapl.close()
  185. lapl.close()