summaryrefslogtreecommitdiffstats
path: root/test/dt_arith.c
diff options
context:
space:
mode:
authorRaymond Lu <songyulu@hdfgroup.org>2010-10-28 19:08:31 (GMT)
committerRaymond Lu <songyulu@hdfgroup.org>2010-10-28 19:08:31 (GMT)
commit1e55692d9a41b05f8a8c14c4745cef71c9b4851e (patch)
treeb9acde7122343e37cce7009fb8946e5ebb04d91c /test/dt_arith.c
parent751b307df9208102042e205c360ef184c76f10fc (diff)
downloadhdf5-1e55692d9a41b05f8a8c14c4745cef71c9b4851e.zip
hdf5-1e55692d9a41b05f8a8c14c4745cef71c9b4851e.tar.gz
hdf5-1e55692d9a41b05f8a8c14c4745cef71c9b4851e.tar.bz2
[svn-r19696] Bug 2008 - IBM Power6 Linux uses special conversion algorithms to convert some values from long
double to (unsigned) long and from (unsigned) long to long double. I added tests in configure.in to detect these algorithms. Before I can figure out them, I disable the tests in dt_arith.c. There are property changes to tools/misc, config, and Makefile.am when I brought the fix from 1.8. Tested on jam, heiwa, amani, IBM Power6 Linux machine in Holland (huygens.sara.nl).
Diffstat (limited to 'test/dt_arith.c')
-rw-r--r--test/dt_arith.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/test/dt_arith.c b/test/dt_arith.c
index 413f326..078242d 100644
--- a/test/dt_arith.c
+++ b/test/dt_arith.c
@@ -5107,9 +5107,25 @@ run_int_fp_conv(const char *name)
nerrors += test_conv_int_fp(name, TEST_NORMAL, H5T_NATIVE_INT, H5T_NATIVE_LDOUBLE);
nerrors += test_conv_int_fp(name, TEST_NORMAL, H5T_NATIVE_UINT, H5T_NATIVE_LDOUBLE);
#if H5_SIZEOF_LONG!=H5_SIZEOF_INT
+#ifndef H5_LONG_TO_LDOUBLE_SPECIAL
nerrors += test_conv_int_fp(name, TEST_NORMAL, H5T_NATIVE_LONG, H5T_NATIVE_LDOUBLE);
nerrors += test_conv_int_fp(name, TEST_NORMAL, H5T_NATIVE_ULONG, H5T_NATIVE_LDOUBLE);
+#else
+ {
+ char str[256]; /*string */
+
+ sprintf(str, "Testing %s %s -> %s conversions",
+ name, "(unsigned) long", "long double");
+ printf("%-70s", str);
+ SKIPPED();
+#if H5_SIZEOF_LONG_DOUBLE!=0
+ HDputs(" Test skipped due to the special algorithm of hardware conversion.");
+#else
+ HDputs(" Test skipped due to disabled long double.");
+#endif
+ }
#endif
+#endif /* H5_SIZEOF_LONG!=H5_SIZEOF_INT */
#if H5_SIZEOF_LONG_LONG!=H5_SIZEOF_LONG
#if H5_LLONG_TO_LDOUBLE_CORRECT
nerrors += test_conv_int_fp(name, TEST_NORMAL, H5T_NATIVE_LLONG, H5T_NATIVE_LDOUBLE);
@@ -5272,9 +5288,25 @@ run_fp_int_conv(const char *name)
}
#endif /*H5_LDOUBLE_TO_UINT_ACCURATE*/
#if H5_SIZEOF_LONG!=H5_SIZEOF_INT && H5_SIZEOF_LONG_DOUBLE!=0
+#ifndef H5_LDOUBLE_TO_LONG_SPECIAL
nerrors += test_conv_int_fp(name, test_values, H5T_NATIVE_LDOUBLE, H5T_NATIVE_LONG);
nerrors += test_conv_int_fp(name, test_values, H5T_NATIVE_LDOUBLE, H5T_NATIVE_ULONG);
+#else
+ {
+ char str[256]; /*string */
+
+ sprintf(str, "Testing %s %s -> %s conversions",
+ name, "long double", "(unsigned) long");
+ printf("%-70s", str);
+ SKIPPED();
+#if H5_SIZEOF_LONG_DOUBLE!=0
+ HDputs(" Test skipped due to the special algorithm of hardware conversion.");
+#else
+ HDputs(" Test skipped due to disabled long double.");
+#endif
+ }
#endif
+#endif /*H5_SIZEOF_LONG!=H5_SIZEOF_INT && H5_SIZEOF_LONG_DOUBLE!=0 */
#if H5_SIZEOF_LONG_LONG!=H5_SIZEOF_LONG && H5_SIZEOF_LONG_DOUBLE!=0
#ifdef H5_LDOUBLE_TO_LLONG_ACCURATE