summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorPeter Cao <xcao@hdfgroup.org>2009-09-11 20:15:22 (GMT)
committerPeter Cao <xcao@hdfgroup.org>2009-09-11 20:15:22 (GMT)
commitaeec66cf49482b75deb23017e19f0daff1d76894 (patch)
tree758d8fe0ba517ed4cdb9f5874f0e6c857fb98d35 /tools
parent258d4b38353286ff4066e40048ff90332e7befbe (diff)
downloadhdf5-aeec66cf49482b75deb23017e19f0daff1d76894.zip
hdf5-aeec66cf49482b75deb23017e19f0daff1d76894.tar.gz
hdf5-aeec66cf49482b75deb23017e19f0daff1d76894.tar.bz2
[svn-r17467] " Use strict equality as default
" Use "--use-system-epsilon" for system EPSILON " Use "-p" or "-d" for whatever user's choice of epsilon " Use "-p 0" or "-d 0" for strict equality (same as default)
Diffstat (limited to 'tools')
-rw-r--r--tools/h5diff/h5diff_common.c46
-rw-r--r--tools/h5diff/testfiles/h5diff_10.txt17
-rw-r--r--tools/h5diff/testfiles/h5diff_600.txt17
-rw-r--r--tools/h5diff/testfiles/h5diff_603.txt17
-rw-r--r--tools/h5diff/testfiles/h5diff_604.txt65
-rw-r--r--tools/h5diff/testfiles/h5diff_605.txt65
-rw-r--r--tools/h5diff/testfiles/h5diff_606.txt17
-rw-r--r--tools/h5diff/testfiles/h5diff_612.txt17
-rw-r--r--tools/h5diff/testfiles/h5diff_613.txt65
-rw-r--r--tools/h5diff/testfiles/h5diff_614.txt65
-rw-r--r--tools/h5diff/testfiles/h5diff_615.txt17
-rw-r--r--tools/h5diff/testfiles/h5diff_621.txt17
-rw-r--r--tools/h5diff/testfiles/h5diff_622.txt17
-rw-r--r--tools/h5diff/testfiles/h5diff_623.txt17
-rw-r--r--tools/h5diff/testfiles/h5diff_624.txt17
-rwxr-xr-xtools/h5diff/testh5diff.sh6
-rw-r--r--tools/lib/h5diff.h31
-rw-r--r--tools/lib/h5diff_array.c76
18 files changed, 185 insertions, 404 deletions
diff --git a/tools/h5diff/h5diff_common.c b/tools/h5diff/h5diff_common.c
index 8e7b181..3403935 100644
--- a/tools/h5diff/h5diff_common.c
+++ b/tools/h5diff/h5diff_common.c
@@ -43,6 +43,7 @@ static struct long_options l_opts[] = {
{ "relative", require_arg, 'p' },
{ "nan", no_arg, 'N' },
{ "compare", no_arg, 'c' },
+ { "use-system-epsilon", no_arg, 'e' },
{ NULL, 0, '\0' }
};
@@ -109,6 +110,11 @@ void parse_command_line(int argc,
h5diff_exit(EXIT_FAILURE);
}
options->delta = atof( opt_arg );
+
+ /* -d 0 is the same as default */
+ if (options->delta == 0)
+ options->d=0;
+
break;
case 'p':
@@ -121,6 +127,11 @@ void parse_command_line(int argc,
h5diff_exit(EXIT_FAILURE);
}
options->percent = atof( opt_arg );
+
+ /* -p 0 is the same as default */
+ if (options->percent == 0)
+ options->p = 0;
+
break;
case 'n':
@@ -142,9 +153,16 @@ void parse_command_line(int argc,
case 'c':
options->m_list_not_cmp = 1;
break;
+ case 'e':
+ options->use_system_epsilon = 1;
+ break;
}
}
+ /* if use system epsilon, unset -p and -d option */
+ if (options->use_system_epsilon)
+ options->d = options->p = 0;
+
/* check for file names to be processed */
if (argc <= opt_ind || argv[ opt_ind + 1 ] == NULL)
{
@@ -277,7 +295,7 @@ check_p_input( const char *str )
return -1;
x=atof(str);
- if (x<=0)
+ if (x<0)
return -1;
return 1;
@@ -311,7 +329,7 @@ check_d_input( const char *str )
return -1;
x=atof(str);
- if (x <=0)
+ if (x <0)
return -1;
return 1;
@@ -344,18 +362,18 @@ void usage(void)
printf(" -q, --quiet Quiet mode. Do not do output\n");
printf(" -c, --compare List objects that are not comparable\n");
printf(" -N, --nan Avoid NaNs detection\n");
-
- printf(" -n C, --count=C Print differences up to C number\n");
- printf(" -d D, --delta=D Print difference when greater than limit D\n");
- printf(" -p R, --relative=R Print difference when greater than relative limit R\n");
-
-
- printf("\n");
-
- printf(" C - is a positive integer\n");
- printf(" D - is a positive number. Compare criteria is |a - b| > D\n");
- printf(" R - is a positive number. Compare criteria is |(b-a)/a| > R\n");
-
+ printf(" -n C, --count=C Print differences up to C number, C is a positive integer.\n");
+
+ printf(" -d D, --delta=D Print difference if (|a-b| > D), D is a positive number.\n");
+ printf(" -p R, --relative=R Print difference if (|(a-b)/b| > R), R is a positive number.\n");
+ printf(" --use-system-epsilon Print difference if (|a-b| > EPSILON),\n");
+ printf(" where EPSILON (FLT_EPSILON or FLT_EPSILON) is the system epsilon value. \n");
+ printf(" If the system epsilon is not defined, use the value below:\n");
+ printf(" FLT_EPSILON = 1.19209E-07 for float\n");
+ printf(" DBL_EPSILON = 2.22045E-16 for double\n");
+
+ printf(" -d, -p, and --use-system-epsilon options are used for comparing floating point values.\n");
+ printf(" By default, strict equality is used. Use -p or -d to set specific tolerance.\n");
printf("\n");
printf(" Modes of output:\n");
diff --git a/tools/h5diff/testfiles/h5diff_10.txt b/tools/h5diff/testfiles/h5diff_10.txt
index 38246d9..4788a79 100644
--- a/tools/h5diff/testfiles/h5diff_10.txt
+++ b/tools/h5diff/testfiles/h5diff_10.txt
@@ -11,13 +11,16 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]]
-q, --quiet Quiet mode. Do not do output
-c, --compare List objects that are not comparable
-N, --nan Avoid NaNs detection
- -n C, --count=C Print differences up to C number
- -d D, --delta=D Print difference when greater than limit D
- -p R, --relative=R Print difference when greater than relative limit R
-
- C - is a positive integer
- D - is a positive number. Compare criteria is |a - b| > D
- R - is a positive number. Compare criteria is |(b-a)/a| > R
+ -n C, --count=C Print differences up to C number, C is a positive integer.
+ -d D, --delta=D Print difference if (|a-b| > D), D is a positive number.
+ -p R, --relative=R Print difference if (|(a-b)/b| > R), R is a positive number.
+ --use-system-epsilon Print difference if (|a-b| > EPSILON),
+ where EPSILON (FLT_EPSILON or FLT_EPSILON) is the system epsilon value.
+ If the system epsilon is not defined, use the value below:
+ FLT_EPSILON = 1.19209E-07 for float
+ DBL_EPSILON = 2.22045E-16 for double
+ -d, -p, and --use-system-epsilon options are used for comparing floating point values.
+ By default, strict equality is used. Use -p or -d to set specific tolerance.
Modes of output:
diff --git a/tools/h5diff/testfiles/h5diff_600.txt b/tools/h5diff/testfiles/h5diff_600.txt
index 17af208..82c5240 100644
--- a/tools/h5diff/testfiles/h5diff_600.txt
+++ b/tools/h5diff/testfiles/h5diff_600.txt
@@ -11,13 +11,16 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]]
-q, --quiet Quiet mode. Do not do output
-c, --compare List objects that are not comparable
-N, --nan Avoid NaNs detection
- -n C, --count=C Print differences up to C number
- -d D, --delta=D Print difference when greater than limit D
- -p R, --relative=R Print difference when greater than relative limit R
-
- C - is a positive integer
- D - is a positive number. Compare criteria is |a - b| > D
- R - is a positive number. Compare criteria is |(b-a)/a| > R
+ -n C, --count=C Print differences up to C number, C is a positive integer.
+ -d D, --delta=D Print difference if (|a-b| > D), D is a positive number.
+ -p R, --relative=R Print difference if (|(a-b)/b| > R), R is a positive number.
+ --use-system-epsilon Print difference if (|a-b| > EPSILON),
+ where EPSILON (FLT_EPSILON or FLT_EPSILON) is the system epsilon value.
+ If the system epsilon is not defined, use the value below:
+ FLT_EPSILON = 1.19209E-07 for float
+ DBL_EPSILON = 2.22045E-16 for double
+ -d, -p, and --use-system-epsilon options are used for comparing floating point values.
+ By default, strict equality is used. Use -p or -d to set specific tolerance.
Modes of output:
diff --git a/tools/h5diff/testfiles/h5diff_603.txt b/tools/h5diff/testfiles/h5diff_603.txt
index 30fe246..e115114 100644
--- a/tools/h5diff/testfiles/h5diff_603.txt
+++ b/tools/h5diff/testfiles/h5diff_603.txt
@@ -12,13 +12,16 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]]
-q, --quiet Quiet mode. Do not do output
-c, --compare List objects that are not comparable
-N, --nan Avoid NaNs detection
- -n C, --count=C Print differences up to C number
- -d D, --delta=D Print difference when greater than limit D
- -p R, --relative=R Print difference when greater than relative limit R
-
- C - is a positive integer
- D - is a positive number. Compare criteria is |a - b| > D
- R - is a positive number. Compare criteria is |(b-a)/a| > R
+ -n C, --count=C Print differences up to C number, C is a positive integer.
+ -d D, --delta=D Print difference if (|a-b| > D), D is a positive number.
+ -p R, --relative=R Print difference if (|(a-b)/b| > R), R is a positive number.
+ --use-system-epsilon Print difference if (|a-b| > EPSILON),
+ where EPSILON (FLT_EPSILON or FLT_EPSILON) is the system epsilon value.
+ If the system epsilon is not defined, use the value below:
+ FLT_EPSILON = 1.19209E-07 for float
+ DBL_EPSILON = 2.22045E-16 for double
+ -d, -p, and --use-system-epsilon options are used for comparing floating point values.
+ By default, strict equality is used. Use -p or -d to set specific tolerance.
Modes of output:
diff --git a/tools/h5diff/testfiles/h5diff_604.txt b/tools/h5diff/testfiles/h5diff_604.txt
index 9357b26..554f2ed 100644
--- a/tools/h5diff/testfiles/h5diff_604.txt
+++ b/tools/h5diff/testfiles/h5diff_604.txt
@@ -1,63 +1,2 @@
-<-d 0> is not a valid option
-usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]]
- file1 File name of the first HDF5 file
- file2 File name of the second HDF5 file
- [obj1] Name of an HDF5 object, in absolute path
- [obj2] Name of an HDF5 object, in absolute path
- OPTIONS
- -h, --help Print a usage message and exit
- -V, --version Print version number and exit
- -r, --report Report mode. Print differences
- -v, --verbose Verbose mode. Print differences, list of objects
- -q, --quiet Quiet mode. Do not do output
- -c, --compare List objects that are not comparable
- -N, --nan Avoid NaNs detection
- -n C, --count=C Print differences up to C number
- -d D, --delta=D Print difference when greater than limit D
- -p R, --relative=R Print difference when greater than relative limit R
-
- C - is a positive integer
- D - is a positive number. Compare criteria is |a - b| > D
- R - is a positive number. Compare criteria is |(b-a)/a| > R
-
- Modes of output:
-
- Default mode: print the number of differences found and where they occured
- -r Report mode: print the above plus the differences
- -v Verbose mode: print the above plus a list of objects and warnings
- -q Quiet mode: do not print output
-
- Compare criteria
-
- If no objects [obj1[obj2]] are specified, h5diff only compares objects
- with the same absolute path in both files
-
- The compare criteria is:
- 1) datasets: numerical array differences 2) groups: name string difference
- 3) datatypes: the return value of H5Tequal 4) links: name string difference
- of the linked value
-
- Return exit code:
-
- 1 if differences found, 0 if no differences, 2 if error
-
- Examples of use:
-
- 1) h5diff file1 file2 /g1/dset1 /g1/dset2
-
- Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
-
- 2) h5diff file1 file2 /g1/dset1
-
- Compares object '/g1/dset1' in both files
-
- 3) h5diff file1 file2
-
- Compares all objects in both files
-
- Note) file1 and file2 can be the same file. Use
-
- h5diff file1 file1 /g1/dset1 /g1/dset2
-
- to compare '/g1/dset1' and '/g1/dset2' in the same file
-
+dataset: </g1/dset3> and </g1/dset4>
+6 differences found
diff --git a/tools/h5diff/testfiles/h5diff_605.txt b/tools/h5diff/testfiles/h5diff_605.txt
index 1c99713..554f2ed 100644
--- a/tools/h5diff/testfiles/h5diff_605.txt
+++ b/tools/h5diff/testfiles/h5diff_605.txt
@@ -1,63 +1,2 @@
-<-d u> is not a valid option
-usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]]
- file1 File name of the first HDF5 file
- file2 File name of the second HDF5 file
- [obj1] Name of an HDF5 object, in absolute path
- [obj2] Name of an HDF5 object, in absolute path
- OPTIONS
- -h, --help Print a usage message and exit
- -V, --version Print version number and exit
- -r, --report Report mode. Print differences
- -v, --verbose Verbose mode. Print differences, list of objects
- -q, --quiet Quiet mode. Do not do output
- -c, --compare List objects that are not comparable
- -N, --nan Avoid NaNs detection
- -n C, --count=C Print differences up to C number
- -d D, --delta=D Print difference when greater than limit D
- -p R, --relative=R Print difference when greater than relative limit R
-
- C - is a positive integer
- D - is a positive number. Compare criteria is |a - b| > D
- R - is a positive number. Compare criteria is |(b-a)/a| > R
-
- Modes of output:
-
- Default mode: print the number of differences found and where they occured
- -r Report mode: print the above plus the differences
- -v Verbose mode: print the above plus a list of objects and warnings
- -q Quiet mode: do not print output
-
- Compare criteria
-
- If no objects [obj1[obj2]] are specified, h5diff only compares objects
- with the same absolute path in both files
-
- The compare criteria is:
- 1) datasets: numerical array differences 2) groups: name string difference
- 3) datatypes: the return value of H5Tequal 4) links: name string difference
- of the linked value
-
- Return exit code:
-
- 1 if differences found, 0 if no differences, 2 if error
-
- Examples of use:
-
- 1) h5diff file1 file2 /g1/dset1 /g1/dset2
-
- Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
-
- 2) h5diff file1 file2 /g1/dset1
-
- Compares object '/g1/dset1' in both files
-
- 3) h5diff file1 file2
-
- Compares all objects in both files
-
- Note) file1 and file2 can be the same file. Use
-
- h5diff file1 file1 /g1/dset1 /g1/dset2
-
- to compare '/g1/dset1' and '/g1/dset2' in the same file
-
+dataset: </g1/dset3> and </g1/dset4>
+6 differences found
diff --git a/tools/h5diff/testfiles/h5diff_606.txt b/tools/h5diff/testfiles/h5diff_606.txt
index 0567106..db361fd 100644
--- a/tools/h5diff/testfiles/h5diff_606.txt
+++ b/tools/h5diff/testfiles/h5diff_606.txt
@@ -12,13 +12,16 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]]
-q, --quiet Quiet mode. Do not do output
-c, --compare List objects that are not comparable
-N, --nan Avoid NaNs detection
- -n C, --count=C Print differences up to C number
- -d D, --delta=D Print difference when greater than limit D
- -p R, --relative=R Print difference when greater than relative limit R
-
- C - is a positive integer
- D - is a positive number. Compare criteria is |a - b| > D
- R - is a positive number. Compare criteria is |(b-a)/a| > R
+ -n C, --count=C Print differences up to C number, C is a positive integer.
+ -d D, --delta=D Print difference if (|a-b| > D), D is a positive number.
+ -p R, --relative=R Print difference if (|(a-b)/b| > R), R is a positive number.
+ --use-system-epsilon Print difference if (|a-b| > EPSILON),
+ where EPSILON (FLT_EPSILON or FLT_EPSILON) is the system epsilon value.
+ If the system epsilon is not defined, use the value below:
+ FLT_EPSILON = 1.19209E-07 for float
+ DBL_EPSILON = 2.22045E-16 for double
+ -d, -p, and --use-system-epsilon options are used for comparing floating point values.
+ By default, strict equality is used. Use -p or -d to set specific tolerance.
Modes of output:
diff --git a/tools/h5diff/testfiles/h5diff_612.txt b/tools/h5diff/testfiles/h5diff_612.txt
index 505705b..bbd6b00 100644
--- a/tools/h5diff/testfiles/h5diff_612.txt
+++ b/tools/h5diff/testfiles/h5diff_612.txt
@@ -12,13 +12,16 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]]
-q, --quiet Quiet mode. Do not do output
-c, --compare List objects that are not comparable
-N, --nan Avoid NaNs detection
- -n C, --count=C Print differences up to C number
- -d D, --delta=D Print difference when greater than limit D
- -p R, --relative=R Print difference when greater than relative limit R
-
- C - is a positive integer
- D - is a positive number. Compare criteria is |a - b| > D
- R - is a positive number. Compare criteria is |(b-a)/a| > R
+ -n C, --count=C Print differences up to C number, C is a positive integer.
+ -d D, --delta=D Print difference if (|a-b| > D), D is a positive number.
+ -p R, --relative=R Print difference if (|(a-b)/b| > R), R is a positive number.
+ --use-system-epsilon Print difference if (|a-b| > EPSILON),
+ where EPSILON (FLT_EPSILON or FLT_EPSILON) is the system epsilon value.
+ If the system epsilon is not defined, use the value below:
+ FLT_EPSILON = 1.19209E-07 for float
+ DBL_EPSILON = 2.22045E-16 for double
+ -d, -p, and --use-system-epsilon options are used for comparing floating point values.
+ By default, strict equality is used. Use -p or -d to set specific tolerance.
Modes of output:
diff --git a/tools/h5diff/testfiles/h5diff_613.txt b/tools/h5diff/testfiles/h5diff_613.txt
index 1a89746..554f2ed 100644
--- a/tools/h5diff/testfiles/h5diff_613.txt
+++ b/tools/h5diff/testfiles/h5diff_613.txt
@@ -1,63 +1,2 @@
-<-p 0> is not a valid option
-usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]]
- file1 File name of the first HDF5 file
- file2 File name of the second HDF5 file
- [obj1] Name of an HDF5 object, in absolute path
- [obj2] Name of an HDF5 object, in absolute path
- OPTIONS
- -h, --help Print a usage message and exit
- -V, --version Print version number and exit
- -r, --report Report mode. Print differences
- -v, --verbose Verbose mode. Print differences, list of objects
- -q, --quiet Quiet mode. Do not do output
- -c, --compare List objects that are not comparable
- -N, --nan Avoid NaNs detection
- -n C, --count=C Print differences up to C number
- -d D, --delta=D Print difference when greater than limit D
- -p R, --relative=R Print difference when greater than relative limit R
-
- C - is a positive integer
- D - is a positive number. Compare criteria is |a - b| > D
- R - is a positive number. Compare criteria is |(b-a)/a| > R
-
- Modes of output:
-
- Default mode: print the number of differences found and where they occured
- -r Report mode: print the above plus the differences
- -v Verbose mode: print the above plus a list of objects and warnings
- -q Quiet mode: do not print output
-
- Compare criteria
-
- If no objects [obj1[obj2]] are specified, h5diff only compares objects
- with the same absolute path in both files
-
- The compare criteria is:
- 1) datasets: numerical array differences 2) groups: name string difference
- 3) datatypes: the return value of H5Tequal 4) links: name string difference
- of the linked value
-
- Return exit code:
-
- 1 if differences found, 0 if no differences, 2 if error
-
- Examples of use:
-
- 1) h5diff file1 file2 /g1/dset1 /g1/dset2
-
- Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
-
- 2) h5diff file1 file2 /g1/dset1
-
- Compares object '/g1/dset1' in both files
-
- 3) h5diff file1 file2
-
- Compares all objects in both files
-
- Note) file1 and file2 can be the same file. Use
-
- h5diff file1 file1 /g1/dset1 /g1/dset2
-
- to compare '/g1/dset1' and '/g1/dset2' in the same file
-
+dataset: </g1/dset3> and </g1/dset4>
+6 differences found
diff --git a/tools/h5diff/testfiles/h5diff_614.txt b/tools/h5diff/testfiles/h5diff_614.txt
index ec12818..554f2ed 100644
--- a/tools/h5diff/testfiles/h5diff_614.txt
+++ b/tools/h5diff/testfiles/h5diff_614.txt
@@ -1,63 +1,2 @@
-<-p u> is not a valid option
-usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]]
- file1 File name of the first HDF5 file
- file2 File name of the second HDF5 file
- [obj1] Name of an HDF5 object, in absolute path
- [obj2] Name of an HDF5 object, in absolute path
- OPTIONS
- -h, --help Print a usage message and exit
- -V, --version Print version number and exit
- -r, --report Report mode. Print differences
- -v, --verbose Verbose mode. Print differences, list of objects
- -q, --quiet Quiet mode. Do not do output
- -c, --compare List objects that are not comparable
- -N, --nan Avoid NaNs detection
- -n C, --count=C Print differences up to C number
- -d D, --delta=D Print difference when greater than limit D
- -p R, --relative=R Print difference when greater than relative limit R
-
- C - is a positive integer
- D - is a positive number. Compare criteria is |a - b| > D
- R - is a positive number. Compare criteria is |(b-a)/a| > R
-
- Modes of output:
-
- Default mode: print the number of differences found and where they occured
- -r Report mode: print the above plus the differences
- -v Verbose mode: print the above plus a list of objects and warnings
- -q Quiet mode: do not print output
-
- Compare criteria
-
- If no objects [obj1[obj2]] are specified, h5diff only compares objects
- with the same absolute path in both files
-
- The compare criteria is:
- 1) datasets: numerical array differences 2) groups: name string difference
- 3) datatypes: the return value of H5Tequal 4) links: name string difference
- of the linked value
-
- Return exit code:
-
- 1 if differences found, 0 if no differences, 2 if error
-
- Examples of use:
-
- 1) h5diff file1 file2 /g1/dset1 /g1/dset2
-
- Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
-
- 2) h5diff file1 file2 /g1/dset1
-
- Compares object '/g1/dset1' in both files
-
- 3) h5diff file1 file2
-
- Compares all objects in both files
-
- Note) file1 and file2 can be the same file. Use
-
- h5diff file1 file1 /g1/dset1 /g1/dset2
-
- to compare '/g1/dset1' and '/g1/dset2' in the same file
-
+dataset: </g1/dset3> and </g1/dset4>
+6 differences found
diff --git a/tools/h5diff/testfiles/h5diff_615.txt b/tools/h5diff/testfiles/h5diff_615.txt
index 8528c0e..9c8f0c7 100644
--- a/tools/h5diff/testfiles/h5diff_615.txt
+++ b/tools/h5diff/testfiles/h5diff_615.txt
@@ -12,13 +12,16 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]]
-q, --quiet Quiet mode. Do not do output
-c, --compare List objects that are not comparable
-N, --nan Avoid NaNs detection
- -n C, --count=C Print differences up to C number
- -d D, --delta=D Print difference when greater than limit D
- -p R, --relative=R Print difference when greater than relative limit R
-
- C - is a positive integer
- D - is a positive number. Compare criteria is |a - b| > D
- R - is a positive number. Compare criteria is |(b-a)/a| > R
+ -n C, --count=C Print differences up to C number, C is a positive integer.
+ -d D, --delta=D Print difference if (|a-b| > D), D is a positive number.
+ -p R, --relative=R Print difference if (|(a-b)/b| > R), R is a positive number.
+ --use-system-epsilon Print difference if (|a-b| > EPSILON),
+ where EPSILON (FLT_EPSILON or FLT_EPSILON) is the system epsilon value.
+ If the system epsilon is not defined, use the value below:
+ FLT_EPSILON = 1.19209E-07 for float
+ DBL_EPSILON = 2.22045E-16 for double
+ -d, -p, and --use-system-epsilon options are used for comparing floating point values.
+ By default, strict equality is used. Use -p or -d to set specific tolerance.
Modes of output:
diff --git a/tools/h5diff/testfiles/h5diff_621.txt b/tools/h5diff/testfiles/h5diff_621.txt
index 96d6c3f..79eebed 100644
--- a/tools/h5diff/testfiles/h5diff_621.txt
+++ b/tools/h5diff/testfiles/h5diff_621.txt
@@ -12,13 +12,16 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]]
-q, --quiet Quiet mode. Do not do output
-c, --compare List objects that are not comparable
-N, --nan Avoid NaNs detection
- -n C, --count=C Print differences up to C number
- -d D, --delta=D Print difference when greater than limit D
- -p R, --relative=R Print difference when greater than relative limit R
-
- C - is a positive integer
- D - is a positive number. Compare criteria is |a - b| > D
- R - is a positive number. Compare criteria is |(b-a)/a| > R
+ -n C, --count=C Print differences up to C number, C is a positive integer.
+ -d D, --delta=D Print difference if (|a-b| > D), D is a positive number.
+ -p R, --relative=R Print difference if (|(a-b)/b| > R), R is a positive number.
+ --use-system-epsilon Print difference if (|a-b| > EPSILON),
+ where EPSILON (FLT_EPSILON or FLT_EPSILON) is the system epsilon value.
+ If the system epsilon is not defined, use the value below:
+ FLT_EPSILON = 1.19209E-07 for float
+ DBL_EPSILON = 2.22045E-16 for double
+ -d, -p, and --use-system-epsilon options are used for comparing floating point values.
+ By default, strict equality is used. Use -p or -d to set specific tolerance.
Modes of output:
diff --git a/tools/h5diff/testfiles/h5diff_622.txt b/tools/h5diff/testfiles/h5diff_622.txt
index 9dc3751..09de51d 100644
--- a/tools/h5diff/testfiles/h5diff_622.txt
+++ b/tools/h5diff/testfiles/h5diff_622.txt
@@ -12,13 +12,16 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]]
-q, --quiet Quiet mode. Do not do output
-c, --compare List objects that are not comparable
-N, --nan Avoid NaNs detection
- -n C, --count=C Print differences up to C number
- -d D, --delta=D Print difference when greater than limit D
- -p R, --relative=R Print difference when greater than relative limit R
-
- C - is a positive integer
- D - is a positive number. Compare criteria is |a - b| > D
- R - is a positive number. Compare criteria is |(b-a)/a| > R
+ -n C, --count=C Print differences up to C number, C is a positive integer.
+ -d D, --delta=D Print difference if (|a-b| > D), D is a positive number.
+ -p R, --relative=R Print difference if (|(a-b)/b| > R), R is a positive number.
+ --use-system-epsilon Print difference if (|a-b| > EPSILON),
+ where EPSILON (FLT_EPSILON or FLT_EPSILON) is the system epsilon value.
+ If the system epsilon is not defined, use the value below:
+ FLT_EPSILON = 1.19209E-07 for float
+ DBL_EPSILON = 2.22045E-16 for double
+ -d, -p, and --use-system-epsilon options are used for comparing floating point values.
+ By default, strict equality is used. Use -p or -d to set specific tolerance.
Modes of output:
diff --git a/tools/h5diff/testfiles/h5diff_623.txt b/tools/h5diff/testfiles/h5diff_623.txt
index a02f5ea..dc60b94 100644
--- a/tools/h5diff/testfiles/h5diff_623.txt
+++ b/tools/h5diff/testfiles/h5diff_623.txt
@@ -12,13 +12,16 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]]
-q, --quiet Quiet mode. Do not do output
-c, --compare List objects that are not comparable
-N, --nan Avoid NaNs detection
- -n C, --count=C Print differences up to C number
- -d D, --delta=D Print difference when greater than limit D
- -p R, --relative=R Print difference when greater than relative limit R
-
- C - is a positive integer
- D - is a positive number. Compare criteria is |a - b| > D
- R - is a positive number. Compare criteria is |(b-a)/a| > R
+ -n C, --count=C Print differences up to C number, C is a positive integer.
+ -d D, --delta=D Print difference if (|a-b| > D), D is a positive number.
+ -p R, --relative=R Print difference if (|(a-b)/b| > R), R is a positive number.
+ --use-system-epsilon Print difference if (|a-b| > EPSILON),
+ where EPSILON (FLT_EPSILON or FLT_EPSILON) is the system epsilon value.
+ If the system epsilon is not defined, use the value below:
+ FLT_EPSILON = 1.19209E-07 for float
+ DBL_EPSILON = 2.22045E-16 for double
+ -d, -p, and --use-system-epsilon options are used for comparing floating point values.
+ By default, strict equality is used. Use -p or -d to set specific tolerance.
Modes of output:
diff --git a/tools/h5diff/testfiles/h5diff_624.txt b/tools/h5diff/testfiles/h5diff_624.txt
index 396a007..016ab77 100644
--- a/tools/h5diff/testfiles/h5diff_624.txt
+++ b/tools/h5diff/testfiles/h5diff_624.txt
@@ -12,13 +12,16 @@ usage: h5diff [OPTIONS] file1 file2 [obj1[obj2]]
-q, --quiet Quiet mode. Do not do output
-c, --compare List objects that are not comparable
-N, --nan Avoid NaNs detection
- -n C, --count=C Print differences up to C number
- -d D, --delta=D Print difference when greater than limit D
- -p R, --relative=R Print difference when greater than relative limit R
-
- C - is a positive integer
- D - is a positive number. Compare criteria is |a - b| > D
- R - is a positive number. Compare criteria is |(b-a)/a| > R
+ -n C, --count=C Print differences up to C number, C is a positive integer.
+ -d D, --delta=D Print difference if (|a-b| > D), D is a positive number.
+ -p R, --relative=R Print difference if (|(a-b)/b| > R), R is a positive number.
+ --use-system-epsilon Print difference if (|a-b| > EPSILON),
+ where EPSILON (FLT_EPSILON or FLT_EPSILON) is the system epsilon value.
+ If the system epsilon is not defined, use the value below:
+ FLT_EPSILON = 1.19209E-07 for float
+ DBL_EPSILON = 2.22045E-16 for double
+ -d, -p, and --use-system-epsilon options are used for comparing floating point values.
+ By default, strict equality is used. Use -p or -d to set specific tolerance.
Modes of output:
diff --git a/tools/h5diff/testh5diff.sh b/tools/h5diff/testh5diff.sh
index 4167243..b8e743d 100755
--- a/tools/h5diff/testh5diff.sh
+++ b/tools/h5diff/testh5diff.sh
@@ -461,9 +461,9 @@ TOOLTEST h5diff_606.txt -d 0x1 $FILE1 $FILE2 g1/dset3 g1/dset4
TESTING $H5DIFF -d "1" $SRCFILE1 $SRCFILE2 g1/dset3 g1/dset4
TOOLTEST h5diff_607.txt -d "1" $FILE1 $FILE2 g1/dset3 g1/dset4
-# 6.8: repeated option
-TESTING $H5DIFF -d 1 -d 2 $SRCFILE1 $SRCFILE2 g1/dset3 g1/dset4
-TOOLTEST h5diff_608.txt -d 1 -d 2 $FILE1 $FILE2 g1/dset3 g1/dset4
+# 6.8: use system epsilon
+TESTING $H5DIFF --use-system-epsilon $SRCFILE1 $SRCFILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_608.txt --use-system-epsilon $FILE1 $FILE2 g1/dset3 g1/dset4
# 6.9: number larger than biggest difference
TESTING $H5DIFF -d 200 $SRCFILE1 $SRCFILE2 g1/dset3 g1/dset4
diff --git a/tools/lib/h5diff.h b/tools/lib/h5diff.h
index c3cdd3b..df264dd 100644
--- a/tools/lib/h5diff.h
+++ b/tools/lib/h5diff.h
@@ -25,21 +25,22 @@
*/
typedef struct {
- int m_quiet; /* quiet mode: no output at all */
- int m_report; /* report mode: print the data */
- int m_verbose; /* verbose mode: print the data, list of objcets, warnings */
- int d; /* delta, absolute value to compare */
- double delta; /* delta value */
- int p; /* relative error to compare*/
- double percent; /* relative error value */
- int n; /* count, compare up to count */
- hsize_t count; /* count value */
- int err_stat; /* an error ocurred (1, error, 0, no error) */
- int cmn_objs; /* do we have common objects */
- int not_cmp; /* are the objects comparable */
- int contents; /* equal contents */
- int do_nans; /* consider Nans while diffing floats */
- int m_list_not_cmp; /* list not comparable messages */
+ int m_quiet; /* quiet mide: no output at all */
+ int m_report; /* report mode: print the data */
+ int m_verbose; /* verbose mode: print the data, list of objcets, warnings */
+ int d; /* delta, absolute value to compare */
+ double delta; /* delta value */
+ int p; /* relative error to compare*/
+ int use_system_epsilon; /* flag to use system epsilon (1 or 0) */
+ double percent; /* relative error value */
+ int n; /* count, compare up to count */
+ hsize_t count; /* count value */
+ int err_stat; /* an error ocurred (1, error, 0, no error) */
+ int cmn_objs; /* do we have common objects */
+ int not_cmp; /* are the objects comparable */
+ int contents; /* equal contents */
+ int do_nans; /* consider Nans while diffing floats */
+ int m_list_not_cmp; /* list not comparable messages */
} diff_opt_t;
diff --git a/tools/lib/h5diff_array.c b/tools/lib/h5diff_array.c
index 735ea70..77ee74a 100644
--- a/tools/lib/h5diff_array.c
+++ b/tools/lib/h5diff_array.c
@@ -74,9 +74,16 @@
#define ULLI_FORMAT_P_NOTCOMP "%-15"H5_PRINTF_LL_WIDTH"u %-15"H5_PRINTF_LL_WIDTH"u %-15"H5_PRINTF_LL_WIDTH"d not comparable\n"
-/* values for FLT_EPSILON same as C Reference manual */
-#define H5DIFF_FLT_EPSILON .00001
-#define H5DIFF_DBL_EPSILON .000000001
+/* if system EPSILON is defined, use the system EPSILON; otherwise, use
+ constants that are close to most EPSILON values */
+
+#ifndef FLT_EPSILON
+#define FLT_EPSILON 1.19209E-07
+#endif
+
+#ifndef DBL_EPSILON
+#define DBL_EPSILON 2.22045E-16
+#endif
/*-------------------------------------------------------------------------
@@ -5502,10 +5509,6 @@ error:
static
hbool_t equal_double(double value, double expected, diff_opt_t *options)
{
- int both_zero;
- int is_zero;
-
-
if ( options->do_nans )
{
@@ -5535,22 +5538,15 @@ hbool_t equal_double(double value, double expected, diff_opt_t *options)
}
}
- BOTH_ZERO(value,expected)
- if (both_zero)
- return TRUE;
-
- IS_ZERO(expected)
- if (is_zero)
- return(equal_double(expected,value,options));
-
if (value == expected)
return TRUE;
- if ( ABS( (value-expected) / expected) < H5DIFF_DBL_EPSILON)
- return TRUE;
- else
- return FALSE;
+ if (options->use_system_epsilon) {
+ if ( ABS( (value-expected) ) < DBL_EPSILON)
+ return TRUE;
+ }
+ return FALSE;
}
/*-------------------------------------------------------------------------
@@ -5566,10 +5562,6 @@ hbool_t equal_double(double value, double expected, diff_opt_t *options)
static
hbool_t equal_ldouble(long double value, long double expected, diff_opt_t *options)
{
- int both_zero;
- int is_zero;
-
-
if ( options->do_nans )
{
@@ -5599,22 +5591,15 @@ hbool_t equal_ldouble(long double value, long double expected, diff_opt_t *optio
}
}
- BOTH_ZERO(value,expected)
- if (both_zero)
- return TRUE;
-
- IS_ZERO(expected)
- if (is_zero)
- return(equal_ldouble(expected,value,options));
-
if (value == expected)
return TRUE;
- if ( ABS( (value-expected) / expected) < H5DIFF_DBL_EPSILON)
- return TRUE;
- else
- return FALSE;
+ if (options->use_system_epsilon) {
+ if ( ABS( (value-expected) / expected) < DBL_EPSILON)
+ return TRUE;
+ }
+ return FALSE;
}
#endif /* #if H5_SIZEOF_LONG_DOUBLE !=0 */
@@ -5634,9 +5619,6 @@ hbool_t equal_ldouble(long double value, long double expected, diff_opt_t *optio
static
hbool_t equal_float(float value, float expected, diff_opt_t *options)
{
- int both_zero;
- int is_zero;
-
if ( options->do_nans )
{
@@ -5666,21 +5648,15 @@ hbool_t equal_float(float value, float expected, diff_opt_t *options)
}
}
- BOTH_ZERO(value,expected)
- if (both_zero)
- return TRUE;
-
- IS_ZERO(expected)
- if (is_zero)
- return(equal_float(expected,value,options));
-
if (value == expected)
return TRUE;
- if ( ABS( (value-expected) / expected) < H5DIFF_FLT_EPSILON)
- return TRUE;
- else
- return FALSE;
+ if (options->use_system_epsilon) {
+ if ( ABS( (value-expected) / expected) < FLT_EPSILON)
+ return TRUE;
+ }
+
+ return FALSE;
}