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  if (HDF5_TEST_VFD)
20    set (VFD_LIST
21        sec2
22        stdio
23        core
24        split
25        multi
26        family
27    )
28
29    if (DIRECT_VFD)
30      set (VFD_LIST ${VFD_LIST} direct)
31    endif ()
32
33    macro (ADD_VFD_TEST vfdname resultcode)
34      add_test (
35        NAME H5REPACK-VFD-${vfdname}-h5repacktest
36        COMMAND "${CMAKE_COMMAND}"
37            -D "TEST_PROGRAM=$<TARGET_FILE:h5repacktest>"
38            -D "TEST_ARGS:STRING="
39            -D "TEST_VFD:STRING=${vfdname}"
40            -D "TEST_EXPECT=${resultcode}"
41            -D "TEST_OUTPUT=h5repacktest"
42            -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
43            -P "${HDF_RESOURCES_DIR}/vfdTest.cmake"
44      )
45      if (NOT "${last_test}" STREQUAL "")
46        set_tests_properties (H5REPACK-VFD-${vfdname}-h5repacktest PROPERTIES DEPENDS ${last_test})
47      endif ()
48      set (last_test "H5REPACK-VFD-${vfdname}-h5repacktest")
49    endmacro ()
50  endif ()
51
52  # --------------------------------------------------------------------
53  # Copy all the HDF5 files from the source directory into the test directory
54  # --------------------------------------------------------------------
55  set (LIST_HDF5_TEST_FILES
56      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_attr.h5
57      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_attr_refs.h5
58      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_deflate.h5
59      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_early.h5
60      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_ext.h5
61      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_fill.h5
62      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_filters.h5
63      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_fletcher.h5
64      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_hlink.h5
65      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.h5
66      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layouto.h5
67      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout2.h5
68      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout3.h5
69      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.UD.h5
70      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_named_dtypes.h5
71      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_nbit.h5
72      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_objs.h5
73      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_refs.h5
74      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_shuffle.h5
75      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_soffset.h5
76      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_szip.h5
77      # h5diff/testfile
78      ${HDF5_TOOLS_H5DIFF_SOURCE_DIR}/testfiles/h5diff_attr1.h5
79      # tools/testfiles
80      ${HDF5_TOOLS_SRC_DIR}/testfiles/tfamily00000.h5
81      ${HDF5_TOOLS_SRC_DIR}/testfiles/tfamily00001.h5
82      ${HDF5_TOOLS_SRC_DIR}/testfiles/tfamily00002.h5
83      ${HDF5_TOOLS_SRC_DIR}/testfiles/tfamily00003.h5
84      ${HDF5_TOOLS_SRC_DIR}/testfiles/tfamily00004.h5
85      ${HDF5_TOOLS_SRC_DIR}/testfiles/tfamily00005.h5
86      ${HDF5_TOOLS_SRC_DIR}/testfiles/tfamily00006.h5
87      ${HDF5_TOOLS_SRC_DIR}/testfiles/tfamily00007.h5
88      ${HDF5_TOOLS_SRC_DIR}/testfiles/tfamily00008.h5
89      ${HDF5_TOOLS_SRC_DIR}/testfiles/tfamily00009.h5
90      ${HDF5_TOOLS_SRC_DIR}/testfiles/tfamily00010.h5
91      ${HDF5_TOOLS_SRC_DIR}/testfiles/tordergr.h5
92  )
93
94  set (LIST_OTHER_TEST_FILES
95      h5repack-help.txt
96      h5repack_ext.bin
97      h5repack.info
98      ublock.bin
99  )
100
101  set (LIST_TST_TEST_FILES
102      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_filters.h5-gzip_verbose_filters
103      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.h5-dset2_chunk_20x10-errstk
104      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/plugin_test.h5repack_layout.h5
105      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/plugin_version_test.h5repack_layout.h5
106      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/plugin_zero.h5repack_layout.h5
107      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/plugin_none.h5repack_layout.UD.h5
108  )
109
110  set (LIST_DDL_TEST_FILES
111      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/crtorder.tordergr.h5
112      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/deflate_limit.h5repack_layout.h5
113      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.h5
114      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.h5-plugin_test
115      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.h5-plugin_version_test
116      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.h5-plugin_zero
117      ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/h5repack_layout.UD.h5-plugin_none
118  )
119
120  foreach (h5_file ${LIST_HDF5_TEST_FILES})
121    get_filename_component(fname "${h5_file}" NAME)
122    HDFTEST_COPY_FILE("${h5_file}" "${PROJECT_BINARY_DIR}/testfiles/${fname}" "h5repack_files")
123  endforeach ()
124
125  foreach (h5_file ${LIST_OTHER_TEST_FILES})
126    HDFTEST_COPY_FILE("${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/testfiles/${h5_file}" "${PROJECT_BINARY_DIR}/testfiles/${h5_file}" "h5repack_files")
127  endforeach ()
128
129  foreach (h5_file ${LIST_TST_TEST_FILES})
130    get_filename_component(fname "${h5_file}" NAME)
131    HDFTEST_COPY_FILE("${h5_file}.tst" "${PROJECT_BINARY_DIR}/testfiles/${fname}.tst" "h5repack_files")
132  endforeach ()
133
134  foreach (h5_file ${LIST_DDL_TEST_FILES})
135    get_filename_component(fname "${h5_file}" NAME)
136    HDFTEST_COPY_FILE("${h5_file}.ddl" "${PROJECT_BINARY_DIR}/testfiles/${fname}.ddl" "h5repack_files")
137  endforeach ()
138  add_custom_target(h5repack_files ALL COMMENT "Copying files needed by h5repack tests" DEPENDS ${h5repack_files_list})
139
140##############################################################################
141##############################################################################
142###           T H E   T E S T S  M A C R O S                               ###
143##############################################################################
144##############################################################################
145
146  macro (ADD_HELP_TEST testname resultcode)
147    # If using memchecker add tests without using scripts
148    if (HDF5_ENABLE_USING_MEMCHECKER)
149      add_test (NAME H5REPACK-h5repack-${testname} COMMAND $<TARGET_FILE:h5repack> ${ARGN})
150      set_tests_properties (H5REPACK-h5repack-${testname} PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles")
151      if (NOT "${last_test}" STREQUAL "")
152        set_tests_properties (H5REPACK-h5repack-${testname} PROPERTIES DEPENDS ${last_test})
153      endif ()
154      set (last_test "H5REPACK-h5repack-${testname}")
155    else ()
156      add_test (
157          NAME H5REPACK-h5repack-${testname}-clear-objects
158          COMMAND    ${CMAKE_COMMAND}
159              -E remove
160              testfiles/h5repack-${testname}.out
161              testfiles/h5repack-${testname}.out.err
162      )
163      if (NOT "${last_test}" STREQUAL "")
164        set_tests_properties (H5REPACK-h5repack-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
165      endif ()
166      add_test (
167          NAME H5REPACK-h5repack-${testname}
168          COMMAND "${CMAKE_COMMAND}"
169              -D "TEST_PROGRAM=$<TARGET_FILE:h5repack>"
170              -D "TEST_ARGS:STRING=${ARGN}"
171              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
172              -D "TEST_OUTPUT=h5repack-${testname}.out"
173              -D "TEST_EXPECT=${resultcode}"
174              -D "TEST_REFERENCE=h5repack-${testname}.txt"
175              -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
176      )
177      set_tests_properties (H5REPACK-h5repack-${testname} PROPERTIES DEPENDS H5REPACK-h5repack-${testname}-clear-objects)
178    endif ()
179  endmacro ()
180
181  macro (ADD_H5_TEST_OLD testname testtype testfile)
182    if ("${testtype}" STREQUAL "SKIP")
183      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
184        add_test (
185            NAME H5REPACK_OLD-${testname}-SKIPPED
186            COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} -i ${PROJECT_BINARY_DIR}/testfiles/${testfile} -o ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}"
187        )
188      endif ()
189    else ()
190      add_test (
191          NAME H5REPACK_OLD-${testname}-clear-objects
192          COMMAND    ${CMAKE_COMMAND}
193              -E remove
194              testfiles/out-${testname}.${testfile}
195      )
196      if (NOT "${last_test}" STREQUAL "")
197        set_tests_properties (H5REPACK_OLD-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
198      endif ()
199      add_test (
200          NAME H5REPACK_OLD-${testname}
201          COMMAND $<TARGET_FILE:h5repack> ${ARGN} -i ${PROJECT_BINARY_DIR}/testfiles/${testfile} -o ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
202      )
203      set_tests_properties (H5REPACK_OLD-${testname} PROPERTIES DEPENDS H5REPACK_OLD-${testname}-clear-objects)
204      add_test (
205          NAME H5REPACK_OLD-${testname}_DFF
206          COMMAND $<TARGET_FILE:h5diff> ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
207      )
208      set_tests_properties (H5REPACK_OLD-${testname}_DFF PROPERTIES DEPENDS H5REPACK_OLD-${testname})
209    endif ()
210  endmacro ()
211
212  macro (ADD_H5_TEST testname testtype testfile)
213    if ("${testtype}" STREQUAL "SKIP")
214      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
215        add_test (
216            NAME H5REPACK-${testname}-SKIPPED
217            COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}"
218        )
219      endif ()
220    else ()
221      add_test (
222          NAME H5REPACK-${testname}-clear-objects
223          COMMAND    ${CMAKE_COMMAND}
224              -E remove
225              testfiles/out-${testname}.${testfile}
226      )
227      if (NOT "${last_test}" STREQUAL "")
228        set_tests_properties (H5REPACK-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
229      endif ()
230      add_test (
231          NAME H5REPACK-${testname}
232          COMMAND $<TARGET_FILE:h5repack> --enable-error-stack ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
233      )
234      set_tests_properties (H5REPACK-${testname} PROPERTIES DEPENDS H5REPACK-${testname}-clear-objects)
235      add_test (
236          NAME H5REPACK-${testname}_DFF
237          COMMAND $<TARGET_FILE:h5diff> --enable-error-stack ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
238      )
239      set_tests_properties (H5REPACK-${testname}_DFF PROPERTIES DEPENDS H5REPACK-${testname})
240    endif ()
241  endmacro ()
242
243  macro (ADD_H5_CMP_TEST testname testfilter testtype resultcode resultfile)
244    if ("${testtype}" STREQUAL "SKIP")
245      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
246        add_test (
247            NAME H5REPACK_CMP-${testname}-SKIPPED
248            COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}"
249        )
250      endif ()
251    else ()
252      # If using memchecker add tests without using scripts
253      if (HDF5_ENABLE_USING_MEMCHECKER)
254        add_test (
255            NAME H5REPACK_CMP-${testname}
256            COMMAND $<TARGET_FILE:h5repack> ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}
257        )
258        if (NOT "${last_test}" STREQUAL "")
259          set_tests_properties (H5REPACK_CMP-${testname} PROPERTIES DEPENDS ${last_test})
260        endif ()
261      else ()
262        add_test (
263            NAME H5REPACK_CMP-${testname}-clear-objects
264            COMMAND    ${CMAKE_COMMAND}
265                -E remove
266                testfiles/out-${testname}.${resultfile}
267                testfiles/${resultfile}-${testname}.out
268                testfiles/${resultfile}-${testname}.out.err
269        )
270        if (NOT "${last_test}" STREQUAL "")
271          set_tests_properties (H5REPACK_CMP-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
272        endif ()
273        add_test (
274            NAME H5REPACK_CMP-${testname}
275            COMMAND "${CMAKE_COMMAND}"
276                -D "TEST_PROGRAM=$<TARGET_FILE:h5repack>"
277                -D "TEST_ARGS:STRING=${ARGN};${resultfile};out-${testname}.${resultfile}"
278                -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
279                -D "TEST_OUTPUT=${resultfile}-${testname}.out"
280                -D "TEST_EXPECT=${resultcode}"
281                -D "TEST_FILTER:STRING=${testfilter}"
282                -D "TEST_REFERENCE=${resultfile}-${testname}.tst"
283                -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
284        )
285        set_tests_properties (H5REPACK_CMP-${testname} PROPERTIES DEPENDS H5REPACK_CMP-${testname}-clear-objects)
286      endif ()
287    endif ()
288  endmacro ()
289
290  macro (ADD_H5_MASK_TEST testname testtype resultcode resultfile)
291    if ("${testtype}" STREQUAL "SKIP")
292      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
293        add_test (
294            NAME H5REPACK_MASK-${testname}-SKIPPED
295            COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}"
296        )
297      endif ()
298    else ()
299      # If using memchecker add tests without using scripts
300      if (HDF5_ENABLE_USING_MEMCHECKER)
301        add_test (
302            NAME H5REPACK_MASK-${testname}
303            COMMAND $<TARGET_FILE:h5repack> ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}
304        )
305        if (NOT "${last_test}" STREQUAL "")
306          set_tests_properties (H5REPACK_MASK-${testname} PROPERTIES DEPENDS ${last_test})
307        endif ()
308      else (HDF5_ENABLE_USING_MEMCHECKER)
309        add_test (
310            NAME H5REPACK_MASK-${testname}-clear-objects
311            COMMAND    ${CMAKE_COMMAND}
312                -E remove
313                testfiles/out-${testname}.${resultfile}
314                testfiles/${resultfile}-${testname}.out
315                testfiles/${resultfile}-${testname}.out.err
316        )
317        if (NOT "${last_test}" STREQUAL "")
318          set_tests_properties (H5REPACK_MASK-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
319        endif ()
320        add_test (
321            NAME H5REPACK_MASK-${testname}
322            COMMAND "${CMAKE_COMMAND}"
323                -D "TEST_PROGRAM=$<TARGET_FILE:h5repack>"
324                -D "TEST_ARGS:STRING=${ARGN};${resultfile};out-${testname}.${resultfile}"
325                -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
326                -D "TEST_OUTPUT=${resultfile}-${testname}.out"
327                -D "TEST_EXPECT=${resultcode}"
328                -D "TEST_MASK_ERROR=true"
329                -D "TEST_REFERENCE=${resultfile}-${testname}.tst"
330                -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
331        )
332        set_tests_properties (H5REPACK_MASK-${testname} PROPERTIES DEPENDS H5REPACK_MASK-${testname}-clear-objects)
333      endif ()
334    endif ()
335  endmacro ()
336
337  macro (ADD_H5_DMP_TEST testname testtype resultcode resultfile)
338    if ("${testtype}" STREQUAL "SKIP")
339      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
340        add_test (
341            NAME H5REPACK_DMP-${testname}-SKIPPED
342            COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}"
343        )
344      endif ()
345    else ()
346      add_test (
347          NAME H5REPACK_DMP-${testname}-clear-objects
348          COMMAND    ${CMAKE_COMMAND}
349              -E remove
350              testfiles/out-${testname}.${resultfile}
351              testfiles/${resultfile}-${testname}.out
352              testfiles/${resultfile}-${testname}.out.err
353      )
354      if (NOT "${last_test}" STREQUAL "")
355        set_tests_properties (H5REPACK_DMP-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
356      endif ()
357      add_test (
358          NAME H5REPACK_DMP-${testname}
359          COMMAND $<TARGET_FILE:h5repack> ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}
360      )
361      set_tests_properties (H5REPACK_DMP-${testname} PROPERTIES DEPENDS H5REPACK_DMP-${testname}-clear-objects)
362      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
363        add_test (
364            NAME H5REPACK_DMP-h5dump-${testname}
365            COMMAND "${CMAKE_COMMAND}"
366                -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
367                -D "TEST_ARGS:STRING=-q;creation_order;-pH;out-${testname}.${resultfile}"
368                -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
369                -D "TEST_OUTPUT=${resultfile}-${testname}.out"
370                -D "TEST_EXPECT=${resultcode}"
371                -D "TEST_REFERENCE=${testname}.${resultfile}.ddl"
372                -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
373        )
374        set_tests_properties (H5REPACK_DMP-h5dump-${testname} PROPERTIES DEPENDS "H5REPACK_DMP-${testname}")
375      endif ()
376    endif ()
377  endmacro ()
378
379  macro (ADD_H5_STAT_TEST testname testtype resultcode statarg resultfile)
380    if ("${testtype}" STREQUAL "SKIP")
381      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
382        add_test (
383            NAME H5REPACK_STAT-${testname}-SKIPPED
384            COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${statarg}.${resultfile}"
385        )
386      endif ()
387    else ()
388      add_test (
389          NAME H5REPACK_STAT-${testname}-clear-objects
390          COMMAND    ${CMAKE_COMMAND}
391              -E remove
392              testfiles/out-${statarg}.${resultfile}
393              testfiles/${resultfile}-${testname}.out
394              testfiles/${resultfile}-${testname}.out.err
395      )
396      if (NOT "${last_test}" STREQUAL "")
397        set_tests_properties (H5REPACK_STAT-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
398      endif ()
399      add_test (
400          NAME H5REPACK_STAT-${testname}
401          COMMAND $<TARGET_FILE:h5repack> ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${statarg}.${resultfile}
402      )
403      set_tests_properties (H5REPACK_STAT-${testname} PROPERTIES DEPENDS H5REPACK_STAT-${testname}-clear-objects)
404      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
405        add_test (
406            NAME H5REPACK_STAT-h5stat-${testname}
407            COMMAND "${CMAKE_COMMAND}"
408                -D "TEST_PROGRAM=$<TARGET_FILE:h5stat>"
409                -D "TEST_ARGS:STRING=-S;-s;out-${statarg}.${resultfile}"
410                -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
411                -D "TEST_OUTPUT=${resultfile}-${testname}.out"
412                -D "TEST_EXPECT=${resultcode}"
413                -D "TEST_REFERENCE=${statarg}.${resultfile}.ddl"
414                -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
415        )
416        set_tests_properties (H5REPACK_STAT-h5stat-${testname} PROPERTIES DEPENDS "H5REPACK_STAT-${testname}")
417      endif ()
418    endif ()
419  endmacro ()
420
421  macro (ADD_H5_VERIFY_TEST testname testtype resultcode testfile testdset testfilter)
422    if ("${testtype}" STREQUAL "SKIP")
423      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
424        add_test (
425            NAME H5REPACK_VERIFY_LAYOUT-${testname}-SKIPPED
426            COMMAND ${CMAKE_COMMAND} -E echo "SKIP -d ${testdset} -pH ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}"
427        )
428      endif ()
429    else ()
430      if (NOT HDF5_ENABLE_USING_MEMCHECKER)
431        add_test (
432            NAME H5REPACK_VERIFY_LAYOUT-${testname}-clear-objects
433            COMMAND    ${CMAKE_COMMAND}
434                -E remove
435                testfiles/out-${testname}.${testfile}
436                testfiles/${testfile}-${testname}-v.out
437                testfiles/${testfile}-${testname}-v.out.err
438        )
439        if (NOT "${last_test}" STREQUAL "")
440          set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
441        endif ()
442        add_test (
443            NAME H5REPACK_VERIFY_LAYOUT-${testname}
444            COMMAND $<TARGET_FILE:h5repack> ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
445        )
446        set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname} PROPERTIES DEPENDS H5REPACK_VERIFY_LAYOUT-${testname}-clear-objects)
447        add_test (
448            NAME H5REPACK_VERIFY_LAYOUT-${testname}_DFF
449            COMMAND $<TARGET_FILE:h5diff> ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
450        )
451        set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname}_DFF PROPERTIES DEPENDS H5REPACK_VERIFY_LAYOUT-${testname})
452        if ("${resultcode}" STREQUAL "0")
453          add_test (
454              NAME H5REPACK_VERIFY_LAYOUT-${testname}_DMP
455              COMMAND "${CMAKE_COMMAND}"
456                  -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
457                  -D "TEST_ARGS:STRING=-d;${testdset};-pH;out-${testname}.${testfile}"
458                  -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
459                  -D "TEST_OUTPUT=${testfile}-${testname}-v.out"
460                  -D "TEST_EXPECT=${resultcode}"
461                  -D "TEST_FILTER:STRING=${testfilter}"
462                  -D "TEST_REFERENCE=${testfilter}"
463                  -P "${HDF_RESOURCES_EXT_DIR}/grepTest.cmake"
464          )
465          set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname}_DMP PROPERTIES DEPENDS H5REPACK_VERIFY_LAYOUT-${testname}_DFF)
466        else ()
467          if ("${testfilter}" STREQUAL "CHUNKED")
468            set (nottestfilter "(CONTIGUOUS|COMPACT)")
469          endif ()
470          if ("${testfilter}" STREQUAL "CONTIGUOUS")
471            set (nottestfilter "(CHUNK|COMPACT)")
472          endif ()
473          if ("${testfilter}" STREQUAL "COMPACT")
474            set (nottestfilter "(CONTIGUOUS|CHUNK)")
475          endif ()
476          add_test (
477              NAME H5REPACK_VERIFY_LAYOUT-${testname}_DMP
478              COMMAND "${CMAKE_COMMAND}"
479                  -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
480                  -D "TEST_ARGS:STRING=-pH;out-${testname}.${testfile}"
481                  -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
482                  -D "TEST_OUTPUT=${testfile}-${testname}-v.out"
483                  -D "TEST_EXPECT=${resultcode}"
484                  -D "TEST_FILTER:STRING=${nottestfilter}"
485                  -D "TEST_REFERENCE=${testfilter}"
486                  -P "${HDF_RESOURCES_EXT_DIR}/grepTest.cmake"
487          )
488          set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname}_DMP PROPERTIES DEPENDS H5REPACK_VERIFY_LAYOUT-${testname}_DFF)
489        endif ()
490      endif ()
491    endif ()
492  endmacro ()
493
494  macro (ADD_H5_TEST_META testname testfile)
495      # Remove any output file left over from previous test run
496      add_test (
497          NAME H5REPACK_META-${testname}_N-clear-objects
498          COMMAND    ${CMAKE_COMMAND}
499              -E remove
500              testfiles/out-${testname}_N.${testname}.h5
501              testfiles/out-${testname}_M.${testname}.h5
502      )
503      if (NOT "${last_test}" STREQUAL "")
504        set_tests_properties (H5REPACK_META-${testname}_N-clear-objects PROPERTIES DEPENDS ${last_test})
505      endif ()
506      add_test (
507          NAME H5REPACK_META-${testname}_N
508          COMMAND $<TARGET_FILE:h5repack> ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}_N.${testname}.h5
509      )
510      set_tests_properties (H5REPACK_META-${testname}_N PROPERTIES DEPENDS H5REPACK_META-${testname}_N-clear-objects)
511      add_test (
512          NAME H5REPACK_META-${testname}_M
513          COMMAND $<TARGET_FILE:h5repack> ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}_M.${testname}.h5
514      )
515      set_tests_properties (H5REPACK_META-${testname}_M PROPERTIES DEPENDS H5REPACK_META-${testname}_N)
516
517      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)
518      set_tests_properties (H5REPACK_META-${testname} PROPERTIES WILL_FAIL "true")
519      set_tests_properties (H5REPACK_META-${testname} PROPERTIES DEPENDS H5REPACK_META-${testname}_M)
520  endmacro ()
521
522  macro (ADD_H5_UD_TEST testname resultcode resultfile)
523    if (NOT HDF5_ENABLE_USING_MEMCHECKER)
524      # Remove any output file left over from previous test run
525      add_test (
526          NAME H5REPACK_UD-${testname}-clear-objects
527          COMMAND    ${CMAKE_COMMAND}
528              -E remove
529              testfiles/out-${testname}.${resultfile}
530              testfiles/${testname}.${resultfile}.out
531              testfiles/${testname}.${resultfile}.out.err
532              testfiles/${resultfile}-${testname}.out
533              testfiles/${resultfile}-${testname}.out.err
534      )
535      if (NOT "${last_test}" STREQUAL "")
536        set_tests_properties (H5REPACK_UD-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
537      endif ()
538      add_test (
539          NAME H5REPACK_UD-${testname}
540          COMMAND "${CMAKE_COMMAND}"
541              -D "TEST_PROGRAM=$<TARGET_FILE:h5repack>"
542              -D "TEST_ARGS:STRING=${ARGN};${resultfile};out-${testname}.${resultfile}"
543              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
544              -D "TEST_EXPECT=${resultcode}"
545              -D "TEST_FILTER:STRING=O?...ing file[^\n]+\n"
546              -D "TEST_OUTPUT=${testname}.${resultfile}.out"
547              -D "TEST_REFERENCE=${testname}.${resultfile}.tst"
548              -D "TEST_ENV_VAR=HDF5_PLUGIN_PATH"
549              -D "TEST_ENV_VALUE=${CMAKE_BINARY_DIR}/plugins"
550              -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
551      )
552      set_tests_properties (H5REPACK_UD-${testname} PROPERTIES DEPENDS H5REPACK_UD-${testname}-clear-objects)
553      add_test (
554          NAME H5REPACK_UD-${testname}-h5dump
555          COMMAND "${CMAKE_COMMAND}"
556              -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
557              -D "TEST_ARGS:STRING=-pH;out-${testname}.${resultfile}"
558              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
559              -D "TEST_OUTPUT=${resultfile}-${testname}.out"
560              -D "TEST_EXPECT=0"
561              -D "TEST_REFERENCE=${resultfile}-${testname}.ddl"
562              -D "TEST_ENV_VAR=HDF5_PLUGIN_PATH"
563              -D "TEST_ENV_VALUE=${CMAKE_BINARY_DIR}/plugins"
564              -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
565      )
566      set_tests_properties (H5REPACK_UD-${testname}-h5dump PROPERTIES DEPENDS "H5REPACK_UD-${testname}")
567    endif ()
568  endmacro ()
569
570##############################################################################
571##############################################################################
572###           T H E   T E S T S                                            ###
573##############################################################################
574##############################################################################
575
576  # --------------------------------------------------------------------
577  # test file names
578  # --------------------------------------------------------------------
579  set (INFO_FILE testfiles/h5repack.info)
580
581  set (FILE0 h5repack_fill.h5)
582  set (FILE1 h5repack_objs.h5)
583  set (FILE2 h5repack_attr.h5)
584  set (FILE3 h5repack_hlink.h5)
585  set (FILE4 h5repack_layout.h5)
586  set (FILE5 h5repack_early.h5)
587  set (FILE7 h5repack_szip.h5)
588  set (FILE8 h5repack_deflate.h5)
589  set (FILE9 h5repack_shuffle.h5)
590  set (FILE10 h5repack_fletcher.h5)
591  set (FILE11 h5repack_filters.h5)
592  set (FILE12 h5repack_nbit.h5)
593  set (FILE13 h5repack_soffset.h5)
594  set (FILE14 h5repack_layouto.h5 )     # A file with an older version of the layout message (copy of test/tlayouto.h5)
595  set (FILE15 h5repack_named_dtypes.h5)
596  set (FILE16 tfamily%05d.h5)           # located in common testfiles folder
597  set (FILE18 h5repack_layout2.h5)
598  set (FILE_REF h5repack_refs.h5)
599  set (FILE_ATTR_REF h5repack_attr_refs.h5)
600
601  if (HDF5_ENABLE_USING_MEMCHECKER)
602    # Remove any output file left over from previous test run
603    set (LIST_TO_CLEAR
604        h5dump-help.out
605        h5repack_layout.h5-chunk_18x13-v.out
606        h5repack_layout.h5-chunk_18x13-v.out.err
607        h5repack_layout.h5-chunk_20x10-v.out
608        h5repack_layout.h5-chunk_20x10-v.out.err
609        h5repack_layout.h5-chunk_compa-v.out
610        h5repack_layout.h5-chunk_compa-v.out.err
611        h5repack_layout.h5-chunk_conti-v.out
612        h5repack_layout.h5-chunk_conti-v.out.err
613        h5repack_layout.h5-compa-v.out
614        h5repack_layout.h5-compa-v.out.err
615        h5repack_layout.h5-conti-v.out
616        h5repack_layout.h5-conti-v.out.err
617        h5repack_layout.h5-deflate_limit.out
618        h5repack_layout.h5-deflate_limit.out.err
619        h5repack_layout.h5-dset2_chunk_20x10-v.out
620        h5repack_layout.h5-dset2_chunk_20x10-v.out.err
621        h5repack_layout.h5-dset2_chunk_20x10-errstk.out
622        h5repack_layout.h5-dset2_chunk_20x10-errstk.out.err
623        h5repack_layout.h5-dset2_compa-v.out
624        h5repack_layout.h5-dset2_compa-v.out.err
625        h5repack_layout.h5-dset2_conti-v.out
626        h5repack_layout.h5-dset2_conti-v.out.err
627        h5repack_layout.h5-dset_compa_chunk-v.out
628        h5repack_layout.h5-dset_compa_chunk-v.out.err
629        h5repack_layout.h5-dset_compa_compa-v.out
630        h5repack_layout.h5-dset_compa_compa-v.out.err
631        h5repack_layout.h5-dset_compa_conti-v.out
632        h5repack_layout.h5-dset_compa_conti-v.out.err
633        h5repack_layout.h5-dset_conti_chunk-v.out
634        h5repack_layout.h5-dset_conti_chunk-v.out.err
635        h5repack_layout.h5-dset_conti_compa-v.out
636        h5repack_layout.h5-dset_conti_compa-v.out.err
637        h5repack_layout.h5-dset_conti_conti-v.out
638        h5repack_layout.h5-dset_conti_conti-v.out.err
639        h5repack_layout.h5-layout_long_switches-v.out
640        h5repack_layout.h5-layout_long_switches-v.out.err
641        h5repack_layout.h5-layout_short_switches-v.out
642        h5repack_layout.h5-layout_short_switches-v.out.err
643        h5repack_layout.h5-plugin_test.out
644        h5repack_layout.h5-plugin_test.out.err
645        h5repack_layout2.h5-contig_small_compa-v.out
646        h5repack_layout2.h5-contig_small_compa-v.out.err
647        h5repack_layout2.h5-contig_small_fixed_compa-v.out
648        h5repack_layout2.h5-contig_small_fixed_compa-v.out.err
649        h5repack_layout3.h5-ckdim_biger-v.out
650        h5repack_layout3.h5-ckdim_biger-v.out.err
651        h5repack_layout3.h5-ckdim_smaller-v.out
652        h5repack_layout3.h5-ckdim_smaller-v.out.err
653        h5repack_layout3.h5-chunk2chunk-v.out
654        h5repack_layout3.h5-chunk2chunk-v.out.err
655        h5repack_layout3.h5-chunk2compa-v.out
656        h5repack_layout3.h5-chunk2compa-v.out.err
657        h5repack_layout3.h5-chunk2conti-v.out
658        h5repack_layout3.h5-chunk2conti-v.out.err
659        h5repack_layout3.h5-error1-v.out
660        h5repack_layout3.h5-error1-v.out.err
661        h5repack_layout3.h5-error2-v.out
662        h5repack_layout3.h5-error2-v.out.err
663        h5repack_layout3.h5-error3-v.out
664        h5repack_layout3.h5-error3-v.out.err
665        out-family.tfamily%05d.h5
666        out-HDFFV-7840.h5diff_attr1.h5
667        out-attr.h5repack_attr.h5
668        out-native_attr.h5repack_attr.h5
669        out-HDFFV-5932.h5repack_attr_refs.h5
670        out-deflate_copy.h5repack_deflate.h5
671        out-deflate_remove.h5repack_deflate.h5
672        out-early.h5repack_early.h5
673        out-fill.h5repack_fill.h5
674        out-native_fill.h5repack_fill.h5
675        out-gzip_verbose_filters.h5repack_filters.h5
676        out-fletcher_copy.h5repack_fletcher.h5
677        out-fletcher_remove.h5repack_fletcher.h5
678        out-hlink.h5repack_hlink.h5
679        out-chunk_18x13.h5repack_layout.h5
680        out-chunk_20x10.h5repack_layout.h5
681        out-chunk_compa.h5repack_layout.h5
682        out-chunk_conti.h5repack_layout.h5
683        out-compa.h5repack_layout.h5
684        out-conti.h5repack_layout.h5
685        out-deflate_file.h5repack_layout.h5
686        out-deflate_limit.h5repack_layout.h5
687        out-dset2_chunk_20x10.h5repack_layout.h5
688        out-dset2_compa.h5repack_layout.h5
689        out-dset2_conti.h5repack_layout.h5
690        out-dset_compa_chunk.h5repack_layout.h5
691        out-dset_compa_compa.h5repack_layout.h5
692        out-dset_compa_conti.h5repack_layout.h5
693        out-dset_conti_chunk.h5repack_layout.h5
694        out-dset_conti_compa.h5repack_layout.h5
695        out-dset_conti_conti.h5repack_layout.h5
696        out-fletcher_all.h5repack_layout.h5
697        out-fletcher_individual.h5repack_layout.h5
698        out-global_filters.h5repack_layout.h5
699        out-gzip_all.h5repack_layout.h5
700        out-gzip_individual.h5repack_layout.h5
701        out-layout.h5repack_layout.h5
702        out-layout_long_switches.h5repack_layout.h5
703        out-layout_short_switches.h5repack_layout.h5
704        out-old_style_layout_short_switches.h5repack_layout.h5
705        out-plugin_test.h5repack_layout.h5
706        out-shuffle_all.h5repack_layout.h5
707        out-shuffle_individual.h5repack_layout.h5
708        out-upgrade_layout.h5repack_layouto.h5
709        out-contig_small_compa.h5repack_layout2.h5
710        out-contig_small_fixed_compa.h5repack_layout2.h5
711        out-ckdim_biger.h5repack_layout3.h5
712        out-ckdim_smaller.h5repack_layout3.h5
713        out-chunk2chunk.h5repack_layout3.h5
714        out-chunk2compa.h5repack_layout3.h5
715        out-chunk2conti.h5repack_layout3.h5
716        out-error1.h5repack_layout3.h5
717        out-error2.h5repack_layout3.h5
718        out-error3.h5repack_layout3.h5
719        out-error4.h5repack_layout3.h5
720        out-committed_dt.h5repack_named_dtypes.h5
721        out-nbit_add.h5repack_nbit.h5
722        out-nbit_copy.h5repack_nbit.h5
723        out-nbit_remove.h5repack_nbit.h5
724        out-add_alignment.h5repack_objs.h5
725        out-add_userblock.h5repack_objs.h5
726        out-objs.h5repack_objs.h5
727        out-gt_mallocsize.h5repack_objs.h5
728        out-bug1814.h5repack_refs.h5
729        out-shuffle_copy.h5repack_shuffle.h5
730        out-shuffle_remove.h5repack_shuffle.h5
731        out-scale_add.h5repack_soffset.h5
732        out-scale_copy.h5repack_soffset.h5
733        out-scale_remove.h5repack_soffset.h5
734        out-meta_short_M.meta_short.h5
735        out-meta_short_N.meta_short.h5
736        out-meta_long_M.meta_long.h5
737        out-meta_long_N.meta_long.h5
738    )
739
740    set (LIST_TO_CLEAR ${LIST_TO_CLEAR} ${LIST_OTHER_TEST_FILES})
741
742    foreach (h5_file ${LIST_HDF5_TEST_FILES})
743      get_filename_component(fname "${h5_file}" NAME)
744      set (LIST_TO_CLEAR ${LIST_TO_CLEAR}
745           ${h5_file}.h5
746      )
747    endforeach ()
748
749    foreach (h5_file ${LIST_TST_TEST_FILES})
750      get_filename_component(fname "${h5_file}" NAME)
751      set (LIST_TO_CLEAR ${LIST_TO_CLEAR}
752           ${h5_file}.tst.out
753           ${h5_file}.tst.out.err
754      )
755    endforeach ()
756
757    foreach (h5_file ${LIST_DDL_TEST_FILES})
758      get_filename_component(fname "${h5_file}" NAME)
759      set (LIST_TO_CLEAR ${LIST_TO_CLEAR}
760           ${h5_file}.ddl.out
761           ${h5_file}.ddl.out.err
762      )
763    endforeach ()
764    add_test (
765        NAME H5REPACK-clearall-objects
766        COMMAND ${CMAKE_COMMAND} -E remove ${LIST_TO_CLEAR}
767    )
768    set_tests_properties (H5REPACK-clearall-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles")
769    if (NOT "${last_test}" STREQUAL "")
770      set_tests_properties (H5REPACK-clearall-objects PROPERTIES DEPENDS ${last_test})
771    endif ()
772  endif ()
773
774  ADD_HELP_TEST(help 0 -h)
775
776  add_test (NAME H5REPACK-testh5repack_detect_szip COMMAND $<TARGET_FILE:testh5repack_detect_szip>)
777  if (HDF5_ENABLE_SZIP_SUPPORT)
778    if (HDF5_ENABLE_SZIP_ENCODING)
779      set (passRegex "yes")
780      set_tests_properties (H5REPACK-testh5repack_detect_szip PROPERTIES PASS_REGULAR_EXPRESSION "yes")
781    else ()
782      set (passRegex "no")
783      set_tests_properties (H5REPACK-testh5repack_detect_szip PROPERTIES PASS_REGULAR_EXPRESSION "no")
784    endif ()
785  else ()
786    set (passRegex "no")
787    set_tests_properties (H5REPACK-testh5repack_detect_szip PROPERTIES PASS_REGULAR_EXPRESSION "no")
788  endif ()
789  set_tests_properties (H5REPACK-testh5repack_detect_szip PROPERTIES DEPENDS H5REPACK-clearall-objects)
790
791  add_test (NAME H5REPACK-h5repacktest COMMAND $<TARGET_FILE:h5repacktest>)
792  set_tests_properties (H5REPACK-h5repacktest PROPERTIES DEPENDS H5REPACK-testh5repack_detect_szip)
793  set (last_test "H5REPACK-h5repacktest")
794
795#
796# The tests
797# We use the files generated by h5repacktst
798# Each run generates "<file>.out.h5" and the tool h5diff is used to
799# compare the input and output files
800#
801# the tests are the same as the program h5repacktst, but run from the CLI
802#
803
804# See which filters are usable (and skip tests for filters we
805# don't have).  Do this by searching H5pubconf.h to see which
806# filters are defined.
807
808# detect whether the encoder is present.
809#  set (USE_FILTER_SZIP_ENCODER 0)
810  if (HDF5_ENABLE_SZIP_ENCODING)
811    set (USE_FILTER_SZIP_ENCODER ${testh5repack_detect_szip})
812  endif ()
813
814  if (H5_HAVE_FILTER_DEFLATE)
815    set (USE_FILTER_DEFLATE 1)
816  endif ()
817
818  if (H5_HAVE_FILTER_SZIP)
819    set (USE_FILTER_SZIP 1)
820  endif ()
821
822# copy files (these files have no filters)
823  ADD_H5_TEST (fill "TEST" ${FILE0})
824  ADD_H5_TEST (objs "TEST" ${FILE1})
825  ADD_H5_TEST (attr "TEST" ${FILE2})
826  ADD_H5_TEST (hlink "TEST" ${FILE3})
827  ADD_H5_TEST (layout "TEST" ${FILE4})
828  ADD_H5_TEST (early "TEST" ${FILE5})
829
830# use $FILE4 to write some filters  (this file has  no filters)
831
832# gzip with individual object
833  set (arg ${FILE4} -f dset1:GZIP=1  -l dset1:CHUNK=20x10)
834  set (TESTTYPE "TEST")
835  if (NOT USE_FILTER_DEFLATE)
836    set (TESTTYPE "SKIP")
837  endif ()
838  ADD_H5_TEST (gzip_individual ${TESTTYPE} ${arg})
839
840# gzip for all
841  set (arg ${FILE4} -f GZIP=1)
842  set (TESTTYPE "TEST")
843  if (NOT USE_FILTER_DEFLATE)
844    set (TESTTYPE "SKIP")
845  endif ()
846  ADD_H5_TEST (gzip_all ${TESTTYPE} ${arg})
847
848# szip with individual object
849  set (arg ${FILE4} -f dset2:SZIP=8,EC  -l dset2:CHUNK=20x10)
850  set (TESTTYPE "TEST")
851  if (NOT USE_FILTER_SZIP_ENCODER)
852    if (NOT USE_FILTER_SZIP)
853      set (TESTTYPE "SKIP")
854    endif ()
855  endif ()
856  ADD_H5_TEST (szip_individual ${TESTTYPE} ${arg})
857
858# szip for all
859  set (arg ${FILE4} -f SZIP=8,NN)
860  set (TESTTYPE "TEST")
861  if (NOT USE_FILTER_SZIP_ENCODER)
862    if (NOT USE_FILTER_SZIP)
863      set (TESTTYPE "SKIP")
864    endif ()
865  endif ()
866  ADD_H5_TEST (szip_all ${TESTTYPE} ${arg})
867
868# shuffle with individual object
869  set (arg ${FILE4} -f dset2:SHUF  -l dset2:CHUNK=20x10)
870  ADD_H5_TEST (shuffle_individual "TEST" ${arg})
871
872# shuffle for all
873  set (arg ${FILE4} -f SHUF)
874  ADD_H5_TEST (shuffle_all "TEST" ${arg})
875
876# fletcher32  with individual object
877  set (arg ${FILE4} -f dset2:FLET  -l dset2:CHUNK=20x10)
878  ADD_H5_TEST (fletcher_individual "TEST" ${arg})
879
880# fletcher32 for all
881  set (arg ${FILE4} -f FLET)
882  ADD_H5_TEST (fletcher_all "TEST" ${arg})
883
884# all filters
885  set (arg ${FILE4} -f dset2:SHUF -f dset2:FLET -f dset2:SZIP=8,NN -f dset2:GZIP=1 -l dset2:CHUNK=20x10)
886  set (TESTTYPE "TEST")
887  if (NOT USE_FILTER_SZIP_ENCODER)
888    if (NOT USE_FILTER_SZIP OR NOT USE_FILTER_DEFLATE)
889      set (TESTTYPE "SKIP")
890    endif ()
891  endif ()
892  ADD_H5_TEST (all_filters ${TESTTYPE} ${arg})
893
894# verbose gzip with individual object
895  set (arg ${FILE11} -v -f /dset_deflate:GZIP=9)
896  set (TESTTYPE "TEST")
897  if (NOT USE_FILTER_DEFLATE)
898    set (TESTTYPE "SKIP")
899  endif ()
900  ADD_H5_CMP_TEST (gzip_verbose_filters "O?...ing file[^\n]+\n" ${TESTTYPE} 0 ${arg})
901
902###########################################################
903# the following tests assume the input files have filters
904###########################################################
905
906# szip copy
907  set (arg ${FILE7})
908  set (TESTTYPE "TEST")
909  if (NOT USE_FILTER_SZIP_ENCODER)
910    if (NOT USE_FILTER_SZIP)
911      set (TESTTYPE "SKIP")
912    endif ()
913  endif ()
914  ADD_H5_TEST (szip_copy ${TESTTYPE} ${arg})
915
916# szip remove
917  set (arg ${FILE7} --filter=dset_szip:NONE)
918  set (TESTTYPE "TEST")
919  if (NOT USE_FILTER_SZIP_ENCODER)
920    if (NOT USE_FILTER_SZIP)
921      set (TESTTYPE "SKIP")
922    endif ()
923  endif ()
924  ADD_H5_TEST (szip_remove ${TESTTYPE} ${arg})
925
926# deflate copy
927  set (arg ${FILE8})
928  set (TESTTYPE "TEST")
929  if (NOT USE_FILTER_DEFLATE)
930    set (TESTTYPE "SKIP")
931  endif ()
932  ADD_H5_TEST (deflate_copy ${TESTTYPE} ${arg})
933
934# deflate remove
935  set (arg ${FILE8} -f dset_deflate:NONE)
936  set (TESTTYPE "TEST")
937  if (NOT USE_FILTER_DEFLATE)
938    set (TESTTYPE "SKIP")
939  endif ()
940  ADD_H5_TEST (deflate_remove ${TESTTYPE} ${arg})
941
942# shuffle copy
943  set (arg ${FILE9})
944  ADD_H5_TEST (shuffle_copy "TEST" ${arg})
945
946# shuffle remove
947  set (arg ${FILE9} -f dset_shuffle:NONE)
948  ADD_H5_TEST (shuffle_remove "TEST" ${arg})
949
950# fletcher32 copy
951  set (arg ${FILE10})
952  ADD_H5_TEST (fletcher_copy "TEST" ${arg})
953
954# fletcher32 remove
955  set (arg ${FILE10} -f dset_fletcher32:NONE)
956  ADD_H5_TEST (fletcher_remove "TEST" ${arg})
957
958# nbit copy
959  set (arg ${FILE12})
960  ADD_H5_TEST (nbit_copy "TEST" ${arg})
961
962# nbit remove
963  set (arg ${FILE12} -f dset_nbit:NONE)
964  ADD_H5_TEST (nbit_remove "TEST" ${arg})
965
966# nbit add
967  set (arg ${FILE12} -f dset_int31:NBIT)
968  ADD_H5_TEST (nbit_add "TEST" ${arg})
969
970# scaleoffset copy
971  set (arg ${FILE13})
972  ADD_H5_TEST (scale_copy "TEST" ${arg})
973
974# scaleoffset add
975  set (arg ${FILE13} -f dset_none:SOFF=31,IN)
976  ADD_H5_TEST (scale_add "TEST" ${arg})
977
978# scaleoffset remove
979  set (arg ${FILE13} -f dset_scaleoffset:NONE)
980  ADD_H5_TEST (scale_remove "TEST" ${arg})
981
982# remove all  filters
983  set (arg ${FILE11} -f NONE)
984  set (TESTTYPE "TEST")
985  if (NOT USE_FILTER_SZIP_ENCODER)
986    if (NOT USE_FILTER_SZIP OR NOT USE_FILTER_DEFLATE)
987      set (TESTTYPE "SKIP")
988    endif ()
989  endif ()
990  ADD_H5_TEST (remove_all ${TESTTYPE} ${arg})
991
992#filter conversions
993  set (arg ${FILE8} -f dset_deflate:SZIP=8,NN)
994  set (TESTTYPE "TEST")
995  if (NOT USE_FILTER_SZIP_ENCODER)
996    if (NOT USE_FILTER_SZIP OR NOT USE_FILTER_DEFLATE)
997      set (TESTTYPE "SKIP")
998    endif ()
999  endif ()
1000  ADD_H5_TEST (deflate_convert ${TESTTYPE} ${arg})
1001
1002  set (arg ${FILE7} -f dset_szip:GZIP=1)
1003  set (TESTTYPE "TEST")
1004  if (NOT USE_FILTER_SZIP_ENCODER)
1005    if (NOT USE_FILTER_SZIP OR NOT USE_FILTER_DEFLATE)
1006      set (TESTTYPE "SKIP")
1007    endif ()
1008  endif ()
1009  ADD_H5_TEST (szip_convert ${TESTTYPE} ${arg})
1010
1011#limit
1012  set (arg ${FILE4} -f GZIP=1 -m 1024)
1013  set (TESTTYPE "TEST")
1014  if (NOT USE_FILTER_DEFLATE)
1015    set (TESTTYPE "SKIP")
1016  endif ()
1017  ADD_H5_DMP_TEST (deflate_limit ${TESTTYPE} 0 ${arg})
1018
1019#file
1020  set (arg ${FILE4} -e ${INFO_FILE})
1021  set (TESTTYPE "TEST")
1022  if (NOT USE_FILTER_DEFLATE)
1023    set (TESTTYPE "SKIP")
1024  endif ()
1025  ADD_H5_TEST (deflate_file ${TESTTYPE} ${arg})
1026
1027#crtorder
1028  set (arg tordergr.h5 -L)
1029  set (TESTTYPE "TEST")
1030  ADD_H5_DMP_TEST (crtorder ${TESTTYPE} 0 ${arg})
1031
1032#########################################################
1033# layout options (these files have no filters)
1034#########################################################
1035  ADD_H5_VERIFY_TEST (dset2_chunk_20x10 "TEST" 0 ${FILE4} dset2 CHUNKED --layout=dset2:CHUNK=20x10)
1036  ADD_H5_VERIFY_TEST (chunk_20x10 "TEST" 1 ${FILE4} null CHUNKED -l CHUNK=20x10)
1037  ADD_H5_VERIFY_TEST (dset2_conti "TEST" 0 ${FILE4} dset2 CONTIGUOUS -l dset2:CONTI)
1038  ADD_H5_VERIFY_TEST (conti "TEST" 1 ${FILE4} null CONTIGUOUS -l CONTI)
1039  ADD_H5_VERIFY_TEST (dset2_compa "TEST" 0 ${FILE4} dset2 COMPACT -l dset2:COMPA)
1040  ADD_H5_VERIFY_TEST (compa "TEST" 1 ${FILE4} null COMPACT -l COMPA)
1041  ADD_H5_MASK_TEST (dset2_chunk_20x10-errstk "TEST" 0 ${FILE4} --layout=dset2:CHUNK=20x10x5 --enable-error-stack)
1042
1043################################################################
1044# layout conversions (file has no filters)
1045###############################################################
1046  ADD_H5_VERIFY_TEST (dset_compa_conti "TEST" 0 ${FILE4} dset_compact CONTIGUOUS -l dset_compact:CONTI)
1047  ADD_H5_VERIFY_TEST (dset_compa_chunk "TEST" 0 ${FILE4} dset_compact CHUNKED -l dset_compact:CHUNK=2x5)
1048  ADD_H5_VERIFY_TEST (dset_compa_compa "TEST" 0 ${FILE4} dset_compact COMPACT -l dset_compact:COMPA)
1049  ADD_H5_VERIFY_TEST (dset_conti_compa "TEST" 0 ${FILE4} dset_contiguous COMPACT -l dset_contiguous:COMPA)
1050  ADD_H5_VERIFY_TEST (dset_conti_chunk "TEST" 0 ${FILE4} dset_contiguous CHUNKED -l dset_contiguous:CHUNK=3x6)
1051  ADD_H5_VERIFY_TEST (dset_conti_conti "TEST" 0 ${FILE4} dset_contiguous CONTIGUOUS -l dset_contiguous:CONTI)
1052  ADD_H5_VERIFY_TEST (chunk_compa "TEST" 0 ${FILE4} dset_chunk COMPACT -l dset_chunk:COMPA)
1053  ADD_H5_VERIFY_TEST (chunk_conti "TEST" 0 ${FILE4} dset_chunk CONTIGUOUS -l dset_chunk:CONTI)
1054  ADD_H5_VERIFY_TEST (chunk_18x13 "TEST" 0 ${FILE4} dset_chunk CHUNKED -l dset_chunk:CHUNK=18x13)
1055
1056# test convert small size dataset ( < 1k) to compact layout without -m
1057  ADD_H5_VERIFY_TEST (contig_small_compa "TEST" 0 ${FILE18} contig_small COMPACT -l contig_small:COMPA)
1058  ADD_H5_VERIFY_TEST (contig_small_fixed_compa "TEST" 0 ${FILE18} chunked_small_fixed COMPACT -l chunked_small_fixed:COMPA)
1059
1060#---------------------------------------------------------------------------
1061# Test file contains chunked datasets (need multiple dsets) with
1062# unlimited max dims.   (HDFFV-7933)
1063# Use first dset to test.
1064#---------------------------------------------------------------------------
1065# chunk to chunk - specify chunk dim bigger than any current dim
1066  ADD_H5_VERIFY_TEST (chunk2chunk "TEST" 0 h5repack_layout3.h5 chunk_unlimit1 CHUNK -l chunk_unlimit1:CHUNK=100x300)
1067
1068# chunk to contiguous
1069  ADD_H5_VERIFY_TEST (chunk2conti "TEST" 0 h5repack_layout3.h5 chunk_unlimit1 CONTI -l chunk_unlimit1:CONTI)
1070
1071# chunk to compact - convert big dataset (should be > 64k) for this purpose,
1072# should remain as original layout (chunk)
1073  ADD_H5_VERIFY_TEST (chunk2compa "TEST" 0 h5repack_layout3.h5 chunk_unlimit1 CHUNK -l chunk_unlimit1:COMPA)
1074
1075#--------------------------------------------------------------------------
1076# Test -f for some specific cases. Chunked dataset with unlimited max dims.
1077# (HDFFV-8012)
1078#--------------------------------------------------------------------------
1079# - should not fail
1080# - should not change max dims from unlimit
1081
1082# chunk dim is bigger than dataset dim. ( dset size < 64k )
1083  ADD_H5_VERIFY_TEST (error1 "TEST" 0 h5repack_layout3.h5 chunk_unlimit1 H5S_UNLIMITED -f chunk_unlimit1:NONE)
1084
1085# chunk dim is bigger than dataset dim. ( dset size > 64k )
1086  ADD_H5_VERIFY_TEST (error2 "TEST" 0 h5repack_layout3.h5 chunk_unlimit2 H5S_UNLIMITED -f chunk_unlimit2:NONE)
1087
1088# chunk dims are smaller than dataset dims. ( dset size < 64k )
1089  ADD_H5_VERIFY_TEST (error3 "TEST" 0 h5repack_layout3.h5 chunk_unlimit3 H5S_UNLIMITED -f chunk_unlimit3:NONE)
1090
1091# file input - should not fail
1092  ADD_H5_TEST (error4 "TEST" h5repack_layout3.h5 -f NONE)
1093
1094#--------------------------------------------------------------------------
1095# Test base: Convert CHUNK to CONTI for a chunked dataset with small dataset
1096# (dset size < 64K) and with unlimited max dims on a condition as follow.
1097# (HDFFV-8214)
1098#--------------------------------------------------------------------------
1099# chunk dim is bigger than dataset dim. should succeed.
1100  ADD_H5_VERIFY_TEST (ckdim_biger "TEST" 0 h5repack_layout3.h5 chunk_unlimit2 CONTI -l chunk_unlimit2:CONTI)
1101# chunk dim is smaller than dataset dim. should succeed.
1102  ADD_H5_VERIFY_TEST (ckdim_smaller "TEST" 0 h5repack_layout3.h5 chunk_unlimit3 CONTI -l chunk_unlimit3:CONTI)
1103
1104
1105
1106# Native option
1107# Do not use FILE1, as the named dtype will be converted to native, and h5diff will
1108# report a difference.
1109  ADD_H5_TEST (native_fill "TEST" ${FILE0} -n)
1110  ADD_H5_TEST (native_attr "TEST" ${FILE2} -n)
1111
1112# latest file format with long switches. use FILE4=h5repack_layout.h5 (no filters)
1113  set (arg --layout CHUNK=20x10 --filter GZIP=1 --minimum=10 --native --latest --compact=8 --indexed=6 --ssize=8[:dtype])
1114  set (TESTTYPE "TEST")
1115  if (NOT USE_FILTER_DEFLATE)
1116    set (TESTTYPE "SKIP")
1117  endif ()
1118  ADD_H5_VERIFY_TEST (layout_long_switches ${TESTTYPE} 1 ${FILE4} null CHUNKED ${arg})
1119
1120# latest file format with short switches. use FILE4=h5repack_layout.h5 (no filters)
1121  set (arg -l CHUNK=20x10 -f GZIP=1 -m 10 -n -L -c 8 -d 6 -s 8[:dtype])
1122  set (TESTTYPE "TEST")
1123  if (NOT USE_FILTER_DEFLATE)
1124    set (TESTTYPE "SKIP")
1125  endif ()
1126  ADD_H5_VERIFY_TEST (layout_short_switches ${TESTTYPE} 1 ${FILE4} null CHUNKED ${arg})
1127
1128# several global filters
1129  set (arg ${FILE4} --filter GZIP=1 --filter SHUF)
1130  set (TESTTYPE "TEST")
1131  if (NOT USE_FILTER_DEFLATE)
1132    set (TESTTYPE "SKIP")
1133  endif ()
1134  ADD_H5_TEST (global_filters ${TESTTYPE} ${arg})
1135
1136# syntax of -i infile -o outfile
1137# latest file format with short switches. use FILE4=h5repack_layout.h5 (no filters)
1138  set (arg ${FILE4} -l CHUNK=20x10 -f GZIP=1 -m 10 -n -L -c 8 -d 6 -s 8[:dtype])
1139  set (TESTTYPE "LEGACY")
1140  if (NOT USE_FILTER_DEFLATE)
1141    set (TESTTYPE "SKIP")
1142  endif ()
1143  ADD_H5_TEST_OLD (old_style_layout_short_switches ${TESTTYPE} ${arg})
1144
1145# add a userblock to file
1146  set (arg ${FILE1} -u ${PROJECT_BINARY_DIR}/testfiles/ublock.bin -b 2048)
1147  ADD_H5_TEST (add_userblock "TEST" ${arg})
1148
1149# add alignment
1150  set (arg ${FILE1} -t 1 -a 1)
1151  ADD_H5_TEST (add_alignment "TEST" ${arg})
1152
1153# Check repacking file with old version of layout message (should get upgraded
1154# to new version and be readable, etc.)
1155  ADD_H5_TEST (upgrade_layout "TEST" ${FILE14})
1156
1157# test for datum size > H5TOOLS_MALLOCSIZE
1158  if (NOT USE_FILTER_DEFLATE)
1159    set (TESTTYPE "SKIP")
1160  endif ()
1161  ADD_H5_TEST (gt_mallocsize ${TESTTYPE} ${FILE1} -f GZIP=1)
1162
1163# Check repacking file with committed datatypes in odd configurations
1164  ADD_H5_TEST (committed_dt "TEST" ${FILE15})
1165
1166# tests family driver (file is located in common testfiles folder, uses TOOLTEST1
1167  ADD_H5_TEST (family "TEST" ${FILE16})
1168
1169# test various references (bug 1814 and 1726)
1170  ADD_H5_TEST (bug1814 "TEST" ${FILE_REF})
1171
1172# test attribute with various references (bug1797 / HDFFV-5932)
1173# the references in attribute of compund or vlen datatype
1174  ADD_H5_TEST (HDFFV-5932 "TEST" ${FILE_ATTR_REF})
1175
1176# Add test for memory leak in attirbute. This test is verified by CTEST.
1177# 1. leak from vlen string
1178# 2. leak from compound type without reference member
1179# (HDFFV-7840, )
1180# Note: this test is experimental for sharing test file among tools
1181  ADD_H5_TEST (HDFFV-7840 "TEST" h5diff_attr1.h5)
1182
1183# tests for metadata block size option ('-M')
1184  ADD_H5_TEST_META (meta_short h5repack_layout.h5 -M 8192)
1185  ADD_H5_TEST_META (meta_long h5repack_layout.h5 --metadata_block_size=8192)
1186
1187##############################################################################
1188###    P L U G I N  T E S T S
1189##############################################################################
1190  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})
1191  ADD_H5_UD_TEST (plugin_test 0 h5repack_layout.h5 -v -f UD=257,0,1,9)
1192  ADD_H5_UD_TEST (plugin_none 0 h5repack_layout.UD.h5 -v -f NONE)
1193  # check for no parameters
1194  ADD_H5_UD_TEST (plugin_zero 0 h5repack_layout.h5 -v -f UD=250,0,0)
1195
1196  if (HDF5_TEST_VFD)
1197    # Run test with different Virtual File Driver
1198    foreach (vfd ${VFD_LIST})
1199      ADD_VFD_TEST (${vfd} 0)
1200    endforeach ()
1201  endif ()
1202