1#! /bin/sh
2#
3# Copyright by The HDF Group.
4# Copyright by the Board of Trustees of the University of Illinois.
5# All rights reserved.
6#
7# This file is part of HDF5.  The full HDF5 copyright notice, including
8# terms governing use, modification, and redistribution, is contained in
9# the COPYING file, which can be found at the root of the source code
10# distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases.
11# If you do not have access to either file, you may request a copy from
12# help@hdfgroup.org.
13#
14# Tests for the h5diff tool
15#
16# Modification:
17#   Albert Cheng, 2005/08/17
18#   Added the SKIP feature.
19#   Albert Cheng, 2005/2/3
20#   Added -p option for parallel h5diff tests.
21#   Pedro Vicente Nunes:
22#    10/25/2005: Added test #9
23#    11/27/2006: Added test #10, #11
24#   Jonathan Kim:
25#    Improved to use single line
26#    Improved to check exit code (only serial mode, not necessary for parallel)
27#    Added test 400 - 425  (links with --follow-symlinks option)
28#    Added test 450 - 459  (dangling links)
29
30srcdir=@srcdir@
31
32TESTNAME=h5diff
33EXIT_SUCCESS=0
34EXIT_FAILURE=1
35
36H5DIFF=../../src/h5diff/h5diff               # The tool name
37H5DIFF_BIN=`pwd`/$H5DIFF    # The path of the tool binary
38
39RM='rm -rf'
40CMP='cmp -s'
41DIFF='diff -c'
42CP='cp'
43DIRNAME='dirname'
44LS='ls'
45AWK='awk'
46
47nerrors=0
48verbose=yes
49h5haveexitcode=yes        # default is yes
50pmode=                # default to run h5diff tests
51mydomainname=`domainname 2>/dev/null`
52
53# source dirs
54SRC_TOOLS="$srcdir/../.."
55SRC_TOOLS_TESTFILES="$SRC_TOOLS/testfiles"
56# testfiles source dirs for tools
57SRC_H5LS_TESTFILES="$SRC_TOOLS_TESTFILES"
58SRC_H5DUMP_TESTFILES="$SRC_TOOLS_TESTFILES"
59SRC_H5DIFF_TESTFILES="$SRC_TOOLS/test/h5diff/testfiles"
60SRC_H5COPY_TESTFILES="$SRC_TOOLS/test/h5copy/testfiles"
61SRC_H5REPACK_TESTFILES="$SRC_TOOLS/test/h5repack/testfiles"
62SRC_H5JAM_TESTFILES="$SRC_TOOLS/test/h5jam/testfiles"
63SRC_H5STAT_TESTFILES="$SRC_TOOLS/test/h5stat/testfiles"
64SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/test/h5import/testfiles"
65
66TESTDIR=./testfiles
67test -d $TESTDIR || mkdir $TESTDIR
68
69######################################################################
70# test files
71# --------------------------------------------------------------------
72# All the test files copy from source directory to test directory
73# NOTE: Keep this framework to add/remove test files.
74#       Any test files from other tools can be used in this framework.
75#       This list are also used for checking exist.
76#       Comment '#' without space can be used.
77# --------------------------------------------------------------------
78LIST_HDF5_TEST_FILES="
79$SRC_H5DIFF_TESTFILES/h5diff_basic1.h5
80$SRC_H5DIFF_TESTFILES/h5diff_basic2.h5
81$SRC_H5DIFF_TESTFILES/h5diff_types.h5
82$SRC_H5DIFF_TESTFILES/h5diff_dtypes.h5
83$SRC_H5DIFF_TESTFILES/h5diff_attr1.h5
84$SRC_H5DIFF_TESTFILES/h5diff_attr2.h5
85$SRC_H5DIFF_TESTFILES/h5diff_attr3.h5
86$SRC_H5DIFF_TESTFILES/h5diff_dset1.h5
87$SRC_H5DIFF_TESTFILES/h5diff_dset2.h5
88$SRC_H5DIFF_TESTFILES/h5diff_hyper1.h5
89$SRC_H5DIFF_TESTFILES/h5diff_hyper2.h5
90$SRC_H5DIFF_TESTFILES/h5diff_empty.h5
91$SRC_H5DIFF_TESTFILES/h5diff_links.h5
92$SRC_H5DIFF_TESTFILES/h5diff_softlinks.h5
93$SRC_H5DIFF_TESTFILES/h5diff_linked_softlink.h5
94$SRC_H5DIFF_TESTFILES/h5diff_extlink_src.h5
95$SRC_H5DIFF_TESTFILES/h5diff_extlink_trg.h5
96$SRC_H5DIFF_TESTFILES/h5diff_ext2softlink_src.h5
97$SRC_H5DIFF_TESTFILES/h5diff_ext2softlink_trg.h5
98$SRC_H5DIFF_TESTFILES/h5diff_dset_zero_dim_size1.h5
99$SRC_H5DIFF_TESTFILES/h5diff_dset_zero_dim_size2.h5
100$SRC_H5DIFF_TESTFILES/h5diff_danglelinks1.h5
101$SRC_H5DIFF_TESTFILES/h5diff_danglelinks2.h5
102$SRC_H5DIFF_TESTFILES/h5diff_grp_recurse1.h5
103$SRC_H5DIFF_TESTFILES/h5diff_grp_recurse2.h5
104$SRC_H5DIFF_TESTFILES/h5diff_grp_recurse_ext1.h5
105$SRC_H5DIFF_TESTFILES/h5diff_grp_recurse_ext2-1.h5
106$SRC_H5DIFF_TESTFILES/h5diff_grp_recurse_ext2-2.h5
107$SRC_H5DIFF_TESTFILES/h5diff_grp_recurse_ext2-3.h5
108$SRC_H5DIFF_TESTFILES/h5diff_exclude1-1.h5
109$SRC_H5DIFF_TESTFILES/h5diff_exclude1-2.h5
110$SRC_H5DIFF_TESTFILES/h5diff_exclude2-1.h5
111$SRC_H5DIFF_TESTFILES/h5diff_exclude2-2.h5
112$SRC_H5DIFF_TESTFILES/h5diff_exclude3-1.h5
113$SRC_H5DIFF_TESTFILES/h5diff_exclude3-2.h5
114$SRC_H5DIFF_TESTFILES/h5diff_comp_vl_strs.h5
115$SRC_H5DIFF_TESTFILES/compounds_array_vlen1.h5
116$SRC_H5DIFF_TESTFILES/compounds_array_vlen2.h5
117$SRC_H5DIFF_TESTFILES/h5diff_attr_v_level1.h5
118$SRC_H5DIFF_TESTFILES/h5diff_attr_v_level2.h5
119$SRC_H5DIFF_TESTFILES/h5diff_enum_invalid_values.h5
120$SRC_H5DIFF_TESTFILES/non_comparables1.h5
121$SRC_H5DIFF_TESTFILES/non_comparables2.h5
122$SRC_H5DIFF_TESTFILES/diff_strings1.h5
123$SRC_H5DIFF_TESTFILES/diff_strings2.h5
124$SRC_TOOLS_TESTFILES/tvlstr.h5
125"
126
127LIST_HDF5_VDS_TEST_FILES="
128$SRC_TOOLS_TESTFILES/vds/1_a.h5
129$SRC_TOOLS_TESTFILES/vds/1_b.h5
130$SRC_TOOLS_TESTFILES/vds/1_c.h5
131$SRC_TOOLS_TESTFILES/vds/1_d.h5
132$SRC_TOOLS_TESTFILES/vds/1_e.h5
133$SRC_TOOLS_TESTFILES/vds/1_f.h5
134$SRC_TOOLS_TESTFILES/vds/1_vds.h5
135$SRC_TOOLS_TESTFILES/vds/2_a.h5
136$SRC_TOOLS_TESTFILES/vds/2_b.h5
137$SRC_TOOLS_TESTFILES/vds/2_c.h5
138$SRC_TOOLS_TESTFILES/vds/2_d.h5
139$SRC_TOOLS_TESTFILES/vds/2_e.h5
140$SRC_TOOLS_TESTFILES/vds/2_vds.h5
141$SRC_TOOLS_TESTFILES/vds/3_1_vds.h5
142$SRC_TOOLS_TESTFILES/vds/3_2_vds.h5
143$SRC_TOOLS_TESTFILES/vds/4_0.h5
144$SRC_TOOLS_TESTFILES/vds/4_1.h5
145$SRC_TOOLS_TESTFILES/vds/4_2.h5
146$SRC_TOOLS_TESTFILES/vds/4_vds.h5
147$SRC_TOOLS_TESTFILES/vds/5_a.h5
148$SRC_TOOLS_TESTFILES/vds/5_b.h5
149$SRC_TOOLS_TESTFILES/vds/5_c.h5
150$SRC_TOOLS_TESTFILES/vds/5_vds.h5
151"
152
153LIST_OTHER_TEST_FILES="
154$SRC_H5DIFF_TESTFILES/h5diff_10.txt
155$SRC_H5DIFF_TESTFILES/h5diff_100.txt
156$SRC_H5DIFF_TESTFILES/h5diff_101.txt
157$SRC_H5DIFF_TESTFILES/h5diff_102.txt
158$SRC_H5DIFF_TESTFILES/h5diff_103.txt
159$SRC_H5DIFF_TESTFILES/h5diff_104.txt
160$SRC_H5DIFF_TESTFILES/h5diff_11.txt
161$SRC_H5DIFF_TESTFILES/h5diff_12.txt
162$SRC_H5DIFF_TESTFILES/h5diff_13.txt
163$SRC_H5DIFF_TESTFILES/h5diff_14.txt
164$SRC_H5DIFF_TESTFILES/h5diff_15.txt
165$SRC_H5DIFF_TESTFILES/h5diff_16_1.txt
166$SRC_H5DIFF_TESTFILES/h5diff_16_2.txt
167$SRC_H5DIFF_TESTFILES/h5diff_16_3.txt
168$SRC_H5DIFF_TESTFILES/h5diff_17.txt
169$SRC_H5DIFF_TESTFILES/h5diff_171.txt
170$SRC_H5DIFF_TESTFILES/h5diff_172.txt
171$SRC_H5DIFF_TESTFILES/h5diff_18_1.txt
172$SRC_H5DIFF_TESTFILES/h5diff_18.txt
173$SRC_H5DIFF_TESTFILES/h5diff_20.txt
174$SRC_H5DIFF_TESTFILES/h5diff_200.txt
175$SRC_H5DIFF_TESTFILES/h5diff_201.txt
176$SRC_H5DIFF_TESTFILES/h5diff_202.txt
177$SRC_H5DIFF_TESTFILES/h5diff_203.txt
178$SRC_H5DIFF_TESTFILES/h5diff_204.txt
179$SRC_H5DIFF_TESTFILES/h5diff_205.txt
180$SRC_H5DIFF_TESTFILES/h5diff_206.txt
181$SRC_H5DIFF_TESTFILES/h5diff_207.txt
182$SRC_H5DIFF_TESTFILES/h5diff_208.txt
183$SRC_H5DIFF_TESTFILES/h5diff_220.txt
184$SRC_H5DIFF_TESTFILES/h5diff_221.txt
185$SRC_H5DIFF_TESTFILES/h5diff_222.txt
186$SRC_H5DIFF_TESTFILES/h5diff_223.txt
187$SRC_H5DIFF_TESTFILES/h5diff_224.txt
188$SRC_H5DIFF_TESTFILES/h5diff_21.txt
189$SRC_H5DIFF_TESTFILES/h5diff_22.txt
190$SRC_H5DIFF_TESTFILES/h5diff_23.txt
191$SRC_H5DIFF_TESTFILES/h5diff_24.txt
192$SRC_H5DIFF_TESTFILES/h5diff_25.txt
193$SRC_H5DIFF_TESTFILES/h5diff_26.txt
194$SRC_H5DIFF_TESTFILES/h5diff_27.txt
195$SRC_H5DIFF_TESTFILES/h5diff_28.txt
196$SRC_H5DIFF_TESTFILES/h5diff_30.txt
197$SRC_H5DIFF_TESTFILES/h5diff_300.txt
198$SRC_H5DIFF_TESTFILES/h5diff_400.txt
199$SRC_H5DIFF_TESTFILES/h5diff_401.txt
200$SRC_H5DIFF_TESTFILES/h5diff_402.txt
201$SRC_H5DIFF_TESTFILES/h5diff_403.txt
202$SRC_H5DIFF_TESTFILES/h5diff_404.txt
203$SRC_H5DIFF_TESTFILES/h5diff_405.txt
204$SRC_H5DIFF_TESTFILES/h5diff_406.txt
205$SRC_H5DIFF_TESTFILES/h5diff_407.txt
206$SRC_H5DIFF_TESTFILES/h5diff_408.txt
207$SRC_H5DIFF_TESTFILES/h5diff_409.txt
208$SRC_H5DIFF_TESTFILES/h5diff_410.txt
209$SRC_H5DIFF_TESTFILES/h5diff_411.txt
210$SRC_H5DIFF_TESTFILES/h5diff_412.txt
211$SRC_H5DIFF_TESTFILES/h5diff_413.txt
212$SRC_H5DIFF_TESTFILES/h5diff_414.txt
213$SRC_H5DIFF_TESTFILES/h5diff_415.txt
214$SRC_H5DIFF_TESTFILES/h5diff_416.txt
215$SRC_H5DIFF_TESTFILES/h5diff_417.txt
216$SRC_H5DIFF_TESTFILES/h5diff_418.txt
217$SRC_H5DIFF_TESTFILES/h5diff_419.txt
218$SRC_H5DIFF_TESTFILES/h5diff_420.txt
219$SRC_H5DIFF_TESTFILES/h5diff_421.txt
220$SRC_H5DIFF_TESTFILES/h5diff_422.txt
221$SRC_H5DIFF_TESTFILES/h5diff_423.txt
222$SRC_H5DIFF_TESTFILES/h5diff_424.txt
223$SRC_H5DIFF_TESTFILES/h5diff_425.txt
224$SRC_H5DIFF_TESTFILES/h5diff_450.txt
225$SRC_H5DIFF_TESTFILES/h5diff_451.txt
226$SRC_H5DIFF_TESTFILES/h5diff_452.txt
227$SRC_H5DIFF_TESTFILES/h5diff_453.txt
228$SRC_H5DIFF_TESTFILES/h5diff_454.txt
229$SRC_H5DIFF_TESTFILES/dangling_link.err
230$SRC_H5DIFF_TESTFILES/h5diff_455.txt
231$SRC_H5DIFF_TESTFILES/h5diff_456.txt
232$SRC_H5DIFF_TESTFILES/h5diff_457.txt
233$SRC_H5DIFF_TESTFILES/h5diff_458.txt
234$SRC_H5DIFF_TESTFILES/h5diff_459.txt
235$SRC_H5DIFF_TESTFILES/h5diff_465.txt
236$SRC_H5DIFF_TESTFILES/h5diff_466.txt
237$SRC_H5DIFF_TESTFILES/h5diff_467.txt
238$SRC_H5DIFF_TESTFILES/h5diff_468.txt
239$SRC_H5DIFF_TESTFILES/h5diff_469.txt
240$SRC_H5DIFF_TESTFILES/h5diff_471.txt
241$SRC_H5DIFF_TESTFILES/h5diff_472.txt
242$SRC_H5DIFF_TESTFILES/h5diff_473.txt
243$SRC_H5DIFF_TESTFILES/h5diff_474.txt
244$SRC_H5DIFF_TESTFILES/h5diff_475.txt
245$SRC_H5DIFF_TESTFILES/h5diff_480.txt
246$SRC_H5DIFF_TESTFILES/h5diff_481.txt
247$SRC_H5DIFF_TESTFILES/h5diff_482.txt
248$SRC_H5DIFF_TESTFILES/h5diff_483.txt
249$SRC_H5DIFF_TESTFILES/h5diff_484.txt
250$SRC_H5DIFF_TESTFILES/h5diff_485.txt
251$SRC_H5DIFF_TESTFILES/h5diff_486.txt
252$SRC_H5DIFF_TESTFILES/h5diff_487.txt
253$SRC_H5DIFF_TESTFILES/h5diff_50.txt
254$SRC_H5DIFF_TESTFILES/h5diff_51.txt
255$SRC_H5DIFF_TESTFILES/h5diff_52.txt
256$SRC_H5DIFF_TESTFILES/h5diff_53.txt
257$SRC_H5DIFF_TESTFILES/h5diff_54.txt
258$SRC_H5DIFF_TESTFILES/h5diff_55.txt
259$SRC_H5DIFF_TESTFILES/h5diff_56.txt
260$SRC_H5DIFF_TESTFILES/h5diff_57.txt
261$SRC_H5DIFF_TESTFILES/h5diff_58.txt
262$SRC_H5DIFF_TESTFILES/h5diff_59.txt
263$SRC_H5DIFF_TESTFILES/h5diff_500.txt
264$SRC_H5DIFF_TESTFILES/h5diff_501.txt
265$SRC_H5DIFF_TESTFILES/h5diff_502.txt
266$SRC_H5DIFF_TESTFILES/h5diff_503.txt
267$SRC_H5DIFF_TESTFILES/h5diff_504.txt
268$SRC_H5DIFF_TESTFILES/h5diff_505.txt
269$SRC_H5DIFF_TESTFILES/h5diff_506.txt
270$SRC_H5DIFF_TESTFILES/h5diff_507.txt
271$SRC_H5DIFF_TESTFILES/h5diff_508.txt
272$SRC_H5DIFF_TESTFILES/h5diff_509.txt
273$SRC_H5DIFF_TESTFILES/h5diff_510.txt
274$SRC_H5DIFF_TESTFILES/h5diff_511.txt
275$SRC_H5DIFF_TESTFILES/h5diff_512.txt
276$SRC_H5DIFF_TESTFILES/h5diff_513.txt
277$SRC_H5DIFF_TESTFILES/h5diff_514.txt
278$SRC_H5DIFF_TESTFILES/h5diff_515.txt
279$SRC_H5DIFF_TESTFILES/h5diff_516.txt
280$SRC_H5DIFF_TESTFILES/h5diff_517.txt
281$SRC_H5DIFF_TESTFILES/h5diff_518.txt
282$SRC_H5DIFF_TESTFILES/h5diff_530.txt
283$SRC_H5DIFF_TESTFILES/h5diff_540.txt
284$SRC_H5DIFF_TESTFILES/h5diff_60.txt
285$SRC_H5DIFF_TESTFILES/h5diff_61.txt
286$SRC_H5DIFF_TESTFILES/h5diff_62.txt
287$SRC_H5DIFF_TESTFILES/h5diff_63.txt
288$SRC_H5DIFF_TESTFILES/h5diff_600.txt
289$SRC_H5DIFF_TESTFILES/h5diff_601.txt
290$SRC_H5DIFF_TESTFILES/h5diff_601_ERR.err
291$SRC_H5DIFF_TESTFILES/h5diff_603.txt
292$SRC_H5DIFF_TESTFILES/h5diff_604.txt
293$SRC_H5DIFF_TESTFILES/h5diff_605.txt
294$SRC_H5DIFF_TESTFILES/h5diff_606.txt
295$SRC_H5DIFF_TESTFILES/h5diff_607.txt
296$SRC_H5DIFF_TESTFILES/h5diff_608.txt
297$SRC_H5DIFF_TESTFILES/h5diff_609.txt
298$SRC_H5DIFF_TESTFILES/h5diff_610.txt
299$SRC_H5DIFF_TESTFILES/h5diff_612.txt
300$SRC_H5DIFF_TESTFILES/h5diff_613.txt
301$SRC_H5DIFF_TESTFILES/h5diff_614.txt
302$SRC_H5DIFF_TESTFILES/h5diff_615.txt
303$SRC_H5DIFF_TESTFILES/h5diff_616.txt
304$SRC_H5DIFF_TESTFILES/h5diff_617.txt
305$SRC_H5DIFF_TESTFILES/h5diff_618.txt
306$SRC_H5DIFF_TESTFILES/h5diff_619.txt
307$SRC_H5DIFF_TESTFILES/h5diff_621.txt
308$SRC_H5DIFF_TESTFILES/h5diff_622.txt
309$SRC_H5DIFF_TESTFILES/h5diff_623.txt
310$SRC_H5DIFF_TESTFILES/h5diff_624.txt
311$SRC_H5DIFF_TESTFILES/h5diff_625.txt
312$SRC_H5DIFF_TESTFILES/h5diff_626.txt
313$SRC_H5DIFF_TESTFILES/h5diff_627.txt
314$SRC_H5DIFF_TESTFILES/h5diff_628.txt
315$SRC_H5DIFF_TESTFILES/h5diff_629.txt
316$SRC_H5DIFF_TESTFILES/h5diff_630.txt
317$SRC_H5DIFF_TESTFILES/h5diff_631.txt
318$SRC_H5DIFF_TESTFILES/h5diff_640.txt
319$SRC_H5DIFF_TESTFILES/h5diff_641.txt
320$SRC_H5DIFF_TESTFILES/h5diff_642.txt
321$SRC_H5DIFF_TESTFILES/h5diff_643.txt
322$SRC_H5DIFF_TESTFILES/h5diff_644.txt
323$SRC_H5DIFF_TESTFILES/h5diff_645.txt
324$SRC_H5DIFF_TESTFILES/h5diff_646.txt
325$SRC_H5DIFF_TESTFILES/h5diff_70.txt
326$SRC_H5DIFF_TESTFILES/h5diff_700.txt
327$SRC_H5DIFF_TESTFILES/h5diff_701.txt
328$SRC_H5DIFF_TESTFILES/h5diff_702.txt
329$SRC_H5DIFF_TESTFILES/h5diff_703.txt
330$SRC_H5DIFF_TESTFILES/h5diff_704.txt
331$SRC_H5DIFF_TESTFILES/h5diff_705.txt
332$SRC_H5DIFF_TESTFILES/h5diff_706.txt
333$SRC_H5DIFF_TESTFILES/h5diff_707.txt
334$SRC_H5DIFF_TESTFILES/h5diff_708.txt
335$SRC_H5DIFF_TESTFILES/h5diff_709.txt
336$SRC_H5DIFF_TESTFILES/h5diff_710.txt
337$SRC_H5DIFF_TESTFILES/h5diff_80.txt
338$SRC_H5DIFF_TESTFILES/h5diff_90.txt
339$SRC_H5DIFF_TESTFILES/h5diff_8625.txt
340$SRC_H5DIFF_TESTFILES/h5diff_8639.txt
341$SRC_H5DIFF_TESTFILES/h5diff_v1.txt
342$SRC_H5DIFF_TESTFILES/h5diff_v2.txt
343$SRC_H5DIFF_TESTFILES/h5diff_v3.txt
344$SRC_H5DIFF_TESTFILES/h5diff_vlstr.txt
345"
346
347#
348# copy test files and expected output files from source dirs to test dir
349#
350COPY_TESTFILES="$LIST_HDF5_TEST_FILES $LIST_HDF5_VDS_TEST_FILES $LIST_OTHER_TEST_FILES $LIST_HDF5_TEST_FILES_XML $LIST_OTHER_TEST_FILES_XML"
351
352COPY_TESTFILES_TO_TESTDIR()
353{
354    # copy test files. Used -f to make sure get a new copy
355    for tstfile in $COPY_TESTFILES
356    do
357        # ignore '#' comment
358        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
359        RET=$?
360        if [ $RET -eq 1 ]; then
361            # skip cp if srcdir is same as destdir
362            # this occurs when build/test performed in source dir and
363            # make cp fail
364            SDIR=`$DIRNAME $tstfile`
365            INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
366            INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
367            if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
368              $CP -f $tstfile $TESTDIR
369                if [ $? -ne 0 ]; then
370                    echo "Error: FAILED to copy $tstfile ."
371
372                    # Comment out this to CREATE expected file
373                    exit $EXIT_FAILURE
374                fi
375            fi
376        fi
377    done
378}
379
380CLEAN_TESTFILES_AND_TESTDIR()
381{
382    # skip rm if srcdir is same as destdir
383    # this occurs when build/test performed in source dir and
384    # make cp fail
385    SDIR=$SRC_H5DIFF_TESTFILES
386    INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
387    INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
388    if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
389        $RM $TESTDIR
390    else
391        # files in $LIST_HDF5_VDS_TEST_FILES are copied in from a different
392        # directory, so when srcdir is the same as destdir and $TESTDIR is
393        # not deleted, the copy n $TESTDIR of each file from
394        # $LIST_HDF5_VDS_TEST_FILES will need to be deleted.
395        for tstfile in $LIST_HDF5_VDS_TEST_FILES
396        do
397            # ignore '#' comment
398            echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
399            RET=$?
400            if [ $RET -eq 1 ]; then
401                fname=`basename $tstfile`
402                rm $TESTDIR/$fname
403            fi
404        done
405    fi
406}
407
408# Parse option
409#   -p   run ph5diff tests
410#   -h   print help page
411while [ $# -gt 0 ]; do
412    case "$1" in
413    -p)    # reset the tool name and bin to run ph5diff tests
414    TESTNAME=ph5diff
415    H5DIFF=../../src/h5diff/ph5diff  # The tool name
416    H5DIFF_BIN=`pwd`/$H5DIFF    # The path of the tool binary
417    pmode=yes
418    shift
419    ;;
420    -h) # print help page
421    echo "$0 [-p] [-h]"
422    echo "    -p   run ph5diff tests"
423    echo "    -h   print help page"
424    shift
425    exit 0
426    ;;
427    *)  # unknown option
428        echo "$0: Unknown option ($1)"
429    exit 1
430    ;;
431    esac
432done
433
434# RUNSERIAL is used. Check if it can return exit code from executalbe correctly.
435if [ -n "$RUNSERIAL_NOEXITCODE" ]; then
436    echo "***Warning*** Serial Exit Code is not passed back to shell corretly."
437    echo "***Warning*** Exit code checking is skipped."
438    h5haveexitcode=no
439fi
440
441# Print a line-line message left justified in a field of 70 characters
442# beginning with the word "Testing".
443#
444TESTING() {
445   SPACES="                                                               "
446   echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
447}
448
449# Source in the output filter function definitions.
450. $srcdir/../../../bin/output_filter.sh
451
452# Run a test and print PASS or *FAIL*.  If a test fails then increment
453# the `nerrors' global variable and (if $verbose is set) display the
454# difference between the actual output and the expected output. The
455# expected output is given as the first argument to this function and
456# the actual output file is calculated by replacing the `.ddl' with
457# `.out'.  The actual output is not removed if $HDF5_NOCLEANUP has a
458# non-zero value.
459#
460# Need eval before the RUNCMD command because some machines like
461# AIX, has RUNPARALLEL in the style as
462#   MP_PROCS=3 MP_TASKS_PER_NODE=3 poe ./a.out
463# that throws the shell script off.
464#
465TOOLTEST() {
466    expect="$TESTDIR/$1"
467    expect_err="$TESTDIR/`basename $1 .txt`.err"
468    actual="$TESTDIR/`basename $1 .txt`.out"
469    actual_err="$TESTDIR/`basename $1 .txt`.out.err"
470    actual_sav=${actual}-sav
471    actual_err_sav=${actual_err}-sav
472    shift
473    if test -n "$pmode"; then
474        RUNCMD=$RUNPARALLEL
475    else
476        RUNCMD=$RUNSERIAL
477    fi
478
479    # Run test.
480    TESTING $H5DIFF $@
481    (
482    #echo "#############################"
483    #echo "Expected output for '$H5DIFF $@'"
484    #echo "#############################"
485    cd $TESTDIR
486    eval $RUNCMD $H5DIFF_BIN "$@"
487    ) >$actual 2>$actual_err
488    EXIT_CODE=$?
489    # save actual and actual_err in case they are needed later.
490    cp $actual $actual_sav
491    STDOUT_FILTER $actual
492    cp $actual_err $actual_err_sav
493    STDERR_FILTER $actual_err
494    # don't add exit code check in pmode, as it causes failure. (exit code
495    # is from mpirun not tool)
496    # if any problem occurs relate to an exit code, it will be caught in
497    # serial mode, so the test is fullfilled.
498    if test $h5haveexitcode = 'yes' -a -z "$pmode"; then
499      echo "EXIT CODE: $EXIT_CODE" >> $actual
500    fi
501
502    if [ ! -f $expect ]; then
503        # Create the expect file if it doesn't yet exist.
504        echo " CREATED"
505        cp $actual $expect
506        echo "    Expected result (*.ddl) missing"
507        nerrors="`expr $nerrors + 1`"
508    elif $CMP $expect $actual; then
509        echo " PASSED"
510    elif test $h5haveexitcode = 'yes' -a -z "$pmode"; then
511        echo "*FAILED*"
512        echo "    Expected result ($expect) differs from actual result ($actual)"
513        nerrors="`expr $nerrors + 1`"
514        test yes = "$verbose" && $DIFF $expect $actual |sed 's/^/    /'
515    else
516        # parallel mode output are often of different ordering from serial
517        # output.  If the sorted expected and actual files compare the same,
518        # it is safe to assume the actual output match the expected file.
519        expect_sorted=expect_sorted
520        actual_sorted=actual_sorted
521        sort $expect -o $expect_sorted
522        sort $actual -o $actual_sorted
523        # remove "EXIT CODE:" line from expect file. test for exit code
524        # is done by serial mode.
525        grep -v "EXIT CODE:" $expect_sorted > $expect_sorted.noexit
526        mv $expect_sorted.noexit $expect_sorted
527    if $CMP $expect_sorted $actual_sorted; then
528        echo " PASSED"
529    else
530        echo "*FAILED*"
531        nerrors="`expr $nerrors + 1`"
532        if test yes = "$verbose"; then
533        echo "====Expected result ($expect_sorted) differs from actual result ($actual_sorted)"
534        $DIFF $expect_sorted $actual_sorted |sed 's/^/    /'
535        echo "====The actual output ($actual_sav)"
536        sed 's/^/    /' < $actual_sav
537        echo "====The actual stderr ($actual_err_sav)"
538        sed 's/^/    /' < $actual_err_sav
539        echo "====End of actual stderr ($actual_err_sav)"
540        echo ""
541        fi
542    fi
543    fi
544
545    # Clean up output file
546    if test -z "$HDF5_NOCLEANUP"; then
547      rm -f $actual $actual_err $actual_sav $actual_err_sav
548      rm -f $actual_sorted $expect_sorted
549    fi
550}
551
552
553# Print a "SKIP" message
554SKIP() {
555   TESTING $H5DIFF $@
556    echo  " -SKIP-"
557}
558
559
560
561##############################################################################
562# The tests
563# To avoid the printing of the complete full path of the test file, that hides
564# all the other parameters for long paths, the printing of the command line
565# is done first in
566# TESTING with the name only of the test file $TOOL, not its full path $TESTFILE
567##############################################################################
568# prepare for test
569COPY_TESTFILES_TO_TESTDIR
570# second copy of tvlstr.h5
571$CP -f $SRC_TOOLS_TESTFILES/tvlstr.h5 $TESTDIR/tvlstr2.h5
572
573# ############################################################################
574# # Common usage
575# ############################################################################
576
577# 1.0
578TOOLTEST h5diff_10.txt -h
579
580# 1.1 normal mode
581TOOLTEST h5diff_11.txt  h5diff_basic1.h5 h5diff_basic2.h5
582
583# 1.2 normal mode with objects
584TOOLTEST h5diff_12.txt  h5diff_basic1.h5 h5diff_basic2.h5  g1/dset1 g1/dset2
585
586# 1.3 report mode
587TOOLTEST h5diff_13.txt -r h5diff_basic1.h5 h5diff_basic2.h5
588
589# 1.4 report  mode with objects
590TOOLTEST h5diff_14.txt  -r h5diff_basic1.h5 h5diff_basic2.h5 g1/dset1 g1/dset2
591
592# 1.5 with -d
593TOOLTEST h5diff_15.txt --report --delta=5 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
594
595# 1.6.1 with -p (int)
596TOOLTEST h5diff_16_1.txt -v -p 0.02 h5diff_basic1.h5 h5diff_basic1.h5 g1/dset5 g1/dset6
597
598# 1.6.2 with -p (unsigned long_long)
599TOOLTEST h5diff_16_2.txt --verbose --relative=0.02 h5diff_basic1.h5 h5diff_basic1.h5 g1/dset7 g1/dset8
600
601# 1.6.3 with -p (double)
602TOOLTEST h5diff_16_3.txt -v -p 0.02 h5diff_basic1.h5 h5diff_basic1.h5 g1/dset9 g1/dset10
603
604# 1.7 verbose mode
605TOOLTEST h5diff_17.txt -v h5diff_basic1.h5 h5diff_basic2.h5
606
607# 1.7 test 32-bit INFINITY
608TOOLTEST h5diff_171.txt -v h5diff_basic1.h5 h5diff_basic1.h5 /g1/fp19 /g1/fp19_COPY
609
610# 1.7 test 64-bit INFINITY
611TOOLTEST h5diff_172.txt -v h5diff_basic1.h5 h5diff_basic1.h5 /g1/fp20 /g1/fp20_COPY
612
613# 1.8 quiet mode
614TOOLTEST h5diff_18.txt -q h5diff_basic1.h5 h5diff_basic2.h5
615
616# 1.8 -v and -q
617TOOLTEST h5diff_18_1.txt -v -q h5diff_basic1.h5 h5diff_basic2.h5
618
619
620# ##############################################################################
621# # not comparable types
622# ##############################################################################
623
624# 2.0
625TOOLTEST h5diff_20.txt -v h5diff_types.h5 h5diff_types.h5  dset g1
626
627# 2.1
628TOOLTEST h5diff_21.txt -v h5diff_types.h5 h5diff_types.h5 dset l1
629
630# 2.2
631TOOLTEST h5diff_22.txt -v  h5diff_types.h5 h5diff_types.h5 dset t1
632
633# ##############################################################################
634# # compare groups, types, links (no differences and differences)
635# ##############################################################################
636
637# 2.3
638TOOLTEST h5diff_23.txt -v h5diff_types.h5 h5diff_types.h5 g1 g1
639
640# 2.4
641TOOLTEST h5diff_24.txt -v h5diff_types.h5 h5diff_types.h5 t1 t1
642
643# 2.5
644TOOLTEST h5diff_25.txt -v h5diff_types.h5 h5diff_types.h5 l1 l1
645
646# 2.6
647TOOLTEST h5diff_26.txt -v h5diff_types.h5 h5diff_types.h5 g1 g2
648
649# 2.7
650TOOLTEST h5diff_27.txt -v h5diff_types.h5 h5diff_types.h5 t1 t2
651
652# 2.8
653TOOLTEST h5diff_28.txt -v h5diff_types.h5 h5diff_types.h5 l1 l2
654
655
656# ##############################################################################
657# # Enum value tests (may become more comprehensive in the future)
658# ##############################################################################
659
660# 3.0
661# test enum types which may have invalid values
662TOOLTEST h5diff_30.txt -v h5diff_enum_invalid_values.h5 h5diff_enum_invalid_values.h5 dset1 dset2
663
664
665# ##############################################################################
666# # Dataset datatypes
667# ##############################################################################
668
669# 5.0
670TOOLTEST h5diff_50.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset0a dset0b
671
672# 5.1
673TOOLTEST h5diff_51.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset1a dset1b
674
675# 5.2
676TOOLTEST h5diff_52.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset2a dset2b
677
678# 5.3
679TOOLTEST h5diff_53.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset3a dset4b
680
681# 5.4
682TOOLTEST h5diff_54.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset4a dset4b
683
684# 5.5
685TOOLTEST h5diff_55.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset5a dset5b
686
687# 5.6
688TOOLTEST h5diff_56.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset6a dset6b
689
690# 5.7
691TOOLTEST h5diff_57.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset7a dset7b
692
693# 5.8 (region reference)
694TOOLTEST h5diff_58.txt -v h5diff_dset1.h5 h5diff_dset2.h5 refreg
695
696# test for both dset and attr with same type but with different size
697# ( HDDFV-7942 )
698TOOLTEST h5diff_59.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset11a dset11b
699
700# Strings
701# ( HDFFV-10128 )
702TOOLTEST h5diff_60.txt -v diff_strings1.h5 diff_strings2.h5 string1 string1
703TOOLTEST h5diff_61.txt -v diff_strings1.h5 diff_strings2.h5 string2 string2
704TOOLTEST h5diff_62.txt -v diff_strings1.h5 diff_strings2.h5 string3 string3
705TOOLTEST h5diff_63.txt -v diff_strings1.h5 diff_strings2.h5 string4 string4
706
707# ##############################################################################
708# # Error messages
709# ##############################################################################
710
711
712# 6.0: Check if the command line number of arguments is less than 3
713TOOLTEST h5diff_600.txt h5diff_basic1.h5
714
715# 6.1: Check if non-exist object name is specified
716TOOLTEST h5diff_601.txt h5diff_basic1.h5 h5diff_basic1.h5 nono_obj
717
718
719# ##############################################################################
720# # -d
721# ##############################################################################
722
723
724# 6.3: negative value
725TOOLTEST h5diff_603.txt -d -4 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
726
727# 6.4: zero
728TOOLTEST h5diff_604.txt -d 0 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
729
730# 6.5: non number
731TOOLTEST h5diff_605.txt -d u h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
732
733# 6.6: hexadecimal
734TOOLTEST h5diff_606.txt -d 0x1 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
735
736# 6.7: string
737TOOLTEST h5diff_607.txt -d "1" h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
738
739# 6.8: use system epsilon
740TOOLTEST h5diff_608.txt --use-system-epsilon h5diff_basic1.h5 h5diff_basic2.h5  g1/dset3 g1/dset4
741
742# 6.9: number larger than biggest difference
743TOOLTEST h5diff_609.txt -d 200 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
744
745# 6.10: number smaller than smallest difference
746TOOLTEST h5diff_610.txt -d 1 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
747
748
749# ##############################################################################
750# # -p
751# ##############################################################################
752
753
754# 6.12: negative value
755TOOLTEST h5diff_612.txt -p -4 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
756
757# 6.13: zero
758TOOLTEST h5diff_613.txt -p 0 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
759
760# 6.14: non number
761TOOLTEST h5diff_614.txt -p u h5diff_basic1.h5 h5diff_basic2.h5  g1/dset3 g1/dset4
762
763# 6.15: hexadecimal
764TOOLTEST h5diff_615.txt -p 0x1 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
765
766# 6.16: string
767TOOLTEST h5diff_616.txt -p "0.21" h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
768
769# 6.17: repeated option
770TOOLTEST h5diff_617.txt -p 0.21 -p 0.22 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
771
772# 6.18: number larger than biggest difference
773TOOLTEST h5diff_618.txt -p 2 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
774
775# 6.19: number smaller than smallest difference
776TOOLTEST h5diff_619.txt -p 0.005 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
777
778# ##############################################################################
779# # -n
780# ##############################################################################
781
782# 6.21: negative value
783TOOLTEST h5diff_621.txt -n -4 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
784
785# 6.22: zero
786TOOLTEST h5diff_622.txt -n 0 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
787
788# 6.23: non number
789TOOLTEST h5diff_623.txt -n u h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
790
791# 6.24: hexadecimal
792TOOLTEST h5diff_624.txt -n 0x1 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
793
794# 6.25: string
795TOOLTEST h5diff_625.txt -n "2" h5diff_basic1.h5 h5diff_basic2.h5  g1/dset3 g1/dset4
796
797# 6.26: repeated option
798TOOLTEST h5diff_626.txt -n 2 -n 3 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
799
800# 6.27: number larger than biggest difference
801TOOLTEST h5diff_627.txt --count=200 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
802
803# 6.28: number smaller than smallest difference
804TOOLTEST h5diff_628.txt -n 1 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
805
806# Disabling this test as it hangs - LRK 20090618
807# 6.29  non valid files
808#TOOLTEST h5diff_629.txt file1.h6 file2.h6
809
810# ##############################################################################
811# # NaN
812# ##############################################################################
813# 6.30: test (NaN == NaN) must be true based on our documentation -- XCAO
814TOOLTEST h5diff_630.txt -v -d "0.0001" h5diff_basic1.h5 h5diff_basic1.h5 g1/fp18 g1/fp18_COPY
815TOOLTEST h5diff_631.txt -v --use-system-epsilon h5diff_basic1.h5 h5diff_basic1.h5 g1/fp18 g1/fp18_COPY
816
817
818# ##############################################################################
819# 7.  attributes
820# ##############################################################################
821TOOLTEST h5diff_70.txt -v h5diff_attr1.h5 h5diff_attr2.h5
822
823# ##################################################
824#  attrs with verbose option level
825# ##################################################
826TOOLTEST h5diff_700.txt -v1 h5diff_attr1.h5 h5diff_attr2.h5
827TOOLTEST h5diff_701.txt -v2 h5diff_attr1.h5 h5diff_attr2.h5
828TOOLTEST h5diff_702.txt --verbose=1 h5diff_attr1.h5 h5diff_attr2.h5
829TOOLTEST h5diff_703.txt --verbose=2 h5diff_attr1.h5 h5diff_attr2.h5
830
831# same attr number , all same attr name
832TOOLTEST h5diff_704.txt -v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /g
833
834# same attr number , some same attr name
835TOOLTEST h5diff_705.txt -v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /dset
836
837# same attr number , all different attr name
838TOOLTEST h5diff_706.txt -v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /ntype
839
840# different attr number , same attr name (intersected)
841TOOLTEST h5diff_707.txt -v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /g2
842
843# different attr number , all different attr name
844TOOLTEST h5diff_708.txt -v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /g3
845
846# when no attributes exist in both objects
847TOOLTEST h5diff_709.txt -v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /g4
848
849# file vs file
850TOOLTEST h5diff_710.txt -v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5
851
852# ##############################################################################
853# 8.  all dataset datatypes
854# ##############################################################################
855TOOLTEST h5diff_80.txt -v h5diff_dset1.h5 h5diff_dset2.h5
856
857# 9. compare a file with itself
858TOOLTEST h5diff_90.txt -v h5diff_basic2.h5 h5diff_basic2.h5
859
860# 10. read by hyperslab, print indexes
861TOOLTEST h5diff_100.txt -v h5diff_hyper1.h5 h5diff_hyper2.h5
862
863# 11. floating point comparison
864# double value
865TOOLTEST h5diff_101.txt -v h5diff_basic1.h5 h5diff_basic1.h5 g1/d1  g1/d2
866
867# float value
868TOOLTEST h5diff_102.txt -v h5diff_basic1.h5 h5diff_basic1.h5 g1/fp1 g1/fp2
869
870# with --use-system-epsilon for double value
871TOOLTEST h5diff_103.txt -v --use-system-epsilon h5diff_basic1.h5 h5diff_basic1.h5 g1/d1  g1/d2
872
873# with --use-system-epsilon for float value
874TOOLTEST h5diff_104.txt -v --use-system-epsilon h5diff_basic1.h5 h5diff_basic1.h5 g1/fp1 g1/fp2
875
876# not comparable -c flag
877TOOLTEST h5diff_200.txt h5diff_basic2.h5 h5diff_basic2.h5 g2/dset1  g2/dset2
878
879TOOLTEST h5diff_201.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset1  g2/dset2
880
881TOOLTEST h5diff_202.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset2  g2/dset3
882
883TOOLTEST h5diff_203.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset3  g2/dset4
884
885TOOLTEST h5diff_204.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset4  g2/dset5
886
887TOOLTEST h5diff_205.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset5  g2/dset6
888
889# not comparable in compound
890TOOLTEST h5diff_206.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset7  g2/dset8
891
892TOOLTEST h5diff_207.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset8  g2/dset9
893
894# not comparable in dataspace of zero dimension size
895TOOLTEST h5diff_208.txt -c h5diff_dset_zero_dim_size1.h5 h5diff_dset_zero_dim_size2.h5
896
897# non-comparable dataset with comparable attribute, and other comparable datasets.
898# Also test non-compatible attributes with different type, dimention, rank.
899# All the comparables should display differences.
900TOOLTEST h5diff_220.txt -c non_comparables1.h5 non_comparables2.h5 /g1
901
902# comparable dataset with non-comparable attribute and other comparable attributes.
903# All the comparables should display differences.
904TOOLTEST h5diff_221.txt -c non_comparables1.h5 non_comparables2.h5 /g2
905
906# entire file
907# All the comparables should display differences.
908TOOLTEST h5diff_222.txt -c non_comparables1.h5 non_comparables2.h5
909
910# non-comparable test for common objects (same name) with different object types
911# (HDFFV-7644)
912TOOLTEST h5diff_223.txt -c non_comparables1.h5 non_comparables2.h5 /diffobjtypes
913# swap files
914TOOLTEST h5diff_224.txt -c non_comparables2.h5 non_comparables1.h5 /diffobjtypes
915
916# ##############################################################################
917# # Links compare without --follow-symlinks nor --no-dangling-links
918# ##############################################################################
919# test for bug1749
920TOOLTEST h5diff_300.txt -v h5diff_links.h5 h5diff_links.h5 /link_g1 /link_g2
921
922# ##############################################################################
923# # Links compare with --follow-symlinks Only
924# ##############################################################################
925# soft links file to file
926TOOLTEST h5diff_400.txt --follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5
927
928# softlink vs dset"
929TOOLTEST h5diff_401.txt --follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_dset1_1 /target_dset2
930
931# dset vs softlink"
932TOOLTEST h5diff_402.txt --follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5 /target_dset2 /softlink_dset1_1
933
934# softlink vs softlink"
935TOOLTEST h5diff_403.txt --follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_dset1_1 /softlink_dset2
936
937# extlink vs extlink (FILE)"
938TOOLTEST h5diff_404.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5
939
940# extlink vs dset"
941TOOLTEST h5diff_405.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_trg.h5 /ext_link_dset1 /target_group2/x_dset
942
943# dset vs extlink"
944TOOLTEST h5diff_406.txt --follow-symlinks -v h5diff_extlink_trg.h5 h5diff_extlink_src.h5 /target_group2/x_dset /ext_link_dset1
945
946# extlink vs extlink"
947TOOLTEST h5diff_407.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_dset1 /ext_link_dset2
948
949# softlink vs extlink"
950TOOLTEST h5diff_408.txt --follow-symlinks -v h5diff_softlinks.h5 h5diff_extlink_src.h5 /softlink_dset1_1 /ext_link_dset2
951
952# extlink vs softlink "
953TOOLTEST h5diff_409.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_softlinks.h5 /ext_link_dset2 /softlink_dset1_1
954
955# linked_softlink vs linked_softlink (FILE)"
956TOOLTEST h5diff_410.txt --follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5
957
958# dset2 vs linked_softlink_dset1"
959TOOLTEST h5diff_411.txt --follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /target_dset2 /softlink1_to_slink2
960
961# linked_softlink_dset1 vs dset2"
962TOOLTEST h5diff_412.txt --follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /softlink1_to_slink2 /target_dset2
963
964# linked_softlink_to_dset1 vs linked_softlink_to_dset2"
965TOOLTEST h5diff_413.txt --follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /softlink1_to_slink2 /softlink2_to_slink2
966
967# group vs linked_softlink_group1"
968TOOLTEST h5diff_414.txt --follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /target_group /softlink3_to_slink2
969
970# linked_softlink_group1 vs group"
971TOOLTEST h5diff_415.txt --follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /softlink3_to_slink2 /target_group
972
973# linked_softlink_to_group1 vs linked_softlink_to_group2"
974TOOLTEST h5diff_416.txt --follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /softlink3_to_slink2 /softlink4_to_slink2
975
976# non-exist-softlink vs softlink"
977TOOLTEST h5diff_417.txt --follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_noexist /softlink_dset2
978
979# softlink vs non-exist-softlink"
980TOOLTEST h5diff_418.txt --follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_dset2 /softlink_noexist
981
982# non-exist-extlink_file vs extlink"
983TOOLTEST h5diff_419.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_noexist2 /ext_link_dset2
984
985# exlink vs non-exist-extlink_file"
986TOOLTEST h5diff_420.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_dset2 /ext_link_noexist2
987
988# extlink vs non-exist-extlink_obj"
989TOOLTEST h5diff_421.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_dset2 /ext_link_noexist1
990
991# non-exist-extlink_obj vs extlink"
992TOOLTEST h5diff_422.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_noexist1 /ext_link_dset2
993
994# extlink_to_softlink_to_dset1 vs dset2"
995TOOLTEST h5diff_423.txt --follow-symlinks -v h5diff_ext2softlink_src.h5 h5diff_ext2softlink_trg.h5 /ext_link_to_slink1 /dset2
996
997# dset2 vs extlink_to_softlink_to_dset1"
998TOOLTEST h5diff_424.txt --follow-symlinks -v h5diff_ext2softlink_trg.h5 h5diff_ext2softlink_src.h5 /dset2 /ext_link_to_slink1
999
1000# extlink_to_softlink_to_dset1 vs extlink_to_softlink_to_dset2"
1001TOOLTEST h5diff_425.txt --follow-symlinks -v h5diff_ext2softlink_src.h5 h5diff_ext2softlink_src.h5 /ext_link_to_slink1 /ext_link_to_slink2
1002
1003# ##############################################################################
1004# # Dangling links compare (--follow-symlinks and --no-dangling-links)
1005# ##############################################################################
1006# dangling links --follow-symlinks (FILE to FILE)
1007TOOLTEST h5diff_450.txt  --follow-symlinks -v h5diff_danglelinks1.h5 h5diff_danglelinks2.h5
1008
1009# dangling links --follow-symlinks and --no-dangling-links (FILE to FILE)
1010TOOLTEST h5diff_451.txt  --follow-symlinks -v --no-dangling-links  h5diff_danglelinks1.h5 h5diff_danglelinks2.h5
1011
1012# try --no-dangling-links without --follow-symlinks options
1013TOOLTEST h5diff_452.txt  --no-dangling-links  h5diff_softlinks.h5 h5diff_softlinks.h5
1014
1015# dangling link found for soft links (FILE to FILE)
1016TOOLTEST h5diff_453.txt  --follow-symlinks -v --no-dangling-links  h5diff_softlinks.h5 h5diff_softlinks.h5
1017
1018# dangling link found for soft links (obj to obj)
1019TOOLTEST h5diff_454.txt  --follow-symlinks -v --no-dangling-links  h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_dset2 /softlink_noexist
1020
1021# dangling link found for soft links (obj to obj) Both dangle links
1022TOOLTEST h5diff_455.txt  --follow-symlinks -v --no-dangling-links  h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_noexist /softlink_noexist
1023
1024# dangling link found for ext links (FILE to FILE)
1025TOOLTEST h5diff_456.txt  --follow-symlinks -v --no-dangling-links  h5diff_extlink_src.h5 h5diff_extlink_src.h5
1026
1027# dangling link found for ext links (obj to obj). target file exist
1028TOOLTEST h5diff_457.txt  --follow-symlinks -v --no-dangling-links  h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_dset1 /ext_link_noexist1
1029
1030# dangling link found for ext links (obj to obj). target file NOT exist
1031TOOLTEST h5diff_458.txt  --follow-symlinks -v --no-dangling-links  h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_dset1 /ext_link_noexist2
1032
1033# dangling link found for ext links (obj to obj). Both dangle links
1034TOOLTEST h5diff_459.txt  --follow-symlinks -v --no-dangling-links  h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_noexist1 /ext_link_noexist2
1035
1036# dangling link --follow-symlinks (obj vs obj)
1037# (HDFFV-7836)
1038TOOLTEST h5diff_465.txt --follow-symlinks h5diff_danglelinks1.h5 h5diff_danglelinks2.h5 /soft_link1
1039# (HDFFV-7835)
1040# soft dangling vs. soft dangling
1041TOOLTEST h5diff_466.txt -v --follow-symlinks h5diff_danglelinks1.h5 h5diff_danglelinks2.h5 /soft_link1
1042# soft link  vs. soft dangling
1043TOOLTEST h5diff_467.txt -v --follow-symlinks h5diff_danglelinks1.h5 h5diff_danglelinks2.h5 /soft_link2
1044# ext dangling vs. ext dangling
1045TOOLTEST h5diff_468.txt -v --follow-symlinks h5diff_danglelinks1.h5 h5diff_danglelinks2.h5 /ext_link4
1046# ext link vs. ext dangling
1047TOOLTEST h5diff_469.txt -v --follow-symlinks h5diff_danglelinks1.h5 h5diff_danglelinks2.h5 /ext_link2
1048
1049#----------------------------------------
1050# dangling links without follow symlink
1051# (HDFFV-7998)
1052# test - soft dangle links (same and different paths),
1053#      - external dangle links (same and different paths)
1054TOOLTEST h5diff_471.txt -v h5diff_danglelinks1.h5 h5diff_danglelinks2.h5
1055TOOLTEST h5diff_472.txt -v h5diff_danglelinks1.h5 h5diff_danglelinks2.h5 /soft_link1
1056TOOLTEST h5diff_473.txt -v h5diff_danglelinks1.h5 h5diff_danglelinks2.h5 /soft_link4
1057TOOLTEST h5diff_474.txt -v h5diff_danglelinks1.h5 h5diff_danglelinks2.h5 /ext_link4
1058TOOLTEST h5diff_475.txt -v h5diff_danglelinks1.h5 h5diff_danglelinks2.h5 /ext_link1
1059
1060# ##############################################################################
1061# # test for group diff recursivly
1062# ##############################################################################
1063# root
1064TOOLTEST h5diff_500.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 / /
1065TOOLTEST h5diff_501.txt -v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 / /
1066
1067# root vs group
1068TOOLTEST h5diff_502.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 / /grp1/grp2/grp3
1069
1070# group vs group (same name and structure)
1071TOOLTEST h5diff_503.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1 /grp1
1072
1073# group vs group (different name and structure)
1074TOOLTEST h5diff_504.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1/grp2 /grp1/grp2/grp3
1075
1076# groups vs soft-link
1077TOOLTEST h5diff_505.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1 /slink_grp1
1078TOOLTEST h5diff_506.txt -v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1/grp2 /slink_grp2
1079
1080# groups vs ext-link
1081TOOLTEST h5diff_507.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1 /elink_grp1
1082TOOLTEST h5diff_508.txt -v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1 /elink_grp1
1083
1084# soft-link vs ext-link
1085TOOLTEST h5diff_509.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /slink_grp1 /elink_grp1
1086TOOLTEST h5diff_510.txt -v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /slink_grp1 /elink_grp1
1087
1088# circled ext links
1089TOOLTEST h5diff_511.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp10 /grp11
1090TOOLTEST h5diff_512.txt -v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp10 /grp11
1091
1092# circled soft2ext-link vs soft2ext-link
1093TOOLTEST h5diff_513.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /slink_grp10 /slink_grp11
1094TOOLTEST h5diff_514.txt -v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /slink_grp10 /slink_grp11
1095
1096###############################################################################
1097# Test for group recursive diff via multi-linked external links
1098# With follow-symlinks, file h5diff_grp_recurse_ext1.h5 and h5diff_grp_recurse_ext2-1.h5 should
1099# be same with the external links.
1100###############################################################################
1101# file vs file
1102TOOLTEST h5diff_515.txt -v h5diff_grp_recurse_ext1.h5 h5diff_grp_recurse_ext2-1.h5
1103TOOLTEST h5diff_516.txt -v --follow-symlinks h5diff_grp_recurse_ext1.h5 h5diff_grp_recurse_ext2-1.h5
1104# group vs group
1105TOOLTEST h5diff_517.txt -v h5diff_grp_recurse_ext1.h5 h5diff_grp_recurse_ext2-1.h5 /g1
1106TOOLTEST h5diff_518.txt -v --follow-symlinks h5diff_grp_recurse_ext1.h5 h5diff_grp_recurse_ext2-1.h5 /g1
1107
1108# ##############################################################################
1109# # Exclude objects (--exclude-path)
1110# ##############################################################################
1111#
1112# Same structure, same names and different value.
1113#
1114# Exclude the object with different value. Expect return - same
1115TOOLTEST h5diff_480.txt -v --exclude-path /group1/dset3 h5diff_exclude1-1.h5 h5diff_exclude1-2.h5
1116# Verify different by not excluding. Expect return - diff
1117TOOLTEST h5diff_481.txt -v h5diff_exclude1-1.h5 h5diff_exclude1-2.h5
1118
1119#
1120# Different structure, different names.
1121#
1122# Exclude all the different objects. Expect return - same
1123TOOLTEST h5diff_482.txt -v --exclude-path "/group1" --exclude-path "/dset1" h5diff_exclude2-1.h5 h5diff_exclude2-2.h5
1124# Exclude only some different objects. Expect return - diff
1125TOOLTEST h5diff_483.txt -v --exclude-path "/group1" h5diff_exclude2-1.h5 h5diff_exclude2-2.h5
1126
1127# Exclude from group compare
1128TOOLTEST h5diff_484.txt -v --exclude-path "/dset3" h5diff_exclude1-1.h5 h5diff_exclude1-2.h5 /group1
1129
1130#
1131# Only one file contains unique objs. Common objs are same.
1132# (HDFFV-7837)
1133#
1134TOOLTEST h5diff_485.txt -v --exclude-path "/group1" h5diff_exclude3-1.h5 h5diff_exclude3-2.h5
1135TOOLTEST h5diff_486.txt -v --exclude-path "/group1" h5diff_exclude3-2.h5 h5diff_exclude3-1.h5
1136TOOLTEST h5diff_487.txt -v --exclude-path "/group1/dset" h5diff_exclude3-1.h5 h5diff_exclude3-2.h5
1137
1138
1139# ##############################################################################
1140# # diff various multiple vlen and fixed strings in a compound type dataset
1141# ##############################################################################
1142TOOLTEST h5diff_530.txt -v  h5diff_comp_vl_strs.h5 h5diff_comp_vl_strs.h5 /group /group_copy
1143# test to verify HDFFV-8625
1144TOOLTEST h5diff_8625.txt -v --enable-error-stack h5diff_comp_vl_strs.h5 h5diff_comp_vl_strs.h5 /group/Compound_dset1 /group_copy/Compound_dset3
1145# test to verify HDFFV-8639
1146TOOLTEST h5diff_8639.txt -v h5diff_attr3.h5 h5diff_attr2.h5 /g1
1147TOOLTEST h5diff_vlstr.txt -v  tvlstr.h5 tvlstr2.h5
1148
1149# ##############################################################################
1150# # Test container types (array,vlen) with multiple nested compound types
1151# # Complex compound types in dataset and attribute
1152# ##############################################################################
1153TOOLTEST h5diff_540.txt -v compounds_array_vlen1.h5 compounds_array_vlen2.h5
1154
1155# ##############################################################################
1156# # Test mutually exclusive options
1157# ##############################################################################
1158#
1159# Test with -d , -p and --use-system-epsilon.
1160TOOLTEST h5diff_640.txt -v -d 5 -p 0.05 --use-system-epsilon h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4
1161TOOLTEST h5diff_641.txt -v -d 5 -p 0.05 h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4
1162TOOLTEST h5diff_642.txt -v -p 0.05 -d 5 h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4
1163TOOLTEST h5diff_643.txt -v -d 5 --use-system-epsilon h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4
1164TOOLTEST h5diff_644.txt -v --use-system-epsilon -d 5 h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4
1165TOOLTEST h5diff_645.txt -v -p 0.05 --use-system-epsilon h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4
1166TOOLTEST h5diff_646.txt -v --use-system-epsilon -p 0.05 h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4
1167
1168# ##############################################################################
1169# VDS tests
1170# ##############################################################################
1171TOOLTEST h5diff_v1.txt -v 1_vds.h5 2_vds.h5
1172TOOLTEST h5diff_v2.txt -r 1_vds.h5 2_vds.h5
1173TOOLTEST h5diff_v3.txt -c 1_vds.h5 2_vds.h5
1174
1175
1176# ##############################################################################
1177# # END
1178# ##############################################################################
1179
1180# Clean up temporary files/directories
1181CLEAN_TESTFILES_AND_TESTDIR
1182
1183if test $nerrors -eq 0 ; then
1184    echo "All $TESTNAME tests passed."
1185    exit $EXIT_SUCCESS
1186else
1187    echo "$TESTNAME tests failed with $nerrors errors."
1188    exit $EXIT_FAILURE
1189fi
1190