summaryrefslogtreecommitdiffstats
path: root/tools/lib/h5diff_array.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lib/h5diff_array.c')
-rw-r--r--tools/lib/h5diff_array.c1107
1 files changed, 1107 insertions, 0 deletions
diff --git a/tools/lib/h5diff_array.c b/tools/lib/h5diff_array.c
new file mode 100644
index 0000000..f9518de
--- /dev/null
+++ b/tools/lib/h5diff_array.c
@@ -0,0 +1,1107 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#include "h5diff.h"
+#include "H5private.h"
+#include <assert.h>
+#include <math.h>
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_array
+ *
+ * Purpose: compare array;
+ * currenttly only the NATIVE types below are supported
+ *
+ * Return: number of differences found
+ *
+ * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ *
+ * Date: May 30, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+int diff_array( void *buf1,
+ void *buf2,
+ hsize_t tot_cnt,
+ int rank,
+ hsize_t *dims,
+ diff_opt_t options,
+ const char *obj1,
+ const char *obj2,
+ hid_t m_type )
+{
+ char fmt_llong[255], fmt_ullong[255];
+ char fmt_llongp[255], fmt_ullongp[255];
+ size_t type_size;/* just check */
+ int nfound=0; /* number of differences found */
+ int ph=1; /* print header */
+ int acc[32]; /* accumulator and matrix position */
+ int pos[32];
+ unsigned i;
+ int j;
+ char *_buf1 = (char*)buf1;
+ char *_buf2 = (char*)buf2;
+
+
+ /* Build default formats for long long types */
+ sprintf(fmt_llong, "%%%sd %%%sd %%%sd\n",
+ H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH);
+ sprintf(fmt_ullong, "%%%su %%%su %%%su\n",
+ H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH);
+ sprintf(fmt_llongp, "%%%sd %%%sd %%%sd %%%sd\n",
+ H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH);
+ sprintf(fmt_ullongp, "%%%su %%%su %%%su %%%su\n",
+ H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH);
+
+
+ acc[rank-1]=1;
+ for(j=(rank-2); j>=0; j--)
+ {
+ acc[j]=acc[j+1]*(int)dims[j+1];
+ }
+
+ /* Get the size. */
+ type_size = H5Tget_size( m_type );
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_SCHAR
+ *-------------------------------------------------------------------------
+ */
+ if (H5Tequal(m_type, H5T_NATIVE_SCHAR))
+ {
+ char temp1_char;
+ char temp2_char;
+ assert(type_size==sizeof(char));
+ for ( i = 0; i < tot_cnt; i++)
+ {
+ memcpy(&temp1_char, _buf1, sizeof(char));
+ memcpy(&temp2_char, _buf2, sizeof(char));
+ /* -d and !-p */
+ if (options.d && !options.p)
+ {
+ if (abs(temp1_char-temp2_char) > options.delta)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IFORMAT,temp1_char,temp2_char,abs(temp1_char-temp2_char));
+ }
+ nfound++;
+ }
+ }
+ /* !-d and -p */
+ else if (!options.d && options.p)
+ {
+ if ( temp1_char!=0 && abs(1-temp2_char/temp1_char) > options.percent )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IPFORMAT,temp1_char,temp2_char,abs(temp1_char-temp2_char),
+ abs(1-temp2_char/temp1_char));
+ }
+ nfound++;
+ }
+ }
+ /* -d and -p */
+ else if ( options.d && options.p)
+ {
+ if ( temp1_char!=0 && abs(1-temp2_char/temp1_char) > options.percent &&
+ abs(temp1_char-temp2_char) > options.delta )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IPFORMAT,temp1_char,temp2_char,abs(temp1_char-temp2_char),
+ abs(1-temp2_char/temp1_char));
+ }
+ nfound++;
+ }
+ }
+ else if (temp1_char != temp2_char)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IFORMAT,temp1_char,temp2_char,abs(temp1_char-temp2_char));
+ }
+ nfound++;
+ }
+
+ _buf1+=sizeof(char);
+ _buf2+=sizeof(char);
+ }/* i */
+
+ } /*H5T_NATIVE_SCHAR*/
+
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_UCHAR
+ *-------------------------------------------------------------------------
+ */
+ else if (H5Tequal(m_type, H5T_NATIVE_UCHAR))
+ {
+ unsigned char temp1_uchar;
+ unsigned char temp2_uchar;
+ assert(type_size==sizeof(unsigned char));
+ for ( i = 0; i < tot_cnt; i++)
+ {
+ memcpy(&temp1_uchar, _buf1, sizeof(unsigned char));
+ memcpy(&temp2_uchar, _buf2, sizeof(unsigned char));
+ /* -d and !-p */
+ if (options.d && !options.p)
+ {
+ if (abs(temp1_uchar-temp2_uchar) > options.delta)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar));
+ }
+ nfound++;
+ }
+ }
+ /* !-d and -p */
+ else if (!options.d && options.p)
+ {
+ if ( temp1_uchar!=0 && abs(1-temp2_uchar/temp1_uchar) > options.percent )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IPFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar),
+ abs(1-temp2_uchar/temp1_uchar));
+ }
+ nfound++;
+ }
+ }
+ /* -d and -p */
+ else if ( options.d && options.p)
+ {
+ if ( temp1_uchar!=0 && abs(1-temp2_uchar/temp1_uchar) > options.percent &&
+ abs(temp1_uchar-temp2_uchar) > options.delta )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IPFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar),
+ abs(1-temp2_uchar/temp1_uchar));
+ }
+ nfound++;
+ }
+ }
+ else if (temp1_uchar != temp2_uchar)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar));
+ }
+ nfound++;
+ }
+
+ _buf1+=sizeof(unsigned char);
+ _buf2+=sizeof(unsigned char);
+ }/* i */
+
+ } /*H5T_NATIVE_UCHAR*/
+
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_SHORT
+ *-------------------------------------------------------------------------
+ */
+
+ else if (H5Tequal(m_type, H5T_NATIVE_SHORT))
+ {
+ short temp1_short;
+ short temp2_short;
+ assert(type_size==sizeof(short));
+ for ( i = 0; i < tot_cnt; i++)
+ {
+ memcpy(&temp1_short, _buf1, sizeof(short));
+ memcpy(&temp2_short, _buf2, sizeof(short));
+ /* -d and !-p */
+ if (options.d && !options.p)
+ {
+ if (abs(temp1_short-temp2_short) > options.delta)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IFORMAT,temp1_short,temp2_short,abs(temp1_short-temp2_short));
+ }
+ nfound++;
+ }
+ }
+ /* !-d and -p */
+ else if (!options.d && options.p)
+ {
+ if ( temp1_short!=0 && abs(1-temp2_short/temp1_short) > options.percent )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IPFORMAT,temp1_short,temp2_short,abs(temp1_short-temp2_short),
+ abs(1-temp2_short/temp1_short));
+ }
+ nfound++;
+ }
+ }
+ /* -d and -p */
+ else if ( options.d && options.p)
+ {
+ if ( temp1_short!=0 && abs(1-temp2_short/temp1_short) > options.percent &&
+ abs(temp1_short-temp2_short) > options.delta )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IPFORMAT,temp1_short,temp2_short,abs(temp1_short-temp2_short),
+ abs(1-temp2_short/temp1_short));
+ }
+ nfound++;
+ }
+ }
+ else if (temp1_short != temp2_short)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IFORMAT,temp1_short,temp2_short,abs(temp1_short-temp2_short));
+ }
+ nfound++;
+ }
+
+ _buf1+=sizeof(short);
+ _buf2+=sizeof(short);
+ }/* i */
+
+ } /*H5T_NATIVE_SHORT*/
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_USHORT
+ *-------------------------------------------------------------------------
+ */
+
+ else if (H5Tequal(m_type, H5T_NATIVE_USHORT))
+ {
+ unsigned short temp1_ushort;
+ unsigned short temp2_ushort;
+ assert(type_size==sizeof(short));
+ for ( i = 0; i < tot_cnt; i++)
+ {
+ memcpy(&temp1_ushort, _buf1, sizeof(unsigned short));
+ memcpy(&temp2_ushort, _buf2, sizeof(unsigned short));
+ /* -d and !-p */
+ if (options.d && !options.p)
+ {
+ if (abs(temp1_ushort-temp2_ushort) > options.delta)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IFORMAT,temp1_ushort,temp2_ushort,abs(temp1_ushort-temp2_ushort));
+ }
+ nfound++;
+ }
+ }
+ /* !-d and -p */
+ else if (!options.d && options.p)
+ {
+ if ( temp1_ushort!=0 && abs(1-temp2_ushort/temp1_ushort) > options.percent )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IPFORMAT,temp1_ushort,temp2_ushort,abs(temp1_ushort-temp2_ushort),
+ abs(1-temp2_ushort/temp1_ushort));
+ }
+ nfound++;
+ }
+ }
+ /* -d and -p */
+ else if ( options.d && options.p)
+ {
+ if ( temp1_ushort!=0 && abs(1-temp2_ushort/temp1_ushort) > options.percent &&
+ abs(temp1_ushort-temp2_ushort) > options.delta )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IPFORMAT,temp1_ushort,temp2_ushort,abs(temp1_ushort-temp2_ushort),
+ abs(1-temp2_ushort/temp1_ushort));
+ }
+ nfound++;
+ }
+ }
+ else if (temp1_ushort != temp2_ushort)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IFORMAT,temp1_ushort,temp2_ushort,abs(temp1_ushort-temp2_ushort));
+ }
+ nfound++;
+ }
+
+ _buf1+=sizeof(unsigned short);
+ _buf2+=sizeof(unsigned short);
+ }/* i */
+
+ } /*H5T_NATIVE_USHORT*/
+
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_INT
+ *-------------------------------------------------------------------------
+ */
+
+ else if (H5Tequal(m_type, H5T_NATIVE_INT))
+ {
+ int temp1_int;
+ int temp2_int;
+ assert(type_size==sizeof(int));
+ for ( i = 0; i < tot_cnt; i++)
+ {
+ memcpy(&temp1_int, _buf1, sizeof(int));
+ memcpy(&temp2_int, _buf2, sizeof(int));
+ /* -d and !-p */
+ if (options.d && !options.p)
+ {
+ if (abs(temp1_int-temp2_int) > options.delta)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IFORMAT,temp1_int,temp2_int,abs(temp1_int-temp2_int));
+ }
+ nfound++;
+ }
+ }
+ /* !-d and -p */
+ else if (!options.d && options.p)
+ {
+ if ( temp1_int!=0 && abs(1-temp2_int/temp1_int) > options.percent )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IPFORMAT,temp1_int,temp2_int,abs(temp1_int-temp2_int),
+ abs(1-temp2_int/temp1_int));
+ }
+ nfound++;
+ }
+ }
+ /* -d and -p */
+ else if ( options.d && options.p)
+ {
+ if ( temp1_int!=0 && abs(1-temp2_int/temp1_int) > options.percent &&
+ abs(temp1_int-temp2_int) > options.delta )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IPFORMAT,temp1_int,temp2_int,abs(temp1_int-temp2_int),
+ abs(1-temp2_int/temp1_int));
+ }
+ nfound++;
+ }
+ }
+ else if (temp1_int != temp2_int)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(IFORMAT,temp1_int,temp2_int,abs(temp1_int-temp2_int));
+ }
+ nfound++;
+ }
+
+ _buf1+=sizeof(int);
+ _buf2+=sizeof(int);
+ }/* i */
+
+ } /*H5T_NATIVE_INT*/
+
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_UINT
+ *-------------------------------------------------------------------------
+ */
+
+ else if (H5Tequal(m_type, H5T_NATIVE_UINT))
+ {
+ unsigned int temp1_uint;
+ unsigned int temp2_uint;
+ assert(type_size==sizeof(int));
+ for ( i = 0; i < tot_cnt; i++)
+ {
+ memcpy(&temp1_uint, _buf1, sizeof(unsigned int));
+ memcpy(&temp2_uint, _buf2, sizeof(unsigned int));
+ /* -d and !-p */
+ if (options.d && !options.p)
+ {
+ if (abs((int)(temp1_uint-temp2_uint)) > options.delta)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(UIFORMAT,temp1_uint,temp2_uint,abs((int)(temp1_uint-temp2_uint)));
+ }
+ nfound++;
+ }
+ }
+ /* !-d and -p */
+ else if (!options.d && options.p)
+ {
+ if ( temp1_uint!=0 && abs((int)(1-temp2_uint/temp1_uint)) > options.percent )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(UIPFORMAT,temp1_uint,temp2_uint,abs((int)(temp1_uint-temp2_uint)),
+ abs((int)(1-temp2_uint/temp1_uint)));
+ }
+ nfound++;
+ }
+ }
+ /* -d and -p */
+ else if ( options.d && options.p)
+ {
+ if ( temp1_uint!=0 && abs((int)(1-temp2_uint/temp1_uint)) > options.percent &&
+ abs((int)(temp1_uint-temp2_uint)) > options.delta )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(UIPFORMAT,temp1_uint,temp2_uint,abs((int)(temp1_uint-temp2_uint)),
+ abs((int)(1-temp2_uint/temp1_uint)));
+ }
+ nfound++;
+ }
+ }
+ else if (temp1_uint != temp2_uint)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(UIFORMAT,temp1_uint,temp2_uint,abs((int)(temp1_uint-temp2_uint)));
+ }
+ nfound++;
+ }
+
+ _buf1+=sizeof(unsigned int);
+ _buf2+=sizeof(unsigned int);
+ }/* i */
+
+ } /*H5T_NATIVE_UINT*/
+
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_LONG
+ *-------------------------------------------------------------------------
+ */
+
+ else if (H5Tequal(m_type, H5T_NATIVE_LONG))
+ {
+ long temp1_long;
+ long temp2_long;
+ assert(type_size==sizeof(long));
+ for ( i = 0; i < tot_cnt; i++)
+ {
+ memcpy(&temp1_long, _buf1, sizeof(long));
+ memcpy(&temp2_long, _buf2, sizeof(long));
+ /* -d and !-p */
+ if (options.d && !options.p)
+ {
+ if (labs(temp1_long-temp2_long) > (long)options.delta)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(LIFORMAT,temp1_long,temp2_long,labs(temp1_long-temp2_long));
+ }
+ nfound++;
+ }
+ }
+ /* !-d and -p */
+ else if (!options.d && options.p)
+ {
+ if ( temp1_long!=0 && labs(1-temp2_long/temp1_long) > (long)options.percent )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(LPIFORMAT,temp1_long,temp2_long,labs(temp1_long-temp2_long),
+ labs(1-temp2_long/temp1_long));
+ }
+ nfound++;
+ }
+ }
+ /* -d and -p */
+ else if ( options.d && options.p)
+ {
+ if ( temp1_long!=0 && labs(1-temp2_long/temp1_long) > (long)options.percent &&
+ labs(temp1_long-temp2_long) > (long)options.delta )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(LPIFORMAT,temp1_long,temp2_long,labs(temp1_long-temp2_long),
+ labs(1-temp2_long/temp1_long));
+ }
+ nfound++;
+ }
+ }
+ else if (temp1_long != temp2_long)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(LIFORMAT,temp1_long,temp2_long,labs(temp1_long-temp2_long));
+ }
+ nfound++;
+ }
+
+ _buf1+=sizeof(long);
+ _buf2+=sizeof(long);
+ }/* i */
+
+ } /*H5T_NATIVE_LONG*/
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_ULONG
+ *-------------------------------------------------------------------------
+ */
+
+ else if (H5Tequal(m_type, H5T_NATIVE_ULONG))
+ {
+ unsigned long temp1_ulong;
+ unsigned long temp2_ulong;
+ assert(type_size==sizeof(unsigned long));
+ for ( i = 0; i < tot_cnt; i++)
+ {
+ memcpy(&temp1_ulong, _buf1, sizeof(unsigned long));
+ memcpy(&temp2_ulong, _buf2, sizeof(unsigned long));
+ /* -d and !-p */
+ if (options.d && !options.p)
+ {
+ if (labs((long)(temp1_ulong-temp2_ulong)) > (long)options.delta)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(ULIFORMAT,temp1_ulong,temp2_ulong,labs((long)(temp1_ulong-temp2_ulong)));
+ }
+ nfound++;
+ }
+ }
+ /* !-d and -p */
+ else if (!options.d && options.p)
+ {
+ if ( temp1_ulong!=0 && labs((long)(1-temp2_ulong/temp1_ulong)) > (long)options.percent )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(ULPIFORMAT,temp1_ulong,temp2_ulong,labs((long)(temp1_ulong-temp2_ulong)),
+ labs((long)(1-temp2_ulong/temp1_ulong)));
+ }
+ nfound++;
+ }
+ }
+ /* -d and -p */
+ else if ( options.d && options.p)
+ {
+ if ( temp1_ulong!=0 && labs((long)(1-temp2_ulong/temp1_ulong)) > (long)options.percent &&
+ labs((long)(temp1_ulong-temp2_ulong)) > (long)options.delta )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(ULPIFORMAT,temp1_ulong,temp2_ulong,labs((long)(temp1_ulong-temp2_ulong)),
+ labs((long)(1-temp2_ulong/temp1_ulong)));
+ }
+ nfound++;
+ }
+ }
+ else if (temp1_ulong != temp2_ulong)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(ULIFORMAT,temp1_ulong,temp2_ulong,labs((long)(temp1_ulong-temp2_ulong)));
+ }
+ nfound++;
+ }
+
+ _buf1+=sizeof(unsigned long);
+ _buf2+=sizeof(unsigned long);
+ }/* i */
+
+ } /*H5T_NATIVE_ULONG*/
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_LLONG
+ *-------------------------------------------------------------------------
+ */
+
+ else if (H5Tequal(m_type, H5T_NATIVE_LLONG))
+ {
+ long_long temp1_llong;
+ long_long temp2_llong;
+ assert(type_size==sizeof(long_long));
+ for ( i = 0; i < tot_cnt; i++)
+ {
+ memcpy(&temp1_llong, _buf1, sizeof(long_long));
+ memcpy(&temp2_llong, _buf2, sizeof(long_long));
+ /* -d and !-p */
+ if (options.d && !options.p)
+ {
+ if (labs((long)(temp1_llong-temp2_llong)) > (long)options.delta)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(fmt_llong,temp1_llong,temp2_llong,(long_long)labs((long)(temp1_llong-temp2_llong)));
+ }
+ nfound++;
+ }
+ }
+ /* !-d and -p */
+ else if (!options.d && options.p)
+ {
+ if ( temp1_llong!=0 && labs((long)(1-temp2_llong/temp1_llong)) > (long)options.percent )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(fmt_llongp,temp1_llong,temp2_llong,(long_long)labs((long)(temp1_llong-temp2_llong)),
+ (long_long)labs((long)(1-temp2_llong/temp1_llong)));
+ }
+ nfound++;
+ }
+ }
+ /* -d and -p */
+ else if ( options.d && options.p)
+ {
+ if ( temp1_llong!=0 && labs((long)(1-temp2_llong/temp1_llong)) > (long)options.percent &&
+ labs((long)(temp1_llong-temp2_llong)) > (long)options.delta )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(fmt_llongp,temp1_llong,temp2_llong,(long_long)labs((long)(temp1_llong-temp2_llong)),
+ (long_long)labs((long)(1-temp2_llong/temp1_llong)));
+ }
+ nfound++;
+ }
+ }
+ else if (temp1_llong != temp2_llong)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(fmt_llong,temp1_llong,temp2_llong,(long_long)labs((long)(temp1_llong-temp2_llong)));
+ }
+ nfound++;
+ }
+
+ _buf1+=sizeof(long_long);
+ _buf2+=sizeof(long_long);
+ }/* i */
+
+ } /*H5T_NATIVE_LLONG*/
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_ULLONG
+ *-------------------------------------------------------------------------
+ */
+
+ else if (H5Tequal(m_type, H5T_NATIVE_ULLONG))
+ {
+ unsigned long_long temp1_ullong;
+ unsigned long_long temp2_ullong;
+ assert(type_size==sizeof(unsigned long_long));
+ for ( i = 0; i < tot_cnt; i++)
+ {
+ memcpy(&temp1_ullong, _buf1, sizeof(unsigned long_long));
+ memcpy(&temp2_ullong, _buf2, sizeof(unsigned long_long));
+ /* -d and !-p */
+ if (options.d && !options.p)
+ {
+ if (labs((long)(temp1_ullong-temp2_ullong)) > (long)options.delta)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(fmt_ullong,temp1_ullong,temp2_ullong,
+ (unsigned long_long)labs((long)(temp1_ullong-temp2_ullong)));
+ }
+ nfound++;
+ }
+ }
+ /* !-d and -p */
+ else if (!options.d && options.p)
+ {
+ if ( temp1_ullong!=0 && labs((long)(1-temp2_ullong/temp1_ullong)) > (long)options.percent )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(fmt_ullongp,temp1_ullong,temp2_ullong,
+ (unsigned long_long)labs((long)(temp1_ullong-temp2_ullong)),
+ (unsigned long_long)labs((long)(1-temp2_ullong/temp1_ullong)));
+ }
+ nfound++;
+ }
+ }
+ /* -d and -p */
+ else if ( options.d && options.p)
+ {
+ if ( temp1_ullong!=0 && labs((long)(1-temp2_ullong/temp1_ullong)) > (long)options.percent &&
+ labs((long)(temp1_ullong-temp2_ullong)) > (long)options.delta )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(fmt_ullongp,temp1_ullong,temp2_ullong,
+ (unsigned long_long)labs((long)(temp1_ullong-temp2_ullong)),
+ (unsigned long_long)labs((long)(1-temp2_ullong/temp1_ullong)));
+ }
+ nfound++;
+ }
+ }
+ else if (temp1_ullong != temp2_ullong)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(fmt_ullong,temp1_ullong,temp2_ullong,
+ (unsigned long_long)labs((long)(temp1_ullong-temp2_ullong)));
+ }
+ nfound++;
+ }
+
+ _buf1+=sizeof(unsigned long_long);
+ _buf2+=sizeof(unsigned long_long);
+ }/* i */
+
+ } /*H5T_NATIVE_ULLONG*/
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_FLOAT
+ *-------------------------------------------------------------------------
+ */
+
+ else if (H5Tequal(m_type, H5T_NATIVE_FLOAT))
+ {
+ float temp1_float;
+ float temp2_float;
+ assert(type_size==sizeof(float));
+ for ( i = 0; i < tot_cnt; i++)
+ {
+ memcpy(&temp1_float, _buf1, sizeof(float));
+ memcpy(&temp2_float, _buf2, sizeof(float));
+ /* -d and !-p */
+ if (options.d && !options.p)
+ {
+ if (fabs(temp1_float-temp2_float) > options.delta)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(FFORMAT,temp1_float,temp2_float,fabs(temp1_float-temp2_float));
+ }
+ nfound++;
+ }
+ }
+ /* !-d and -p */
+ else if (!options.d && options.p)
+ {
+ if ( temp1_float!=0 && fabs(1-temp2_float/temp1_float) > options.percent )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(FPFORMAT,temp1_float,temp2_float,fabs(temp1_float-temp2_float),
+ fabs(1-temp2_float/temp1_float));
+ }
+ nfound++;
+ }
+ }
+ /* -d and -p */
+ else if ( options.d && options.p)
+ {
+ if ( temp1_float!=0 && fabs(1-temp2_float/temp1_float) > options.percent &&
+ fabs(temp1_float-temp2_float) > options.delta )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(FPFORMAT,temp1_float,temp2_float,fabs(temp1_float-temp2_float),
+ fabs(1-temp2_float/temp1_float));
+ }
+ nfound++;
+ }
+ }
+ else if (temp1_float != temp2_float)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(FFORMAT,temp1_float,temp2_float,fabs(temp1_float-temp2_float));
+ }
+ nfound++;
+ }
+
+ _buf1+=sizeof(float);
+ _buf2+=sizeof(float);
+ }/* i */
+
+ } /*H5T_NATIVE_FLOAT*/
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_DOUBLE
+ *-------------------------------------------------------------------------
+ */
+
+ else if (H5Tequal(m_type, H5T_NATIVE_DOUBLE))
+ {
+ double temp1_double;
+ double temp2_double;
+ assert(type_size==sizeof(double));
+ for ( i = 0; i < tot_cnt; i++)
+ {
+ memcpy(&temp1_double, _buf1, sizeof(double));
+ memcpy(&temp2_double, _buf2, sizeof(double));
+ /* -d and !-p */
+ if (options.d && !options.p)
+ {
+ if (fabs(temp1_double-temp2_double) > options.delta)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(FFORMAT,temp1_double,temp2_double,fabs(temp1_double-temp2_double));
+ }
+ nfound++;
+ }
+ }
+ /* !-d and -p */
+ else if (!options.d && options.p)
+ {
+ if ( temp1_double!=0 && fabs(1-temp2_double/temp1_double) > options.percent )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(FPFORMAT,temp1_double,temp2_double,fabs(temp1_double-temp2_double),
+ fabs(1-temp2_double/temp1_double));
+ }
+ nfound++;
+ }
+ }
+ /* -d and -p */
+ else if ( options.d && options.p)
+ {
+ if ( temp1_double!=0 && fabs(1-temp2_double/temp1_double) > options.percent &&
+ fabs(temp1_double-temp2_double) > options.delta )
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,1,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(FPFORMAT,temp1_double,temp2_double,fabs(temp1_double-temp2_double),
+ fabs(1-temp2_double/temp1_double));
+ }
+ nfound++;
+ }
+ }
+ else if (temp1_double != temp2_double)
+ {
+ if (options.n && nfound>=options.count)
+ return nfound;
+ if ( options.r==0 )
+ {
+ print_pos(&ph,0,i,acc,pos,rank,obj1,obj2);
+ printf(SPACES);
+ printf(FFORMAT,temp1_double,temp2_double,fabs(temp1_double-temp2_double));
+ }
+ nfound++;
+ }
+
+ _buf1+=sizeof(double);
+ _buf2+=sizeof(double);
+ }/* i */
+
+ } /*H5T_NATIVE_DOUBLE*/
+
+/*-------------------------------------------------------------------------
+ * no more
+ *-------------------------------------------------------------------------
+ */
+ else
+ {
+ assert(0);
+ }
+
+ return nfound;
+}
+
+