1#
2# Copyright by The HDF Group.
3# All rights reserved.
4#
5# This file is part of HDF5.  The full HDF5 copyright notice, including
6# terms governing use, modification, and redistribution, is contained in
7# the COPYING file, which can be found at the root of the source code
8# distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases.
9# If you do not have access to either file, you may request a copy from
10# help@hdfgroup.org.
11#
12
13##############################################################################
14##############################################################################
15###           T E S T I N G                                                ###
16##############################################################################
17##############################################################################
18
19  # --------------------------------------------------------------------
20  # Copy all the HDF5 files from the source directory into the test directory
21  # --------------------------------------------------------------------
22  set (LIST_HDF5_TEST_FILES
23      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/bounds_latest_latest.h5
24      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_attr.h5
25      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_attr_refs.h5
26      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_deflate.h5
27      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_early.h5
28      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_ext.h5
29      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_f32le.h5
30      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_f32le_ex-0.dat
31      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_f32le_ex.h5
32      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_fill.h5
33      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_filters.h5
34      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_fletcher.h5
35      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_hlink.h5
36      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_int32le_1d.h5
37      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_int32le_1d_ex-0.dat
38      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_int32le_1d_ex-1.dat
39      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_int32le_1d_ex.h5
40      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_int32le_2d.h5
41      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_int32le_2d_ex-0.dat
42      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_int32le_2d_ex.h5
43      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_int32le_3d.h5
44      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_int32le_3d_ex-0.dat
45      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_int32le_3d_ex.h5
46      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.h5
47      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layouto.h5
48      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout2.h5
49      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout3.h5
50      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.UD.h5
51      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_named_dtypes.h5
52      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_nested_8bit_enum.h5
53      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_nested_8bit_enum_deflated.h5
54      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_nbit.h5
55      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_objs.h5
56      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_refs.h5
57      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_shuffle.h5
58      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_soffset.h5
59      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_szip.h5
60      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_uint8be.h5
61      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_uint8be_ex-0.dat
62      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_uint8be_ex-1.dat
63      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_uint8be_ex-2.dat
64      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_uint8be_ex-3.dat
65      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_uint8be_ex.h5
66      # fsm
67      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_aggr.h5
68      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_fsm_aggr_nopersist.h5
69      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_fsm_aggr_persist.h5
70      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_none.h5
71      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_paged_nopersist.h5
72      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_paged_persist.h5
73      # h5diff/testfile
74      ${HDF5_TOOLS_TEST_H5DIFF_SOURCE_DIR}/testfiles/h5diff_attr1.h5
75      # tools/testfiles
76      ${HDF5_TOOLS_DIR}/testfiles/tfamily00000.h5
77      ${HDF5_TOOLS_DIR}/testfiles/tfamily00001.h5
78      ${HDF5_TOOLS_DIR}/testfiles/tfamily00002.h5
79      ${HDF5_TOOLS_DIR}/testfiles/tfamily00003.h5
80      ${HDF5_TOOLS_DIR}/testfiles/tfamily00004.h5
81      ${HDF5_TOOLS_DIR}/testfiles/tfamily00005.h5
82      ${HDF5_TOOLS_DIR}/testfiles/tfamily00006.h5
83      ${HDF5_TOOLS_DIR}/testfiles/tfamily00007.h5
84      ${HDF5_TOOLS_DIR}/testfiles/tfamily00008.h5
85      ${HDF5_TOOLS_DIR}/testfiles/tfamily00009.h5
86      ${HDF5_TOOLS_DIR}/testfiles/tfamily00010.h5
87      ${HDF5_TOOLS_DIR}/testfiles/tordergr.h5
88      # tools/testfiles/vds
89      ${HDF5_TOOLS_DIR}/testfiles/vds/1_a.h5
90      ${HDF5_TOOLS_DIR}/testfiles/vds/1_b.h5
91      ${HDF5_TOOLS_DIR}/testfiles/vds/1_c.h5
92      ${HDF5_TOOLS_DIR}/testfiles/vds/1_d.h5
93      ${HDF5_TOOLS_DIR}/testfiles/vds/1_e.h5
94      ${HDF5_TOOLS_DIR}/testfiles/vds/1_f.h5
95      ${HDF5_TOOLS_DIR}/testfiles/vds/1_vds.h5
96      ${HDF5_TOOLS_DIR}/testfiles/vds/2_a.h5
97      ${HDF5_TOOLS_DIR}/testfiles/vds/2_b.h5
98      ${HDF5_TOOLS_DIR}/testfiles/vds/2_c.h5
99      ${HDF5_TOOLS_DIR}/testfiles/vds/2_d.h5
100      ${HDF5_TOOLS_DIR}/testfiles/vds/2_e.h5
101      ${HDF5_TOOLS_DIR}/testfiles/vds/2_vds.h5
102      ${HDF5_TOOLS_DIR}/testfiles/vds/3_1_vds.h5
103      ${HDF5_TOOLS_DIR}/testfiles/vds/3_2_vds.h5
104      ${HDF5_TOOLS_DIR}/testfiles/vds/4_0.h5
105      ${HDF5_TOOLS_DIR}/testfiles/vds/4_1.h5
106      ${HDF5_TOOLS_DIR}/testfiles/vds/4_2.h5
107      ${HDF5_TOOLS_DIR}/testfiles/vds/4_vds.h5
108      ${HDF5_TOOLS_DIR}/testfiles/vds/5_a.h5
109      ${HDF5_TOOLS_DIR}/testfiles/vds/5_b.h5
110      ${HDF5_TOOLS_DIR}/testfiles/vds/5_c.h5
111      ${HDF5_TOOLS_DIR}/testfiles/vds/5_vds.h5
112  )
113
114  set (LIST_OTHER_TEST_FILES
115      h5repack-help.txt
116      h5repack_ext.bin
117      h5repack.info
118      ublock.bin
119  )
120
121  set (LIST_TST_TEST_FILES
122      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_filters.h5-gzip_verbose_filters
123      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.h5-dset2_chunk_20x10-errstk
124      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/plugin_test.h5repack_layout.h5
125      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/plugin_version_test.h5repack_layout.h5
126      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/plugin_zero.h5repack_layout.h5
127      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/plugin_none.h5repack_layout.UD.h5
128  )
129
130  set (LIST_DDL_TEST_FILES
131      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/crtorder.tordergr.h5
132      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/deflate_limit.h5repack_layout.h5
133      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.h5
134      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.h5-plugin_test
135      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.h5-plugin_version_test
136      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.h5-plugin_zero
137      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.UD.h5-plugin_none
138      # fsm
139      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/STG.h5repack_none.h5
140      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/SPT.h5repack_aggr.h5
141      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/SP.h5repack_fsm_aggr_nopersist.h5
142      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/S.h5repack_fsm_aggr_persist.h5
143      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/GS.h5repack_paged_nopersist.h5
144      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/SP.h5repack_paged_persist.h5
145      # vds
146      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/1_vds.h5-vds_dset_chunk20x10x5-v
147      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/2_vds.h5-vds_chunk3x6x9-v
148      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/3_1_vds.h5-vds_chunk2x5x8-v
149      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/4_vds.h5-vds_compa-v
150      ${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/4_vds.h5-vds_conti-v
151  )
152
153  foreach (h5_file ${LIST_HDF5_TEST_FILES})
154    get_filename_component(fname "${h5_file}" NAME)
155    HDFTEST_COPY_FILE("${h5_file}" "${PROJECT_BINARY_DIR}/testfiles/${fname}" "h5repack_files")
156  endforeach ()
157
158  foreach (h5_file ${LIST_OTHER_TEST_FILES})
159    HDFTEST_COPY_FILE("${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/${h5_file}" "${PROJECT_BINARY_DIR}/testfiles/${h5_file}" "h5repack_files")
160  endforeach ()
161
162  foreach (h5_file ${LIST_TST_TEST_FILES})
163    get_filename_component(fname "${h5_file}" NAME)
164    HDFTEST_COPY_FILE("${h5_file}.tst" "${PROJECT_BINARY_DIR}/testfiles/${fname}.tst" "h5repack_files")
165  endforeach ()
166
167  foreach (h5_file ${LIST_DDL_TEST_FILES})
168    get_filename_component(fname "${h5_file}" NAME)
169    HDFTEST_COPY_FILE("${h5_file}.ddl" "${PROJECT_BINARY_DIR}/testfiles/${fname}.ddl" "h5repack_files")
170  endforeach ()
171  add_custom_target(h5repack_files ALL COMMENT "Copying files needed by h5repack tests" DEPENDS ${h5repack_files_list})
172
173##############################################################################
174##############################################################################
175###           T H E   T E S T S  M A C R O S                               ###
176##############################################################################
177##############################################################################
178
179  if (NOT BUILD_SHARED_LIBS)
180    set (tgt_ext "")
181  else ()
182    set (tgt_ext "-shared")
183  endif ()
184
185  macro (ADD_HELP_TEST testname resultcode)
186    # If using memchecker add tests without using scripts
187    if (HDF5_ENABLE_USING_MEMCHECKER)
188      add_test (NAME H5REPACK-h5repack-${testname} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack${tgt_ext}> ${ARGN})
189      set_tests_properties (H5REPACK-h5repack-${testname} PROPERTIES
190          WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
191      )
192    else ()
193      add_test (
194          NAME H5REPACK-h5repack-${testname}
195          COMMAND "${CMAKE_COMMAND}"
196              -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
197              -D "TEST_PROGRAM=$<TARGET_FILE:h5repack${tgt_ext}>"
198              -D "TEST_ARGS:STRING=${ARGN}"
199              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
200              -D "TEST_OUTPUT=h5repack-${testname}.out"
201              -D "TEST_EXPECT=${resultcode}"
202              -D "TEST_REFERENCE=h5repack-${testname}.txt"
203              -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
204      )
205    endif ()
206    set_tests_properties (H5REPACK-h5repack-${testname} PROPERTIES
207        FIXTURES_REQUIRED clear_h5repack
208    )
209  endmacro ()
210
211  macro (ADD_H5_TEST_OLD testname testtype testfile)
212    if (NOT HDF5_ENABLE_USING_MEMCHECKER)
213      if ("${testtype}" STREQUAL "SKIP")
214        add_test (
215            NAME H5REPACK_OLD-${testname}
216            COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} -i ${PROJECT_BINARY_DIR}/testfiles/${testfile} -o ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}"
217        )
218        set_property(TEST H5REPACK_OLD-${testname} PROPERTY DISABLED)
219      else ()
220        add_test (
221            NAME H5REPACK_OLD-${testname}-clear-objects
222            COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${testfile}
223        )
224        set_tests_properties (H5REPACK_OLD-${testname}-clear-objects PROPERTIES
225            FIXTURES_REQUIRED clear_h5repack
226        )
227        add_test (
228            NAME H5REPACK_OLD-${testname}
229            COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack${tgt_ext}> ${ARGN} -i ${PROJECT_BINARY_DIR}/testfiles/${testfile} -o ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
230        )
231        set_tests_properties (H5REPACK_OLD-${testname} PROPERTIES
232            DEPENDS H5REPACK_OLD-${testname}-clear-objects
233        )
234        add_test (
235            NAME H5REPACK_OLD-${testname}_DFF
236            COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5diff${tgt_ext}> ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
237        )
238        set_tests_properties (H5REPACK_OLD-${testname}_DFF PROPERTIES
239            DEPENDS H5REPACK_OLD-${testname}
240        )
241      endif ()
242    endif ()
243  endmacro ()
244
245  macro (ADD_H5_TEST testname testtype testfile)
246    if ("${testtype}" STREQUAL "SKIP")
247      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
248        add_test (
249            NAME H5REPACK-${testname}
250            COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}"
251        )
252        set_property(TEST H5REPACK-${testname} PROPERTY DISABLED)
253      endif ()
254    else ()
255      add_test (
256          NAME H5REPACK-${testname}-clear-objects
257          COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${testfile}
258      )
259      set_tests_properties (H5REPACK-${testname}-clear-objects PROPERTIES
260          FIXTURES_REQUIRED clear_h5repack
261      )
262      add_test (
263          NAME H5REPACK-${testname}
264          COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack${tgt_ext}> --enable-error-stack ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
265      )
266      set_tests_properties (H5REPACK-${testname} PROPERTIES
267          DEPENDS H5REPACK-${testname}-clear-objects
268      )
269      add_test (
270          NAME H5REPACK-${testname}_DFF
271          COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5diff${tgt_ext}> --enable-error-stack ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
272      )
273      set_tests_properties (H5REPACK-${testname}_DFF PROPERTIES
274          DEPENDS H5REPACK-${testname}
275      )
276    endif ()
277  endmacro ()
278
279  macro (ADD_H5_CMP_TEST testname testfilter testtype resultcode resultfile)
280    if ("${testtype}" STREQUAL "SKIP")
281      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
282        add_test (
283            NAME H5REPACK_CMP-${testname}
284            COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}"
285        )
286        set_property(TEST H5REPACK_CMP-${testname} PROPERTY DISABLED)
287      endif ()
288    else ()
289      # If using memchecker add tests without using scripts
290      if (HDF5_ENABLE_USING_MEMCHECKER)
291        add_test (
292            NAME H5REPACK_CMP-${testname}
293            COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack${tgt_ext}> ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}
294        )
295      else ()
296        add_test (
297            NAME H5REPACK_CMP-${testname}-clear-objects
298            COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${resultfile}
299        )
300        set_tests_properties (H5REPACK_CMP-${testname}-clear-objects PROPERTIES
301            FIXTURES_REQUIRED clear_h5repack
302        )
303        add_test (
304            NAME H5REPACK_CMP-${testname}
305            COMMAND "${CMAKE_COMMAND}"
306                -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
307                -D "TEST_PROGRAM=$<TARGET_FILE:h5repack${tgt_ext}>"
308                -D "TEST_ARGS:STRING=${ARGN};${resultfile};out-${testname}.${resultfile}"
309                -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
310                -D "TEST_OUTPUT=${resultfile}-${testname}.out"
311                -D "TEST_EXPECT=${resultcode}"
312                -D "TEST_FILTER:STRING=${testfilter}"
313                -D "TEST_REFERENCE=${resultfile}-${testname}.tst"
314                -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
315        )
316        set_tests_properties (H5REPACK_CMP-${testname} PROPERTIES
317            DEPENDS H5REPACK_CMP-${testname}-clear-objects
318        )
319      endif ()
320    endif ()
321  endmacro ()
322
323  macro (ADD_H5_MASK_TEST testname testtype resultcode result_errcheck resultfile)
324    if ("${testtype}" STREQUAL "SKIP")
325      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
326        add_test (
327            NAME H5REPACK_MASK-${testname}
328            COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}"
329        )
330        set_property(TEST H5REPACK_MASK-${testname} PROPERTY DISABLED)
331      endif ()
332    else ()
333      # If using memchecker add tests without using scripts
334      if (HDF5_ENABLE_USING_MEMCHECKER)
335        add_test (
336            NAME H5REPACK_MASK-${testname}
337            COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack${tgt_ext}> ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}
338        )
339        set_tests_properties (H5REPACK_MASK-${testname} PROPERTIES
340            FIXTURES_REQUIRED clear_h5repack
341        )
342      else (HDF5_ENABLE_USING_MEMCHECKER)
343        add_test (
344            NAME H5REPACK_MASK-${testname}-clear-objects
345            COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${resultfile}
346        )
347        set_tests_properties (H5REPACK_MASK-${testname}-clear-objects PROPERTIES DEPENDS ${last_test}
348            FIXTURES_REQUIRED clear_h5repack
349        )
350        add_test (
351            NAME H5REPACK_MASK-${testname}
352            COMMAND "${CMAKE_COMMAND}"
353                -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
354                -D "TEST_PROGRAM=$<TARGET_FILE:h5repack${tgt_ext}>"
355                -D "TEST_ARGS:STRING=${ARGN};${resultfile};out-${testname}.${resultfile}"
356                -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
357                -D "TEST_OUTPUT=${resultfile}-${testname}.out"
358                -D "TEST_EXPECT=${resultcode}"
359                -D "TEST_SKIP_COMPARE=true"
360                -D "TEST_REFERENCE=${resultfile}.mty"
361                -D "TEST_ERRREF=${result_errcheck}"
362                -P "${HDF_RESOURCES_EXT_DIR}/grepTest.cmake"
363        )
364        set_tests_properties (H5REPACK_MASK-${testname} PROPERTIES DEPENDS H5REPACK_MASK-${testname}-clear-objects)
365      endif ()
366    endif ()
367  endmacro ()
368
369  macro (ADD_H5_DMP_TEST testname testtype resultcode resultfile)
370    if ("${testtype}" STREQUAL "SKIP")
371      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
372        add_test (
373            NAME H5REPACK_DMP-${testname}
374            COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}"
375        )
376        set_property(TEST H5REPACK_DMP-${testname} PROPERTY DISABLED)
377      endif ()
378    else ()
379      add_test (
380          NAME H5REPACK_DMP-${testname}-clear-objects
381          COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${resultfile}
382      )
383      set_tests_properties (H5REPACK_DMP-${testname}-clear-objects PROPERTIES
384          FIXTURES_REQUIRED clear_h5repack
385      )
386      add_test (
387          NAME H5REPACK_DMP-${testname}
388          COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack${tgt_ext}> ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}
389      )
390      set_tests_properties (H5REPACK_DMP-${testname} PROPERTIES
391          DEPENDS H5REPACK_DMP-${testname}-clear-objects
392      )
393      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
394        add_test (
395            NAME H5REPACK_DMP-h5dump-${testname}
396            COMMAND "${CMAKE_COMMAND}"
397                -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
398                -D "TEST_PROGRAM=$<TARGET_FILE:h5dump${tgt_ext}>"
399                -D "TEST_ARGS:STRING=-q;creation_order;-pH;out-${testname}.${resultfile}"
400                -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
401                -D "TEST_OUTPUT=${resultfile}-${testname}.out"
402                -D "TEST_EXPECT=${resultcode}"
403                -D "TEST_REFERENCE=${testname}.${resultfile}.ddl"
404                -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
405        )
406        set_tests_properties (H5REPACK_DMP-h5dump-${testname} PROPERTIES
407            DEPENDS "H5REPACK_DMP-${testname}"
408        )
409      endif ()
410    endif ()
411  endmacro ()
412
413  macro (ADD_H5_STAT_TEST testname testtype resultcode statarg resultfile)
414    if ("${testtype}" STREQUAL "SKIP")
415      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
416        add_test (
417            NAME H5REPACK_STAT-${testname}
418            COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${statarg}.${resultfile}"
419        )
420        set_property(TEST H5REPACK_STAT-${testname} PROPERTY DISABLED)
421      endif ()
422    else ()
423      add_test (
424          NAME H5REPACK_STAT-${testname}-clear-objects
425          COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${statarg}.${resultfile}
426      )
427      set_tests_properties (H5REPACK_STAT-${testname}-clear-objects PROPERTIES
428          FIXTURES_REQUIRED clear_h5repack
429      )
430      add_test (
431          NAME H5REPACK_STAT-${testname}
432          COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack${tgt_ext}> ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${statarg}.${resultfile}
433      )
434      set_tests_properties (H5REPACK_STAT-${testname} PROPERTIES
435          DEPENDS H5REPACK_STAT-${testname}-clear-objects
436      )
437      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
438        add_test (
439            NAME H5REPACK_STAT-h5stat-${testname}
440            COMMAND "${CMAKE_COMMAND}"
441                -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
442                -D "TEST_PROGRAM=$<TARGET_FILE:h5stat${tgt_ext}>"
443                -D "TEST_ARGS:STRING=-S;-s;out-${statarg}.${resultfile}"
444                -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
445                -D "TEST_OUTPUT=${resultfile}-${testname}.out"
446                -D "TEST_EXPECT=${resultcode}"
447                -D "TEST_REFERENCE=${statarg}.${resultfile}.ddl"
448                -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
449        )
450        set_tests_properties (H5REPACK_STAT-h5stat-${testname} PROPERTIES
451            DEPENDS "H5REPACK_STAT-${testname}"
452        )
453      endif ()
454    endif ()
455  endmacro ()
456
457  macro (ADD_H5_VERIFY_TEST testname testtype resultcode testfile testdset testfilter)
458    if ("${testtype}" STREQUAL "SKIP")
459      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
460        add_test (
461            NAME H5REPACK_VERIFY_LAYOUT-${testname}
462            COMMAND ${CMAKE_COMMAND} -E echo "SKIP -d ${testdset} -pH ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}"
463        )
464        set_property(TEST H5REPACK_VERIFY_LAYOUT-${testname} PROPERTY DISABLED)
465      endif ()
466    else ()
467      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
468        add_test (
469            NAME H5REPACK_VERIFY_LAYOUT-${testname}-clear-objects
470            COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${testfile}
471        )
472        set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname}-clear-objects PROPERTIES
473            FIXTURES_REQUIRED clear_h5repack
474        )
475        add_test (
476            NAME H5REPACK_VERIFY_LAYOUT-${testname}
477            COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack${tgt_ext}> ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
478        )
479        set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname} PROPERTIES
480            DEPENDS H5REPACK_VERIFY_LAYOUT-${testname}-clear-objects
481        )
482        add_test (
483            NAME H5REPACK_VERIFY_LAYOUT-${testname}_DFF
484            COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5diff${tgt_ext}> ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
485        )
486        set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname}_DFF PROPERTIES
487            DEPENDS H5REPACK_VERIFY_LAYOUT-${testname}
488        )
489        if (NOT ${resultcode})
490          add_test (
491              NAME H5REPACK_VERIFY_LAYOUT-${testname}_DMP
492              COMMAND "${CMAKE_COMMAND}"
493                  -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
494                  -D "TEST_PROGRAM=$<TARGET_FILE:h5dump${tgt_ext}>"
495                  -D "TEST_ARGS:STRING=-d;${testdset};-pH;out-${testname}.${testfile}"
496                  -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
497                  -D "TEST_OUTPUT=${testfile}-${testname}-v.out"
498                  -D "TEST_EXPECT=${resultcode}"
499                  -D "TEST_FILTER:STRING=${testfilter}"
500                  -D "TEST_REFERENCE=${testfilter}"
501                  -P "${HDF_RESOURCES_EXT_DIR}/grepTest.cmake"
502          )
503          set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname}_DMP PROPERTIES
504              DEPENDS H5REPACK_VERIFY_LAYOUT-${testname}_DFF
505          )
506        else ()
507          if ("${testfilter}" STREQUAL "CHUNKED")
508            set (nottestfilter "(CONTIGUOUS|COMPACT)")
509          endif ()
510          if ("${testfilter}" STREQUAL "CONTIGUOUS")
511            set (nottestfilter "(CHUNK|COMPACT)")
512          endif ()
513          if ("${testfilter}" STREQUAL "COMPACT")
514            set (nottestfilter "(CONTIGUOUS|CHUNK)")
515          endif ()
516          add_test (
517              NAME H5REPACK_VERIFY_LAYOUT-${testname}_DMP
518              COMMAND "${CMAKE_COMMAND}"
519                  -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
520                  -D "TEST_PROGRAM=$<TARGET_FILE:h5dump${tgt_ext}>"
521                  -D "TEST_ARGS:STRING=-pH;out-${testname}.${testfile}"
522                  -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
523                  -D "TEST_OUTPUT=${testfile}-${testname}-v.out"
524                  -D "TEST_EXPECT=${resultcode}"
525                  -D "TEST_FILTER:STRING=${nottestfilter}"
526                  -D "TEST_REFERENCE=${testfilter}"
527                  -P "${HDF_RESOURCES_EXT_DIR}/grepTest.cmake"
528          )
529          set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname}_DMP PROPERTIES
530              DEPENDS H5REPACK_VERIFY_LAYOUT-${testname}_DFF
531          )
532        endif ()
533      endif ()
534    endif ()
535  endmacro ()
536
537  macro (ADD_H5_VERIFY_VDS testname testtype resultcode testfile testdset testfilter)
538    if ("${testtype}" STREQUAL "SKIP")
539      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
540        add_test (
541            NAME H5REPACK_VERIFY_LAYOUT_VDS-${testname}
542            COMMAND ${CMAKE_COMMAND} -E echo "SKIP -d ${testdset} -pH ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}"
543        )
544        set_property(TEST H5REPACK_VERIFY_LAYOUT_VDS-${testname} PROPERTY DISABLED)
545      endif ()
546    else ()
547      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
548        # Remove any output file left over from previous test run
549        add_test (
550            NAME H5REPACK_VERIFY_LAYOUT_VDS-${testname}-clear-objects
551            COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${testfile}
552        )
553        set_tests_properties (H5REPACK_VERIFY_LAYOUT_VDS-${testname}-clear-objects PROPERTIES
554            FIXTURES_REQUIRED clear_h5repack
555        )
556        add_test (
557            NAME H5REPACK_VERIFY_LAYOUT_VDS-${testname}
558            COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack${tgt_ext}> ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
559        )
560        set_tests_properties (H5REPACK_VERIFY_LAYOUT_VDS-${testname} PROPERTIES
561            WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
562            DEPENDS H5REPACK_VERIFY_LAYOUT_VDS-${testname}-clear-objects
563        )
564        add_test (
565            NAME H5REPACK_VERIFY_LAYOUT_VDS-${testname}_DMP
566            COMMAND "${CMAKE_COMMAND}"
567                -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
568                -D "TEST_PROGRAM=$<TARGET_FILE:h5dump${tgt_ext}>"
569                -D "TEST_ARGS:STRING=-d;${testdset};-p;out-${testname}.${testfile}"
570                -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
571                -D "TEST_OUTPUT=${testfile}-${testname}-v.out"
572                -D "TEST_EXPECT=${resultcode}"
573                -D "TEST_REFERENCE=${testfile}-${testname}-v.ddl"
574                -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
575        )
576        set_tests_properties (H5REPACK_VERIFY_LAYOUT_VDS-${testname}_DMP PROPERTIES
577            WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
578            DEPENDS H5REPACK_VERIFY_LAYOUT_VDS-${testname}
579        )
580      endif ()
581    endif ()
582  endmacro ()
583
584# VERIFY_SUPERBLOCK
585  macro (ADD_H5_VERIFY_SUPERBLOCK testname testfile lowbound highbound superblock)
586    if (NOT HDF5_ENABLE_USING_MEMCHECKER)
587      add_test (
588          NAME H5REPACK_VERIFY_SUPERBLOCK-${testname}-clear-objects
589          COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${testfile}
590      )
591      set_tests_properties (H5REPACK_VERIFY_SUPERBLOCK-${testname}-clear-objects PROPERTIES
592          FIXTURES_REQUIRED clear_h5repack
593      )
594      add_test (
595          NAME H5REPACK_VERIFY_SUPERBLOCK-${testname}
596          COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack${tgt_ext}> -j;${lowbound};-k;${highbound} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
597      )
598      set_tests_properties (H5REPACK_VERIFY_SUPERBLOCK-${testname} PROPERTIES
599          DEPENDS H5REPACK_VERIFY_SUPERBLOCK-${testname}-clear-objects
600      )
601      add_test (
602          NAME H5REPACK_VERIFY_SUPERBLOCK-${testname}_DMP
603          COMMAND "${CMAKE_COMMAND}"
604              -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
605              -D "TEST_PROGRAM=$<TARGET_FILE:h5dump${tgt_ext}>"
606              -D "TEST_ARGS:STRING=-H;-B;out-${testname}.${testfile}"
607              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
608              -D "TEST_OUTPUT=${testfile}-${testname}-v.out"
609              -D "TEST_EXPECT=${resultcode}"
610              -D "TEST_FILTER:STRING=SUPERBLOCK_VERSION ${superblock}"
611              -D "TEST_REFERENCE=SUPERBLOCK_VERSION ${superblock}"
612              -P "${HDF_RESOURCES_EXT_DIR}/grepTest.cmake"
613      )
614      set_tests_properties (H5REPACK_VERIFY_SUPERBLOCK-${testname}_DMP PROPERTIES
615          DEPENDS H5REPACK_VERIFY_SUPERBLOCK-${testname}
616      )
617    endif ()
618  endmacro ()
619
620  macro (ADD_H5_VERIFY_INVALIDBOUNDS testname resultcode lowbound highbound)
621      add_test (
622          NAME ADD_H5_VERIFY_INVALIDBOUNDS-h5repack-${testname}-clear-objects
623          COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${testfile}
624      )
625      set_tests_properties (ADD_H5_VERIFY_INVALIDBOUNDS-h5repack-${testname}-clear-objects PROPERTIES
626          FIXTURES_REQUIRED clear_h5repack
627      )
628      add_test (
629          NAME ADD_H5_VERIFY_INVALIDBOUNDS-h5repack-${testname}
630          COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack${tgt_ext}> -j;${lowbound};-k;${highbound} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
631      )
632      set_tests_properties (ADD_H5_VERIFY_INVALIDBOUNDS-h5repack-${testname} PROPERTIES
633          DEPENDS ADD_H5_VERIFY_INVALIDBOUNDS-h5repack-${testname}-clear-objects
634          WILL_FAIL "true"
635      )
636  endmacro ()
637
638  macro (ADD_H5_TEST_META testname testfile)
639      # Remove any output file left over from previous test run
640      add_test (
641          NAME H5REPACK_META-${testname}_N-clear-objects
642          COMMAND ${CMAKE_COMMAND} -E remove
643              testfiles/out-${testname}_N.${testname}.h5
644              testfiles/out-${testname}_M.${testname}.h5
645      )
646      set_tests_properties (H5REPACK_META-${testname}_N-clear-objects PROPERTIES
647          FIXTURES_REQUIRED clear_h5repack
648      )
649      add_test (
650          NAME H5REPACK_META-${testname}_N
651          COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack${tgt_ext}> ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}_N.${testname}.h5
652      )
653      set_tests_properties (H5REPACK_META-${testname}_N PROPERTIES
654          DEPENDS H5REPACK_META-${testname}_N-clear-objects
655      )
656      add_test (
657          NAME H5REPACK_META-${testname}_M
658          COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack${tgt_ext}> ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}_M.${testname}.h5
659      )
660      set_tests_properties (H5REPACK_META-${testname}_M PROPERTIES
661          DEPENDS H5REPACK_META-${testname}_N
662      )
663
664      add_test (NAME H5REPACK_META-${testname} COMMAND ${CMAKE_COMMAND} -E compare_files ${PROJECT_BINARY_DIR}/testfiles/out-${testname}_N.${testname}.h5 ${PROJECT_BINARY_DIR}/testfiles/out-${testname}_M.${testname}.h5)
665      set_tests_properties (H5REPACK_META-${testname} PROPERTIES
666          WILL_FAIL "true"
667          DEPENDS H5REPACK_META-${testname}_M
668      )
669  endmacro ()
670
671  macro (ADD_H5_UD_TEST testname resultcode resultfile)
672    if (NOT HDF5_ENABLE_USING_MEMCHECKER)
673      # Remove any output file left over from previous test run
674      add_test (
675          NAME H5REPACK_UD-${testname}-clear-objects
676          COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${resultfile}
677      )
678      set_tests_properties (H5REPACK_UD-${testname}-clear-objects PROPERTIES
679          FIXTURES_REQUIRED clear_h5repack
680      )
681      add_test (
682          NAME H5REPACK_UD-${testname}
683          COMMAND "${CMAKE_COMMAND}"
684              -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
685              -D "TEST_PROGRAM=$<TARGET_FILE:h5repack-shared>"
686              -D "TEST_ARGS:STRING=${ARGN};${resultfile};out-${testname}.${resultfile}"
687              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
688              -D "TEST_EXPECT=${resultcode}"
689              -D "TEST_FILTER:STRING=O?...ing file[^\n]+\n"
690              -D "TEST_OUTPUT=${testname}.${resultfile}.out"
691              -D "TEST_REFERENCE=${testname}.${resultfile}.tst"
692              -D "TEST_ENV_VAR=HDF5_PLUGIN_PATH"
693              -D "TEST_ENV_VALUE=${CMAKE_BINARY_DIR}/plugins"
694              -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}"
695              -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
696      )
697      set_tests_properties (H5REPACK_UD-${testname} PROPERTIES
698          DEPENDS H5REPACK_UD-${testname}-clear-objects
699      )
700      add_test (
701          NAME H5REPACK_UD-${testname}-h5dump
702          COMMAND "${CMAKE_COMMAND}"
703              -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
704              -D "TEST_PROGRAM=$<TARGET_FILE:h5dump-shared>"
705              -D "TEST_ARGS:STRING=-pH;out-${testname}.${resultfile}"
706              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
707              -D "TEST_OUTPUT=${resultfile}-${testname}.out"
708              -D "TEST_EXPECT=0"
709              -D "TEST_REFERENCE=${resultfile}-${testname}.ddl"
710              -D "TEST_ENV_VAR=HDF5_PLUGIN_PATH"
711              -D "TEST_ENV_VALUE=${CMAKE_BINARY_DIR}/plugins"
712              -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}"
713              -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
714      )
715      set_tests_properties (H5REPACK_UD-${testname}-h5dump PROPERTIES
716          DEPENDS "H5REPACK_UD-${testname}"
717      )
718    endif ()
719  endmacro ()
720
721  macro (ADD_H5_EXTERNAL_TEST testname testtype testfile)
722    # canonical file = h5repack_${testfile}.h5 - preexist
723    # external file = h5repack_${testfile}_ex.h5 - preexist
724    # repacked file = h5repack_${testfile}_rp.h5 - created
725    # external data file = h5repack_${testfile}_ex-0.dat
726    if ("${testtype}" STREQUAL "SKIP")
727      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
728        add_test (
729            NAME H5REPACK_EXTERNAL-${testname}
730            COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}"
731        )
732        set_property(TEST H5REPACK_EXTERNAL-${testname} PROPERTY DISABLED)
733      endif ()
734    else ()
735      add_test (
736          NAME H5REPACK_EXTERNAL-${testname}-clear-objects
737          COMMAND ${CMAKE_COMMAND} -E remove h5repack_${testfile}_rp.h5
738      )
739      set_tests_properties (H5REPACK_EXTERNAL-${testname}-clear-objects PROPERTIES
740          WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
741          FIXTURES_REQUIRED clear_h5repack
742      )
743      # make sure external data file 0 is available
744      add_test (
745          NAME H5REPACK_EXTERNAL-${testname}_CPY
746          COMMAND ${CMAKE_COMMAND} -E copy_if_different
747              "${PROJECT_SOURCE_DIR}/testfiles/h5repack_${testfile}_ex-0.dat" "${PROJECT_BINARY_DIR}/testfiles/h5repack_${testfile}_ex-0.dat"
748      )
749      set_tests_properties (H5REPACK_EXTERNAL-${testname}_CPY PROPERTIES
750          WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
751          DEPENDS H5REPACK_EXTERNAL-${testname}-clear-objects
752      )
753      # comparison of known files
754      add_test (
755          NAME H5REPACK_EXTERNAL-${testname}_DFF1
756          COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5diff${tgt_ext}> --enable-error-stack ${PROJECT_BINARY_DIR}/testfiles/h5repack_${testfile}.h5 ${PROJECT_BINARY_DIR}/testfiles/h5repack_${testfile}_ex.h5
757      )
758      set_tests_properties (H5REPACK_EXTERNAL-${testname}_DFF1 PROPERTIES
759          WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
760          DEPENDS H5REPACK_EXTERNAL-${testname}_CPY
761      )
762      # repack the external file to the repacked file
763      add_test (
764          NAME H5REPACK_EXTERNAL-${testname}
765          COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack${tgt_ext}> --enable-error-stack ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/h5repack_${testfile}_ex.h5 ${PROJECT_BINARY_DIR}/testfiles/h5repack_${testfile}_rp.h5
766      )
767      set_tests_properties (H5REPACK_EXTERNAL-${testname} PROPERTIES
768          WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
769          DEPENDS H5REPACK_EXTERNAL-${testname}_DFF1
770      )
771      # comparison of repacked file to known files
772      add_test (
773          NAME H5REPACK_EXTERNAL-${testname}_DFF2
774          COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5diff${tgt_ext}> --enable-error-stack ${PROJECT_BINARY_DIR}/testfiles/h5repack_${testfile}_rp.h5 ${PROJECT_BINARY_DIR}/testfiles/h5repack_${testfile}.h5
775      )
776      set_tests_properties (H5REPACK_EXTERNAL-${testname}_DFF2 PROPERTIES
777          WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
778          DEPENDS H5REPACK_EXTERNAL-${testname}
779      )
780      add_test (
781          NAME H5REPACK_EXTERNAL-${testname}_DFF3
782          COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5diff${tgt_ext}> --enable-error-stack ${PROJECT_BINARY_DIR}/testfiles/h5repack_${testfile}_rp.h5 ${PROJECT_BINARY_DIR}/testfiles/h5repack_${testfile}_ex.h5
783      )
784      set_tests_properties (H5REPACK_EXTERNAL-${testname}_DFF3 PROPERTIES
785          WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
786          DEPENDS H5REPACK_EXTERNAL-${testname}_DFF2
787      )
788      # invalidate external file by removing its first data file
789      add_test (
790          NAME H5REPACK_EXTERNAL-${testname}_DATA_RMV
791          COMMAND ${CMAKE_COMMAND} -E remove h5repack_${testfile}_ex-0.dat
792      )
793      set_tests_properties (H5REPACK_EXTERNAL-${testname}_DATA_RMV PROPERTIES
794          WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
795          DEPENDS H5REPACK_EXTERNAL-${testname}_DFF3
796      )
797      # verify comparison of repacked file to known file
798      add_test (
799          NAME H5REPACK_EXTERNAL-${testname}_DFF4
800          COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5diff${tgt_ext}> --enable-error-stack ${PROJECT_BINARY_DIR}/testfiles/h5repack_${testfile}_rp.h5 ${PROJECT_BINARY_DIR}/testfiles/h5repack_${testfile}.h5
801      )
802      set_tests_properties (H5REPACK_EXTERNAL-${testname}_DFF4 PROPERTIES
803          WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
804          DEPENDS H5REPACK_EXTERNAL-${testname}_DATA_RMV
805      )
806      # verify comparison of repacked file to known external file fails
807      add_test (
808          NAME H5REPACK_EXTERNAL-${testname}_DFF_FAIL
809          COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5diff${tgt_ext}> --enable-error-stack ${PROJECT_BINARY_DIR}/testfiles/h5repack_${testfile}_rp.h5 ${PROJECT_BINARY_DIR}/testfiles/h5repack_${testfile}_ex.h5
810      )
811      set_tests_properties (H5REPACK_EXTERNAL-${testname}_DFF_FAIL PROPERTIES
812          WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
813          DEPENDS H5REPACK_EXTERNAL-${testname}_DFF4
814          WILL_FAIL "true"
815      )
816    endif ()
817  endmacro ()
818
819##############################################################################
820##############################################################################
821###           T H E   T E S T S                                            ###
822##############################################################################
823##############################################################################
824
825  # --------------------------------------------------------------------
826  # test file names
827  # --------------------------------------------------------------------
828  set (INFO_FILE testfiles/h5repack.info)
829
830  set (FILE0 h5repack_fill.h5)
831  set (FILE1 h5repack_objs.h5)
832  set (FILE2 h5repack_attr.h5)
833  set (FILE3 h5repack_hlink.h5)
834  set (FILE4 h5repack_layout.h5)
835  set (FILE5 h5repack_early.h5)
836  set (FILE7 h5repack_szip.h5)
837  set (FILE8 h5repack_deflate.h5)
838  set (FILE9 h5repack_shuffle.h5)
839  set (FILE10 h5repack_fletcher.h5)
840  set (FILE11 h5repack_filters.h5)
841  set (FILE12 h5repack_nbit.h5)
842  set (FILE13 h5repack_soffset.h5)
843  set (FILE14 h5repack_layouto.h5 )     # A file with an older version of the layout message (copy of test/tlayouto.h5)
844  set (FILE15 h5repack_named_dtypes.h5)
845  set (FILE16 tfamily%05d.h5)           # located in common testfiles folder
846  set (FILE18 h5repack_layout2.h5)
847  set (FILE19 h5repack_layout3.h5)
848  set (FILE_REF h5repack_refs.h5)
849  set (FILE_ATTR_REF h5repack_attr_refs.h5)
850  set (FILEV1 1_vds.h5)
851  set (FILEV2 2_vds.h5)
852  set (FILEV3_1 3_1_vds.h5)
853  set (FILEV3_2 3_2_vds.h5)
854  set (FILEV4 4_vds.h5)
855  set (FILEV5 5_vds.h5)
856
857  if (HDF5_ENABLE_USING_MEMCHECKER)
858    # Remove any output file left over from previous test run
859    set (LIST_TO_CLEAR
860        out-family.tfamily%05d.h5
861        out-HDFFV-7840.h5diff_attr1.h5
862        out-attr.h5repack_attr.h5
863        out-native_attr.h5repack_attr.h5
864        out-HDFFV-5932.h5repack_attr_refs.h5
865        out-deflate_copy.h5repack_deflate.h5
866        out-deflate_remove.h5repack_deflate.h5
867        out-early.h5repack_early.h5
868        out-fill.h5repack_fill.h5
869        out-native_fill.h5repack_fill.h5
870        out-gzip_verbose_filters.h5repack_filters.h5
871        out-fletcher_copy.h5repack_fletcher.h5
872        out-fletcher_remove.h5repack_fletcher.h5
873        out-hlink.h5repack_hlink.h5
874        out-chunk_18x13.h5repack_layout.h5
875        out-chunk_20x10.h5repack_layout.h5
876        out-chunk_compa.h5repack_layout.h5
877        out-chunk_conti.h5repack_layout.h5
878        out-compa.h5repack_layout.h5
879        out-conti.h5repack_layout.h5
880        out-deflate_file.h5repack_layout.h5
881        out-deflate_limit.h5repack_layout.h5
882        out-dset2_chunk_20x10.h5repack_layout.h5
883        out-dset2_compa.h5repack_layout.h5
884        out-dset2_conti.h5repack_layout.h5
885        out-dset_compa_chunk.h5repack_layout.h5
886        out-dset_compa_compa.h5repack_layout.h5
887        out-dset_compa_conti.h5repack_layout.h5
888        out-dset_conti_chunk.h5repack_layout.h5
889        out-dset_conti_compa.h5repack_layout.h5
890        out-dset_conti_conti.h5repack_layout.h5
891        out-fletcher_all.h5repack_layout.h5
892        out-fletcher_individual.h5repack_layout.h5
893        out-global_filters.h5repack_layout.h5
894        out-gzip_all.h5repack_layout.h5
895        out-gzip_individual.h5repack_layout.h5
896        out-layout.h5repack_layout.h5
897        out-layout_long_switches.h5repack_layout.h5
898        out-layout_short_switches.h5repack_layout.h5
899        out-old_style_layout_short_switches.h5repack_layout.h5
900        out-plugin_test.h5repack_layout.h5
901        out-shuffle_all.h5repack_layout.h5
902        out-shuffle_individual.h5repack_layout.h5
903        out-upgrade_layout.h5repack_layouto.h5
904        out-contig_small_compa.h5repack_layout2.h5
905        out-contig_small_fixed_compa.h5repack_layout2.h5
906        out-ckdim_biger.h5repack_layout3.h5
907        out-ckdim_smaller.h5repack_layout3.h5
908        out-chunk2chunk.h5repack_layout3.h5
909        out-chunk2compa.h5repack_layout3.h5
910        out-chunk2conti.h5repack_layout3.h5
911        out-error1.h5repack_layout3.h5
912        out-error2.h5repack_layout3.h5
913        out-error3.h5repack_layout3.h5
914        out-error4.h5repack_layout3.h5
915        out-committed_dt.h5repack_named_dtypes.h5
916        out-nbit_add.h5repack_nbit.h5
917        out-nbit_copy.h5repack_nbit.h5
918        out-nbit_remove.h5repack_nbit.h5
919        out-add_alignment.h5repack_objs.h5
920        out-add_userblock.h5repack_objs.h5
921        out-objs.h5repack_objs.h5
922        out-gt_mallocsize.h5repack_objs.h5
923        out-bug1814.h5repack_refs.h5
924        out-shuffle_copy.h5repack_shuffle.h5
925        out-shuffle_remove.h5repack_shuffle.h5
926        out-scale_add.h5repack_soffset.h5
927        out-scale_copy.h5repack_soffset.h5
928        out-scale_remove.h5repack_soffset.h5
929        out-meta_short_M.meta_short.h5
930        out-meta_short_N.meta_short.h5
931        out-meta_long_M.meta_long.h5
932        out-meta_long_N.meta_long.h5
933        out-vds_compa.4_vds.h5
934        out-vds_conti.4_vds.h5
935        out-vds_chunk2x5x8.3_1_vds.h5
936        out-vds_chunk3x6x9.2_vds.h5
937        out-vds_dset_chunk20x10x5.1_vds.h5
938    )
939
940    set (LIST_TO_CLEAR ${LIST_TO_CLEAR} ${LIST_OTHER_TEST_FILES})
941
942    foreach (h5_file ${LIST_HDF5_TEST_FILES})
943      get_filename_component(fname "${h5_file}" NAME)
944      set (LIST_TO_CLEAR ${LIST_TO_CLEAR}
945           ${h5_file}.h5
946      )
947    endforeach ()
948
949    foreach (h5_file ${LIST_TST_TEST_FILES})
950      get_filename_component(fname "${h5_file}" NAME)
951      set (LIST_TO_CLEAR ${LIST_TO_CLEAR}
952           ${h5_file}.tst.out
953           ${h5_file}.tst.out.err
954      )
955    endforeach ()
956
957    foreach (h5_file ${LIST_DDL_TEST_FILES})
958      get_filename_component(fname "${h5_file}" NAME)
959      set (LIST_TO_CLEAR ${LIST_TO_CLEAR}
960           ${h5_file}.ddl.out
961           ${h5_file}.ddl.out.err
962      )
963    endforeach ()
964    add_test (
965        NAME H5REPACK-clearall-objects
966        COMMAND ${CMAKE_COMMAND} -E remove ${LIST_TO_CLEAR}
967    )
968    set_tests_properties (H5REPACK-clearall-objects PROPERTIES
969        FIXTURES_SETUP clear_h5repack
970        WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
971    )
972  endif ()
973
974  ADD_HELP_TEST(help 0 -h)
975
976  add_test (NAME H5REPACK-testh5repack_detect_szip COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:testh5repack_detect_szip>)
977  if (HDF5_ENABLE_SZIP_SUPPORT)
978    if (HDF5_ENABLE_SZIP_ENCODING)
979      set (passRegex "yes")
980      set_tests_properties (H5REPACK-testh5repack_detect_szip PROPERTIES PASS_REGULAR_EXPRESSION "yes")
981    else ()
982      set (passRegex "no")
983      set_tests_properties (H5REPACK-testh5repack_detect_szip PROPERTIES PASS_REGULAR_EXPRESSION "no")
984    endif ()
985  else ()
986    set (passRegex "no")
987    set_tests_properties (H5REPACK-testh5repack_detect_szip PROPERTIES PASS_REGULAR_EXPRESSION "no")
988  endif ()
989  set_tests_properties (H5REPACK-testh5repack_detect_szip PROPERTIES DEPENDS H5REPACK-clearall-objects)
990  set (last_test "H5REPACK-testh5repack_detect_szip")
991
992#  add_test (NAME H5REPACK-h5repacktest COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repacktest>)
993#  set_tests_properties (H5REPACK-h5repacktest PROPERTIES DEPENDS H5REPACK-testh5repack_detect_szip)
994#  set (last_test "H5REPACK-h5repacktest")
995#
996# The tests
997# We use the files generated by h5repacktst
998# Each run generates "<file>.out.h5" and the tool h5diff is used to
999# compare the input and output files
1000#
1001# the tests are the same as the program h5repacktst, but run from the CLI
1002#
1003
1004# See which filters are usable (and skip tests for filters we
1005# don't have).  Do this by searching H5pubconf.h to see which
1006# filters are defined.
1007
1008# detect whether the encoder is present.
1009#  set (USE_FILTER_SZIP_ENCODER 0)
1010  if (HDF5_ENABLE_SZIP_ENCODING)
1011    set (USE_FILTER_SZIP_ENCODER ${testh5repack_detect_szip})
1012  endif ()
1013
1014  if (H5_HAVE_FILTER_DEFLATE)
1015    set (USE_FILTER_DEFLATE 1)
1016  endif ()
1017
1018  if (H5_HAVE_FILTER_SZIP)
1019    set (USE_FILTER_SZIP 1)
1020  endif ()
1021
1022# copy files (these files have no filters)
1023  ADD_H5_TEST (fill "TEST" ${FILE0})
1024  ADD_H5_TEST (objs "TEST" ${FILE1})
1025  ADD_H5_TEST (attr "TEST" ${FILE2})
1026  ADD_H5_TEST (hlink "TEST" ${FILE3})
1027  ADD_H5_TEST (layout "TEST" ${FILE4})
1028  ADD_H5_TEST (early "TEST" ${FILE5})
1029
1030# nested 8bit enum in both deflated and non-deflated datafiles
1031  if (NOT USE_FILTER_DEFLATE)
1032    ADD_H5_TEST (nested_8bit_enum "TEST" h5repack_nested_8bit_enum.h5)
1033  else ()
1034    ADD_H5_TEST (nested_8bit_enum "TEST" h5repack_nested_8bit_enum_deflated.h5)
1035  endif ()
1036
1037# use $FILE4 to write some filters  (this file has  no filters)
1038
1039# gzip with individual object
1040  set (arg ${FILE4} -f dset1:GZIP=1  -l dset1:CHUNK=20x10)
1041  set (TESTTYPE "TEST")
1042  if (NOT USE_FILTER_DEFLATE)
1043    set (TESTTYPE "SKIP")
1044  endif ()
1045  ADD_H5_TEST (gzip_individual ${TESTTYPE} ${arg})
1046
1047# gzip for all
1048  set (arg ${FILE4} -f GZIP=1)
1049  set (TESTTYPE "TEST")
1050  if (NOT USE_FILTER_DEFLATE)
1051    set (TESTTYPE "SKIP")
1052  endif ()
1053  ADD_H5_TEST (gzip_all ${TESTTYPE} ${arg})
1054
1055# szip with individual object
1056  set (arg ${FILE4} -f dset2:SZIP=8,EC  -l dset2:CHUNK=20x10)
1057  set (TESTTYPE "TEST")
1058  if (NOT USE_FILTER_SZIP_ENCODER)
1059    if (NOT USE_FILTER_SZIP)
1060      set (TESTTYPE "SKIP")
1061    endif ()
1062  endif ()
1063  ADD_H5_TEST (szip_individual ${TESTTYPE} ${arg})
1064
1065# szip for all
1066  set (arg ${FILE4} -f SZIP=8,NN)
1067  set (TESTTYPE "TEST")
1068  if (NOT USE_FILTER_SZIP_ENCODER)
1069    if (NOT USE_FILTER_SZIP)
1070      set (TESTTYPE "SKIP")
1071    endif ()
1072  endif ()
1073  ADD_H5_TEST (szip_all ${TESTTYPE} ${arg})
1074
1075# shuffle with individual object
1076  set (arg ${FILE4} -f dset2:SHUF  -l dset2:CHUNK=20x10)
1077  ADD_H5_TEST (shuffle_individual "TEST" ${arg})
1078
1079# shuffle for all
1080  set (arg ${FILE4} -f SHUF)
1081  ADD_H5_TEST (shuffle_all "TEST" ${arg})
1082
1083# fletcher32  with individual object
1084  set (arg ${FILE4} -f dset2:FLET  -l dset2:CHUNK=20x10)
1085  ADD_H5_TEST (fletcher_individual "TEST" ${arg})
1086
1087# fletcher32 for all
1088  set (arg ${FILE4} -f FLET)
1089  ADD_H5_TEST (fletcher_all "TEST" ${arg})
1090
1091# all filters
1092  set (arg ${FILE4} -f dset2:SHUF -f dset2:FLET -f dset2:SZIP=8,NN -f dset2:GZIP=1 -l dset2:CHUNK=20x10)
1093  set (TESTTYPE "TEST")
1094  if (NOT USE_FILTER_SZIP_ENCODER)
1095    if (NOT USE_FILTER_SZIP OR NOT USE_FILTER_DEFLATE)
1096      set (TESTTYPE "SKIP")
1097    endif ()
1098  endif ()
1099  ADD_H5_TEST (all_filters ${TESTTYPE} ${arg})
1100
1101# verbose gzip with individual object
1102  set (arg ${FILE11} -v -f /dset_deflate:GZIP=9)
1103  set (TESTTYPE "TEST")
1104  if (NOT USE_FILTER_DEFLATE)
1105    set (TESTTYPE "SKIP")
1106  endif ()
1107  ADD_H5_CMP_TEST (gzip_verbose_filters "O?...ing file[^\n]+\n" ${TESTTYPE} 0 ${arg})
1108
1109###########################################################
1110# the following tests assume the input files have filters
1111###########################################################
1112
1113# szip copy
1114  set (arg ${FILE7})
1115  set (TESTTYPE "TEST")
1116  if (NOT USE_FILTER_SZIP_ENCODER)
1117    if (NOT USE_FILTER_SZIP)
1118      set (TESTTYPE "SKIP")
1119    endif ()
1120  endif ()
1121  ADD_H5_TEST (szip_copy ${TESTTYPE} ${arg})
1122
1123# szip remove
1124  set (arg ${FILE7} --filter=dset_szip:NONE)
1125  set (TESTTYPE "TEST")
1126  if (NOT USE_FILTER_SZIP_ENCODER)
1127    if (NOT USE_FILTER_SZIP)
1128      set (TESTTYPE "SKIP")
1129    endif ()
1130  endif ()
1131  ADD_H5_TEST (szip_remove ${TESTTYPE} ${arg})
1132
1133# deflate copy
1134  set (arg ${FILE8})
1135  set (TESTTYPE "TEST")
1136  if (NOT USE_FILTER_DEFLATE)
1137    set (TESTTYPE "SKIP")
1138  endif ()
1139  ADD_H5_TEST (deflate_copy ${TESTTYPE} ${arg})
1140
1141# deflate remove
1142  set (arg ${FILE8} -f dset_deflate:NONE)
1143  set (TESTTYPE "TEST")
1144  if (NOT USE_FILTER_DEFLATE)
1145    set (TESTTYPE "SKIP")
1146  endif ()
1147  ADD_H5_TEST (deflate_remove ${TESTTYPE} ${arg})
1148
1149# shuffle copy
1150  set (arg ${FILE9})
1151  ADD_H5_TEST (shuffle_copy "TEST" ${arg})
1152
1153# shuffle remove
1154  set (arg ${FILE9} -f dset_shuffle:NONE)
1155  ADD_H5_TEST (shuffle_remove "TEST" ${arg})
1156
1157# fletcher32 copy
1158  set (arg ${FILE10})
1159  ADD_H5_TEST (fletcher_copy "TEST" ${arg})
1160
1161# fletcher32 remove
1162  set (arg ${FILE10} -f dset_fletcher32:NONE)
1163  ADD_H5_TEST (fletcher_remove "TEST" ${arg})
1164
1165# nbit copy
1166  set (arg ${FILE12})
1167  ADD_H5_TEST (nbit_copy "TEST" ${arg})
1168
1169# nbit remove
1170  set (arg ${FILE12} -f dset_nbit:NONE)
1171  ADD_H5_TEST (nbit_remove "TEST" ${arg})
1172
1173# nbit add
1174  set (arg ${FILE12} -f dset_int31:NBIT)
1175  ADD_H5_TEST (nbit_add "TEST" ${arg})
1176
1177# scaleoffset copy
1178  set (arg ${FILE13})
1179  ADD_H5_TEST (scale_copy "TEST" ${arg})
1180
1181# scaleoffset add
1182  set (arg ${FILE13} -f dset_none:SOFF=31,IN)
1183  ADD_H5_TEST (scale_add "TEST" ${arg})
1184
1185# scaleoffset remove
1186  set (arg ${FILE13} -f dset_scaleoffset:NONE)
1187  ADD_H5_TEST (scale_remove "TEST" ${arg})
1188
1189# remove all  filters
1190  set (arg ${FILE11} -f NONE)
1191  set (TESTTYPE "TEST")
1192  if (NOT USE_FILTER_SZIP_ENCODER)
1193    if (NOT USE_FILTER_SZIP OR NOT USE_FILTER_DEFLATE)
1194      set (TESTTYPE "SKIP")
1195    endif ()
1196  endif ()
1197  ADD_H5_TEST (remove_all ${TESTTYPE} ${arg})
1198
1199#filter conversions
1200  set (arg ${FILE8} -f dset_deflate:SZIP=8,NN)
1201  set (TESTTYPE "TEST")
1202  if (NOT USE_FILTER_SZIP_ENCODER)
1203    if (NOT USE_FILTER_SZIP OR NOT USE_FILTER_DEFLATE)
1204      set (TESTTYPE "SKIP")
1205    endif ()
1206  endif ()
1207  ADD_H5_TEST (deflate_convert ${TESTTYPE} ${arg})
1208
1209  set (arg ${FILE7} -f dset_szip:GZIP=1)
1210  set (TESTTYPE "TEST")
1211  if (NOT USE_FILTER_SZIP_ENCODER)
1212    if (NOT USE_FILTER_SZIP OR NOT USE_FILTER_DEFLATE)
1213      set (TESTTYPE "SKIP")
1214    endif ()
1215  endif ()
1216  ADD_H5_TEST (szip_convert ${TESTTYPE} ${arg})
1217
1218#limit
1219  set (arg ${FILE4} -f GZIP=1 -m 1024)
1220  set (TESTTYPE "TEST")
1221  if (NOT USE_FILTER_DEFLATE)
1222    set (TESTTYPE "SKIP")
1223  endif ()
1224  ADD_H5_DMP_TEST (deflate_limit ${TESTTYPE} 0 ${arg})
1225
1226#file
1227  set (arg ${FILE4} -e ${INFO_FILE})
1228  set (TESTTYPE "TEST")
1229  if (NOT USE_FILTER_DEFLATE)
1230    set (TESTTYPE "SKIP")
1231  endif ()
1232  ADD_H5_TEST (deflate_file ${TESTTYPE} ${arg})
1233
1234#crtorder
1235  set (arg tordergr.h5 -L)
1236  set (TESTTYPE "TEST")
1237  ADD_H5_DMP_TEST (crtorder ${TESTTYPE} 0 ${arg})
1238
1239###################################################################################################
1240# Testing paged aggregation related options:
1241#   -G pagesize
1242#   -P 1 or 0
1243#   -S strategy
1244#   -T threshold
1245#
1246# The testfiles used are generated by test/gen_filespace.c and the file names are prepended with "h5repack_":
1247#   (1) "fsm_aggr_nopersist.h5"  /* H5F_FSPACE_STRATEGY_FSM_AGGR + not persisting free-space */
1248#   (2) "fsm_aggr_persist.h5"    /* H5F_FSPACE_STRATEGY_FSM_AGGR + persisting free-space */
1249#   (3) "paged_nopersist.h5"     /* H5F_FSPACE_STRATEGY_PAGE + not persisting free-space */
1250#   (4) "paged_persist.h5"       /* H5F_FSPACE_STRATEGY_PAGE + persisting free-space */
1251#   (5) "aggr.h5"                /* H5F_FSPACE_STRATEGY_AGGR */
1252#   (6) "none.h5"                /* H5F_FSPACE_STRATEGY_NONE */
1253#
1254#####################################################################################################
1255#
1256  set (arg h5repack_fsm_aggr_nopersist.h5 -S PAGE -P 1)
1257  set (TESTTYPE "TEST")
1258  ADD_H5_STAT_TEST (SP_PAGE ${TESTTYPE} 0 SP ${arg})
1259
1260  set (arg h5repack_fsm_aggr_persist.h5 -S AGGR)
1261  set (TESTTYPE "TEST")
1262  ADD_H5_STAT_TEST (S_AGGR ${TESTTYPE} 0 S ${arg})
1263
1264  set (arg h5repack_none.h5 -S PAGE -T 10 -G 2048)
1265  set (TESTTYPE "TEST")
1266  ADD_H5_STAT_TEST (STG_PAGE ${TESTTYPE} 0 STG ${arg})
1267
1268  set (arg h5repack_paged_nopersist.h5 -G 512 -S AGGR)
1269  set (TESTTYPE "TEST")
1270  ADD_H5_STAT_TEST (GS_AGGR ${TESTTYPE} 0 GS ${arg})
1271
1272  set (arg h5repack_paged_persist.h5 -S NONE -P 1)
1273  set (TESTTYPE "TEST")
1274  ADD_H5_STAT_TEST (SP_NONE ${TESTTYPE} 0 SP ${arg})
1275
1276  set (arg h5repack_aggr.h5 -S FSM_AGGR -P 1 -T 5)
1277  set (TESTTYPE "TEST")
1278  ADD_H5_STAT_TEST (SPT_FSM_AGGR ${TESTTYPE} 0 SPT ${arg})
1279
1280
1281#########################################################
1282# layout options (these files have no filters)
1283#########################################################
1284  ADD_H5_VERIFY_TEST (dset2_chunk_20x10 "TEST" 0 ${FILE4} dset2 CHUNKED --layout=dset2:CHUNK=20x10)
1285  ADD_H5_VERIFY_TEST (chunk_20x10 "TEST" 1 ${FILE4} null CHUNKED -l CHUNK=20x10)
1286  ADD_H5_VERIFY_TEST (dset2_conti "TEST" 0 ${FILE4} dset2 CONTIGUOUS -l dset2:CONTI)
1287  ADD_H5_VERIFY_TEST (conti "TEST" 1 ${FILE4} null CONTIGUOUS -l CONTI)
1288  ADD_H5_VERIFY_TEST (dset2_compa "TEST" 0 ${FILE4} dset2 COMPACT -l dset2:COMPA)
1289  ADD_H5_VERIFY_TEST (compa "TEST" 1 ${FILE4} null COMPACT -l COMPA)
1290  ADD_H5_MASK_TEST (dset2_chunk_20x10-errstk "TEST" 0 "dimensionality of chunks doesn't match the dataspace" ${FILE4} --layout=dset2:CHUNK=20x10x5 --enable-error-stack)
1291
1292################################################################
1293# layout conversions (file has no filters)
1294###############################################################
1295  ADD_H5_VERIFY_TEST (dset_compa_conti "TEST" 0 ${FILE4} dset_compact CONTIGUOUS -l dset_compact:CONTI)
1296  ADD_H5_VERIFY_TEST (dset_compa_chunk "TEST" 0 ${FILE4} dset_compact CHUNKED -l dset_compact:CHUNK=2x5)
1297  ADD_H5_VERIFY_TEST (dset_compa_compa "TEST" 0 ${FILE4} dset_compact COMPACT -l dset_compact:COMPA)
1298  ADD_H5_VERIFY_TEST (dset_conti_compa "TEST" 0 ${FILE4} dset_contiguous COMPACT -l dset_contiguous:COMPA)
1299  ADD_H5_VERIFY_TEST (dset_conti_chunk "TEST" 0 ${FILE4} dset_contiguous CHUNKED -l dset_contiguous:CHUNK=3x6)
1300  ADD_H5_VERIFY_TEST (dset_conti_conti "TEST" 0 ${FILE4} dset_contiguous CONTIGUOUS -l dset_contiguous:CONTI)
1301  ADD_H5_VERIFY_TEST (chunk_compa "TEST" 0 ${FILE4} dset_chunk COMPACT -l dset_chunk:COMPA)
1302  ADD_H5_VERIFY_TEST (chunk_conti "TEST" 0 ${FILE4} dset_chunk CONTIGUOUS -l dset_chunk:CONTI)
1303  ADD_H5_VERIFY_TEST (chunk_18x13 "TEST" 0 ${FILE4} dset_chunk CHUNKED -l dset_chunk:CHUNK=18x13)
1304
1305# test convert small size dataset ( < 1k) to compact layout without -m
1306  ADD_H5_VERIFY_TEST (contig_small_compa "TEST" 0 ${FILE18} contig_small COMPACT -l contig_small:COMPA)
1307  ADD_H5_VERIFY_TEST (contig_small_fixed_compa "TEST" 0 ${FILE18} chunked_small_fixed COMPACT -l chunked_small_fixed:COMPA)
1308
1309#---------------------------------------------------------------------------
1310# Test file contains chunked datasets (need multiple dsets) with
1311# unlimited max dims.   (HDFFV-7933)
1312# Use first dset to test.
1313#---------------------------------------------------------------------------
1314# chunk to chunk - specify chunk dim bigger than any current dim
1315  ADD_H5_VERIFY_TEST (chunk2chunk "TEST" 0 ${FILE19} chunk_unlimit1 CHUNK -l chunk_unlimit1:CHUNK=100x300)
1316
1317# chunk to contiguous
1318  ADD_H5_VERIFY_TEST (chunk2conti "TEST" 0 ${FILE19} chunk_unlimit1 CONTI -l chunk_unlimit1:CONTI)
1319
1320# chunk to compact - convert big dataset (should be > 64k) for this purpose,
1321# should remain as original layout (chunk)
1322  ADD_H5_VERIFY_TEST (chunk2compa "TEST" 0 ${FILE19} chunk_unlimit1 CHUNK -l chunk_unlimit1:COMPA)
1323
1324#--------------------------------------------------------------------------
1325# Test -f for some specific cases. Chunked dataset with unlimited max dims.
1326# (HDFFV-8012)
1327#--------------------------------------------------------------------------
1328# - should not fail
1329# - should not change max dims from unlimit
1330
1331# chunk dim is bigger than dataset dim. ( dset size < 64k )
1332  ADD_H5_VERIFY_TEST (error1 "TEST" 0 ${FILE19} chunk_unlimit1 H5S_UNLIMITED -f chunk_unlimit1:NONE)
1333
1334# chunk dim is bigger than dataset dim. ( dset size > 64k )
1335  ADD_H5_VERIFY_TEST (error2 "TEST" 0 ${FILE19} chunk_unlimit2 H5S_UNLIMITED -f chunk_unlimit2:NONE)
1336
1337# chunk dims are smaller than dataset dims. ( dset size < 64k )
1338  ADD_H5_VERIFY_TEST (error3 "TEST" 0 ${FILE19} chunk_unlimit3 H5S_UNLIMITED -f chunk_unlimit3:NONE)
1339
1340# file input - should not fail
1341  ADD_H5_TEST (error4 "TEST" ${FILE19} -f NONE)
1342
1343#--------------------------------------------------------------------------
1344# Test base: Convert CHUNK to CONTI for a chunked dataset with small dataset
1345# (dset size < 64K) and with unlimited max dims on a condition as follow.
1346# (HDFFV-8214)
1347#--------------------------------------------------------------------------
1348# chunk dim is bigger than dataset dim. should succeed.
1349  ADD_H5_VERIFY_TEST (ckdim_biger "TEST" 0 ${FILE19} chunk_unlimit2 CONTI -l chunk_unlimit2:CONTI)
1350# chunk dim is smaller than dataset dim. should succeed.
1351  ADD_H5_VERIFY_TEST (ckdim_smaller "TEST" 0 ${FILE19} chunk_unlimit3 CONTI -l chunk_unlimit3:CONTI)
1352
1353
1354
1355# Native option
1356# Do not use FILE1, as the named dtype will be converted to native, and h5diff will
1357# report a difference.
1358  ADD_H5_TEST (native_fill "TEST" ${FILE0} -n)
1359  ADD_H5_TEST (native_attr "TEST" ${FILE2} -n)
1360
1361# latest file format with long switches. use FILE4=h5repack_layout.h5 (no filters)
1362  set (arg --layout CHUNK=20x10 --filter GZIP=1 --minimum=10 --native --latest --compact=8 --indexed=6 --ssize=8[:dtype])
1363  set (TESTTYPE "TEST")
1364  if (NOT USE_FILTER_DEFLATE)
1365    set (TESTTYPE "SKIP")
1366  endif ()
1367  ADD_H5_VERIFY_TEST (layout_long_switches ${TESTTYPE} 1 ${FILE4} null CHUNKED ${arg})
1368
1369# latest file format with short switches. use FILE4=h5repack_layout.h5 (no filters)
1370  set (arg -l CHUNK=20x10 -f GZIP=1 -m 10 -n -L -c 8 -d 6 -s 8[:dtype])
1371  set (TESTTYPE "TEST")
1372  if (NOT USE_FILTER_DEFLATE)
1373    set (TESTTYPE "SKIP")
1374  endif ()
1375  ADD_H5_VERIFY_TEST (layout_short_switches ${TESTTYPE} 1 ${FILE4} null CHUNKED ${arg})
1376
1377# several global filters
1378  set (arg ${FILE4} --filter GZIP=1 --filter SHUF)
1379  set (TESTTYPE "TEST")
1380  if (NOT USE_FILTER_DEFLATE)
1381    set (TESTTYPE "SKIP")
1382  endif ()
1383  ADD_H5_TEST (global_filters ${TESTTYPE} ${arg})
1384
1385# syntax of -i infile -o outfile
1386# latest file format with short switches. use FILE4=h5repack_layout.h5 (no filters)
1387  set (arg ${FILE4} -l CHUNK=20x10 -f GZIP=1 -m 10 -n -L -c 8 -d 6 -s 8[:dtype])
1388  set (TESTTYPE "LEGACY")
1389  if (NOT USE_FILTER_DEFLATE)
1390    set (TESTTYPE "SKIP")
1391  endif ()
1392  ADD_H5_TEST_OLD (old_style_layout_short_switches ${TESTTYPE} ${arg})
1393
1394# add a userblock to file
1395  set (arg ${FILE1} -u ${PROJECT_BINARY_DIR}/testfiles/ublock.bin -b 2048)
1396  ADD_H5_TEST (add_userblock "TEST" ${arg})
1397
1398# add alignment
1399  set (arg ${FILE1} -t 1 -a 1)
1400  ADD_H5_TEST (add_alignment "TEST" ${arg})
1401
1402# Check repacking file with old version of layout message (should get upgraded
1403# to new version and be readable, etc.)
1404  ADD_H5_TEST (upgrade_layout "TEST" ${FILE14})
1405
1406# test for datum size > H5TOOLS_MALLOCSIZE
1407  if (NOT USE_FILTER_DEFLATE)
1408    set (TESTTYPE "SKIP")
1409  endif ()
1410  ADD_H5_TEST (gt_mallocsize ${TESTTYPE} ${FILE1} -f GZIP=1)
1411
1412# Check repacking file with committed datatypes in odd configurations
1413  ADD_H5_TEST (committed_dt "TEST" ${FILE15})
1414
1415# tests family driver (file is located in common testfiles folder, uses TOOLTEST1
1416  ADD_H5_TEST (family "TEST" ${FILE16})
1417
1418# test various references (bug 1814 and 1726)
1419  ADD_H5_TEST (bug1814 "TEST" ${FILE_REF})
1420
1421# test attribute with various references (bug1797 / HDFFV-5932)
1422# the references in attribute of compund or vlen datatype
1423  ADD_H5_TEST (HDFFV-5932 "TEST" ${FILE_ATTR_REF})
1424
1425# Add test for memory leak in attirbute. This test is verified by CTEST.
1426# 1. leak from vlen string
1427# 2. leak from compound type without reference member
1428# (HDFFV-7840, )
1429# Note: this test is experimental for sharing test file among tools
1430  ADD_H5_TEST (HDFFV-7840 "TEST" h5diff_attr1.h5)
1431
1432# tests for metadata block size option ('-M')
1433  ADD_H5_TEST_META (meta_short h5repack_layout.h5 -M 8192)
1434  ADD_H5_TEST_META (meta_long h5repack_layout.h5 --metadata_block_size=8192)
1435
1436# VDS tests
1437
1438################################################################
1439# layout conversions
1440###############################################################
1441  set (TESTTYPE "TEST")
1442  if (NOT USE_FILTER_DEFLATE)
1443    set (TESTTYPE "SKIP")
1444  endif ()
1445  ADD_H5_VERIFY_VDS (vds_dset_chunk20x10x5 ${TESTTYPE} 0 ${FILEV1} vds_dset CHUNKED -l vds_dset:CHUNK=20x10x5)
1446
1447  set (TESTTYPE "TEST")
1448  if (NOT USE_FILTER_DEFLATE)
1449    set (TESTTYPE "SKIP")
1450  endif ()
1451  ADD_H5_VERIFY_VDS (vds_chunk2x5x8 ${TESTTYPE} 0 ${FILEV3_1} vds_dset CHUNKED -l vds_dset:CHUNK=2x5x8)
1452
1453  set (TESTTYPE "TEST")
1454  if (NOT USE_FILTER_DEFLATE)
1455    set (TESTTYPE "SKIP")
1456  endif ()
1457  ADD_H5_VERIFY_VDS (vds_chunk3x6x9 ${TESTTYPE} 0 ${FILEV2} vds_dset CHUNKED -l vds_dset:CHUNK=3x6x9)
1458
1459  set (TESTTYPE "TEST")
1460  if (NOT USE_FILTER_DEFLATE)
1461    set (TESTTYPE "SKIP")
1462  endif ()
1463  ADD_H5_VERIFY_VDS (vds_compa ${TESTTYPE} 0 ${FILEV4} vds_dset COMPACT -l vds_dset:COMPA)
1464
1465  set (TESTTYPE "TEST")
1466  if (NOT USE_FILTER_DEFLATE)
1467    set (TESTTYPE "SKIP")
1468  endif ()
1469  ADD_H5_VERIFY_VDS (vds_conti ${TESTTYPE} 0 ${FILEV4} vds_dset CONTIGUOUS -l vds_dset:CONTI)
1470
1471##############################################################################
1472###    V E R S I O N  B O U N D S  T E S T S
1473##############################################################################
1474# -j 0 -k 2, superblock will be 0
1475ADD_H5_VERIFY_SUPERBLOCK (SB_IS_0 h5repack_layout.h5 0 2 0)
1476# -j 1 -k 2, superblock will be 2
1477ADD_H5_VERIFY_SUPERBLOCK (SB_IS_2 h5repack_layout.h5 1 2 2)
1478# -j 2 -k 2, superblock will be 3
1479ADD_H5_VERIFY_SUPERBLOCK (SB_IS_3 h5repack_layout.h5 2 2 3)
1480# -j 0 -k 1, file cannot be opened
1481ADD_H5_VERIFY_INVALIDBOUNDS (latest_latest_invalid bounds_latest_latest.h5 0 1)
1482
1483##############################################################################
1484###    E X T E R N A L  S T O R A G E  T E S T S
1485##############################################################################
1486ADD_H5_EXTERNAL_TEST (ext_f32le "TEST" f32le -l CONTI)
1487ADD_H5_EXTERNAL_TEST (ext_int32le_1d "TEST" int32le_1d -l CONTI)
1488ADD_H5_EXTERNAL_TEST (ext_int32le_2d "TEST" int32le_2d -l CONTI)
1489ADD_H5_EXTERNAL_TEST (ext_int32le_3d "TEST" int32le_3d -l CONTI)
1490ADD_H5_EXTERNAL_TEST (ext_uint8be "TEST" uint8be -l CONTI)
1491
1492##############################################################################
1493###    P L U G I N  T E S T S
1494##############################################################################
1495if (BUILD_SHARED_LIBS)
1496  ADD_H5_UD_TEST (plugin_version_test 0 h5repack_layout.h5 -v -f UD=260,0,4,9,${H5_VERS_MAJOR},${H5_VERS_MINOR},${H5_VERS_RELEASE})
1497  ADD_H5_UD_TEST (plugin_test 0 h5repack_layout.h5 -v -f UD=257,0,1,9)
1498  ADD_H5_UD_TEST (plugin_none 0 h5repack_layout.UD.h5 -v -f NONE)
1499  # check for no parameters
1500  ADD_H5_UD_TEST (plugin_zero 0 h5repack_layout.h5 -v -f UD=250,0,0)
1501endif ()
1502
1503##############################################################################
1504##############################################################################
1505###                         V F D   T E S T S                              ###
1506##############################################################################
1507##############################################################################
1508
1509if (HDF5_TEST_VFD)
1510  include (CMakeVFDTests.cmake)
1511endif ()
1512