summaryrefslogtreecommitdiffstats
path: root/tools/testh5dump.sh
blob: dd1c991c9f49cac63949aa47fec39d0b8a6dddca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/bin/sh

h5dump=h5dump		# a relative name
cmp='cmp -s'
diff='diff -c'

nerrors=0
verbose=yes

# The build (current) directory might be different than the source directory.
if test "X$srcdir" = X; then
    srcdir=.
fi
mkdir testfiles >/dev/null 2>&1

# Print a line-line message left justified in a field of 70 characters
# beginning with the word "Testing".
TESTING()
{
    SPACES="                                                               "
    echo "Testing $* $SPACES" |cut -c1-70 |tr -d '\n'
}

# Run a test and print PASS or *FAIL*.  If a test fails then increment
# the `nerrors' global variable and (if $verbose is set) display the
# difference between the actual output and the expected output. The
# expected output is given as the first argument to this function and
# the actual output file is calculated by replacing the `.ddl' with
# `.out'.  The actual output is not removed if $HDF5_NOCLEANUP has a
# non-zero value.
DUMP()
{
    expect=testfiles/$1
    actual="testfiles/`basename $1 .ddl`.out"
    shift
    full=`pwd`/$h5dump

    # Run test.
    TESTING $h5dump $@
    (
	echo "#############################"
	echo "Expected output for '$h5dump $@'" 
	echo "#############################"
	cd $srcdir/testfiles
        $RUNSERIAL $full "$@" 2>/dev/null
    ) >$actual
    
    # Results. We normalize the result to account for different output 
    # widths.  That is, the test should succeed if the only
    # differences are in white space. We have to do this the hard way
    # because diff isn't always smart enough.
    tr '\n' ' ' <$actual |tr -s ' \t' |fold >$actual-norm
    tr '\n' ' ' <$srcdir/$expect |tr -s ' \t' |fold >$expect-norm

    if $cmp $expect-norm $actual-norm; then
	echo " PASSED"
    else
	echo "*FAILED*"
	echo "    Actual result (*.out) differs from expected result (*.ddl)"
	nerrors="`expr $nerrors + 1`"
	test yes = "$verbose" && $diff $srcdir/$expect $actual |sed 's/^/    /'
    fi

    # Clean up output file
    rm -f $expect-norm $actual-norm
    if [ X = ${HDF5_NOCLEANUP:-X} ]; then
	rm -f $actual
    fi
}



##############################################################################
##############################################################################
###			  T H E   T E S T S                                ###
##############################################################################
##############################################################################

# test for displaying groups
DUMP tgroup-1.ddl tgroup.h5
# test for displaying the selected groups
DUMP tgroup-2.ddl -g /g2 / /y tgroup.h5

# test for displaying simple space datasets
DUMP tdset-1.ddl tdset.h5
# test for displaying selected datasets
DUMP tdset-2.ddl -header -d dset1 /dset2 dset3 tdset.h5

# test for displaying attributes
DUMP tattr-1.ddl tattr.h5
# test for displaying the selected attributes of string type and scalar space
DUMP tattr-2.ddl -a attr1 attr4 attr5 tattr.h5
# test for header and error messages
DUMP tattr-3.ddl -header -a attr2 attr tattr.h5

# test for displaying soft links
DUMP tslink-1.ddl tslink.h5
# test for displaying the selected link
DUMP tslink-2.ddl -l slink2 tslink.h5

# tests for hard links
DUMP thlink-1.ddl thlink.h5
DUMP thlink-2.ddl -d /g1/dset2 /dset1 /g1/g1.1/dset3 thlink.h5
DUMP thlink-3.ddl -d /g1/g1.1/dset3 /g1/dset2 /dset1 thlink.h5
DUMP thlink-4.ddl -g /g1 thlink.h5
DUMP thlink-5.ddl -d /dset1 -g /g2 -d /g1/dset2 thlink.h5

# tests for compound data types
DUMP tcomp-1.ddl tcompound.h5
# test for named data types
DUMP tcomp-2.ddl -t /type1 /type2 /group1/type3 tcompound.h5
# test for unamed type 
DUMP tcomp-3.ddl -t /#5992:0 -g /group2 tcompound.h5

# test for options
DUMP tall-1.ddl tall.h5
DUMP tall-2.ddl -header -g /g1/g1.1 -a attr2 tall.h5
DUMP tall-3.ddl -d /g2/dset2.1 -l /g1/g1.2/g1.2.1/slink tall.h5

# test for loop detection
DUMP tloop-1.ddl tloop.h5

# test for string 
DUMP tstr-1.ddl tstr.h5

if test $nerrors -eq 0 ; then
	echo "All h5dump tests passed."
fi

exit $nerrors