You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by se...@apache.org on 2007/06/29 05:10:26 UTC
svn commit: r551779 -
/incubator/stdcxx/trunk/tests/localization/22.locale.num.put.cpp
Author: sebor
Date: Thu Jun 28 20:10:25 2007
New Revision: 551779
URL: http://svn.apache.org/viewvc?view=rev&rev=551779
Log:
2007-06-28 Martin Sebor <se...@roguewave.com>
* 22.locale.num.put.cpp (inf_nan_test): New function template
to exercise the formatting of infinities and, when enabled,
(quiet) NaNs, including STDCXX-461.
Modified:
incubator/stdcxx/trunk/tests/localization/22.locale.num.put.cpp
Modified: incubator/stdcxx/trunk/tests/localization/22.locale.num.put.cpp
URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/tests/localization/22.locale.num.put.cpp?view=diff&rev=551779&r1=551778&r2=551779
==============================================================================
--- incubator/stdcxx/trunk/tests/localization/22.locale.num.put.cpp (original)
+++ incubator/stdcxx/trunk/tests/localization/22.locale.num.put.cpp Thu Jun 28 20:10:25 2007
@@ -1428,6 +1428,286 @@
#endif // _RWSTD_NO_LONG_LONG
}
+/**************************************************************************/
+
+// use a volatile variable to fool optimizers into not issuing
+// warnings about division by zero
+volatile double zero;
+
+
+template <class charT, class floatT>
+void inf_nan_test (charT, floatT, const char *cname, const char *tname)
+{
+ rw_info (0, 0, 0, "std::num_put<%s>::put (..., %s) formatting "
+ "infinities", cname, tname);
+
+ // compute infinity
+ const floatT inf = 1 / zero;
+
+ //////////////////////////////////////////////////////////////////
+ // exercise the formatting of positive and negative infinities
+
+ // +-- value to format
+ // | +-- fmtflags
+ // | | +-- precision
+ // | | | +-- field width
+ // | | | | +-- fill character
+ // | | | | | +-- grouping
+ // | | | | | | +-- expected output
+ // | | | | | | |
+ // V V V V V V V
+ TEST (T, inf, 0, 0, 0, ' ', "", "inf");
+ TEST (T, inf, showpos, 0, 0, ' ', "", "+inf");
+ TEST (T, inf, uppercase, 0, 0, ' ', "", "INF");
+ TEST (T, inf, showpos | uppercase, 0, 0, ' ', "", "+INF");
+
+ TEST (T, -inf, 0, 0, 0, ' ', "", "-inf");
+ TEST (T, -inf, showpos, 0, 0, ' ', "", "-inf");
+ TEST (T, -inf, uppercase, 0, 0, ' ', "", "-INF");
+ TEST (T, -inf, showpos | uppercase, 0, 0, ' ', "", "-INF");
+
+ TEST (T, inf, 0, 1, 0, ' ', "", "inf");
+ TEST (T, inf, showpos, 1, 0, ' ', "", "+inf");
+ TEST (T, inf, uppercase, 1, 0, ' ', "", "INF");
+ TEST (T, inf, showpos | uppercase, 1, 0, ' ', "", "+INF");
+
+ TEST (T, -inf, 0, 1, 0, ' ', "", "-inf");
+ TEST (T, -inf, showpos, 1, 0, ' ', "", "-inf");
+ TEST (T, -inf, uppercase, 1, 0, ' ', "", "-INF");
+ TEST (T, -inf, showpos | uppercase, 1, 0, ' ', "", "-INF");
+
+ TEST (T, inf, 0, 3, 0, ' ', "", "inf");
+ TEST (T, inf, showpos, 3, 0, ' ', "", "+inf");
+ TEST (T, inf, uppercase, 3, 0, ' ', "", "INF");
+ TEST (T, inf, showpos | uppercase, 3, 0, ' ', "", "+INF");
+
+ TEST (T, -inf, 0, 3, 0, ' ', "", "-inf");
+ TEST (T, -inf, showpos, 3, 0, ' ', "", "-inf");
+ TEST (T, -inf, uppercase, 3, 0, ' ', "", "-INF");
+ TEST (T, -inf, showpos | uppercase, 3, 0, ' ', "", "-INF");
+
+ TEST (T, inf, 0, 4, 0, ' ', "", "inf");
+ TEST (T, inf, showpos, 4, 0, ' ', "", "+inf");
+ TEST (T, inf, uppercase, 4, 0, ' ', "", "INF");
+ TEST (T, inf, showpos | uppercase, 4, 0, ' ', "", "+INF");
+
+ TEST (T, -inf, 0, 4, 0, ' ', "", "-inf");
+ TEST (T, -inf, showpos, 4, 0, ' ', "", "-inf");
+ TEST (T, -inf, uppercase, 4, 0, ' ', "", "-INF");
+ TEST (T, -inf, showpos | uppercase, 4, 0, ' ', "", "-INF");
+
+ TEST (T, inf, 0, 9, 0, ' ', "", "inf");
+ TEST (T, inf, showpos, 9, 0, ' ', "", "+inf");
+ TEST (T, inf, uppercase, 9, 0, ' ', "", "INF");
+ TEST (T, inf, showpos | uppercase, 9, 0, ' ', "", "+INF");
+
+ TEST (T, -inf, 0, 9, 0, ' ', "", "-inf");
+ TEST (T, -inf, showpos, 9, 0, ' ', "", "-inf");
+ TEST (T, -inf, uppercase, 9, 0, ' ', "", "-INF");
+ TEST (T, -inf, showpos | uppercase, 9, 0, ' ', "", "-INF");
+
+ TEST (T, inf, 0, 0, 1, ' ', "", "inf");
+ TEST (T, inf, showpos, 0, 1, ' ', "", "+inf");
+ TEST (T, inf, uppercase, 0, 1, ' ', "", "INF");
+ TEST (T, inf, showpos | uppercase, 0, 1, ' ', "", "+INF");
+
+ TEST (T, -inf, 0, 0, 1, ' ', "", "-inf");
+ TEST (T, -inf, showpos, 0, 1, ' ', "", "-inf");
+ TEST (T, -inf, uppercase, 0, 1, ' ', "", "-INF");
+ TEST (T, -inf, showpos | uppercase, 0, 1, ' ', "", "-INF");
+
+ TEST (T, inf, 0, 0, 3, ' ', "", "inf");
+ TEST (T, inf, showpos, 0, 3, ' ', "", "+inf");
+ TEST (T, inf, uppercase, 0, 3, ' ', "", "INF");
+ TEST (T, inf, showpos | uppercase, 0, 3, ' ', "", "+INF");
+
+ TEST (T, -inf, 0, 0, 3, ' ', "", "-inf");
+ TEST (T, -inf, showpos, 0, 3, ' ', "", "-inf");
+ TEST (T, -inf, uppercase, 0, 3, ' ', "", "-INF");
+ TEST (T, -inf, showpos | uppercase, 0, 3, ' ', "", "-INF");
+
+ TEST (T, inf, 0, 0, 4, ' ', "", " inf");
+ TEST (T, inf, showpos, 0, 4, ' ', "", "+inf");
+ TEST (T, inf, uppercase, 0, 4, ' ', "", " INF");
+ TEST (T, inf, showpos | uppercase, 0, 4, ' ', "", "+INF");
+
+ TEST (T, -inf, 0, 0, 4, ' ', "", "-inf");
+ TEST (T, -inf, showpos, 0, 4, ' ', "", "-inf");
+ TEST (T, -inf, uppercase, 0, 4, ' ', "", "-INF");
+ TEST (T, -inf, showpos | uppercase, 0, 4, ' ', "", "-INF");
+
+ TEST (T, inf, 0, 0, 8, ' ', "", " inf");
+ TEST (T, inf, showpos, 0, 8, ' ', "", " +inf");
+ TEST (T, inf, uppercase, 0, 8, ' ', "", " INF");
+ TEST (T, inf, showpos | uppercase, 0, 8, ' ', "", " +INF");
+
+ TEST (T, -inf, 0, 0, 8, ' ', "", " -inf");
+ TEST (T, -inf, showpos, 0, 8, ' ', "", " -inf");
+ TEST (T, -inf, uppercase, 0, 8, ' ', "", " -INF");
+ TEST (T, -inf, showpos | uppercase, 0, 8, ' ', "", " -INF");
+
+ TEST (T, inf, left, 0, 9, ' ', "", "inf ");
+ TEST (T, inf, left | showpos, 0, 9, ' ', "", "+inf ");
+ TEST (T, inf, left | uppercase, 0, 9, ' ', "", "INF ");
+ TEST (T, inf, left | showpos | uppercase, 0, 9, ' ', "", "+INF ");
+
+ TEST (T, -inf, left, 0, 9, ' ', "", "-inf ");
+ TEST (T, -inf, left | showpos, 0, 9, ' ', "", "-inf ");
+ TEST (T, -inf, left | uppercase, 0, 9, ' ', "", "-INF ");
+ TEST (T, -inf, left | showpos | uppercase, 0, 9, ' ', "", "-INF ");
+
+ TEST (T, inf, right, 0, 9, ' ', "", " inf");
+ TEST (T, inf, right | showpos, 0, 9, ' ', "", " +inf");
+ TEST (T, inf, right | uppercase, 0, 9, ' ', "", " INF");
+ TEST (T, inf, right | showpos | uppercase, 0, 9, ' ', "", " +INF");
+
+ TEST (T, -inf, right, 0, 9, ' ', "", " -inf");
+ TEST (T, -inf, right | showpos, 0, 9, ' ', "", " -inf");
+ TEST (T, -inf, right | uppercase, 0, 9, ' ', "", " -INF");
+ TEST (T, -inf, right | showpos | uppercase, 0, 9, ' ', "", " -INF");
+
+ //////////////////////////////////////////////////////////////////
+ // exercise the formatting of positive and negative (quiet) NaNs
+
+ rw_info (0, 0, 0, "std::num_put<%s>::put (..., %s) formatting "
+ "NaN's", cname, tname);
+
+ // compute a quiet NaN
+#if 0
+
+ // temporarily disabled (NAN format is platform specific
+ // and subject to bugs -- see for example STDCXX-460)
+
+ const floatT nan = 0 / zero;
+
+ TEST (T, nan, 0, 0, 0, ' ', "", "nan");
+ TEST (T, nan, showpos, 0, 0, ' ', "", "+nan");
+ TEST (T, nan, uppercase, 0, 0, ' ', "", "NAN");
+ TEST (T, nan, showpos | uppercase, 0, 0, ' ', "", "+NAN");
+
+ TEST (T, -nan, 0, 0, 0, ' ', "", "-nan");
+ TEST (T, -nan, showpos, 0, 0, ' ', "", "-nan");
+ TEST (T, -nan, uppercase, 0, 0, ' ', "", "-NAN");
+ TEST (T, -nan, showpos | uppercase, 0, 0, ' ', "", "-NAN");
+
+ TEST (T, nan, 0, 1, 0, ' ', "", "nan");
+ TEST (T, nan, showpos, 1, 0, ' ', "", "+nan");
+ TEST (T, nan, uppercase, 1, 0, ' ', "", "NAN");
+ TEST (T, nan, showpos | uppercase, 1, 0, ' ', "", "+NAN");
+
+ TEST (T, -nan, 0, 1, 0, ' ', "", "-nan");
+ TEST (T, -nan, showpos, 1, 0, ' ', "", "-nan");
+ TEST (T, -nan, uppercase, 1, 0, ' ', "", "-NAN");
+ TEST (T, -nan, showpos | uppercase, 1, 0, ' ', "", "-NAN");
+
+ TEST (T, nan, 0, 3, 0, ' ', "", "nan");
+ TEST (T, nan, showpos, 3, 0, ' ', "", "+nan");
+ TEST (T, nan, uppercase, 3, 0, ' ', "", "NAN");
+ TEST (T, nan, showpos | uppercase, 3, 0, ' ', "", "+NAN");
+
+ TEST (T, -nan, 0, 3, 0, ' ', "", "-nan");
+ TEST (T, -nan, showpos, 3, 0, ' ', "", "-nan");
+ TEST (T, -nan, uppercase, 3, 0, ' ', "", "-NAN");
+ TEST (T, -nan, showpos | uppercase, 3, 0, ' ', "", "-NAN");
+
+ TEST (T, nan, 0, 4, 0, ' ', "", "nan");
+ TEST (T, nan, showpos, 4, 0, ' ', "", "+nan");
+ TEST (T, nan, uppercase, 4, 0, ' ', "", "NAN");
+ TEST (T, nan, showpos | uppercase, 4, 0, ' ', "", "+NAN");
+
+ TEST (T, -nan, 0, 4, 0, ' ', "", "-nan");
+ TEST (T, -nan, showpos, 4, 0, ' ', "", "-nan");
+ TEST (T, -nan, uppercase, 4, 0, ' ', "", "-NAN");
+ TEST (T, -nan, showpos | uppercase, 4, 0, ' ', "", "-NAN");
+
+ TEST (T, nan, 0, 9, 0, ' ', "", "nan");
+ TEST (T, nan, showpos, 9, 0, ' ', "", "+nan");
+ TEST (T, nan, uppercase, 9, 0, ' ', "", "NAN");
+ TEST (T, nan, showpos | uppercase, 9, 0, ' ', "", "+NAN");
+
+ TEST (T, -nan, 0, 9, 0, ' ', "", "-nan");
+ TEST (T, -nan, showpos, 9, 0, ' ', "", "-nan");
+ TEST (T, -nan, uppercase, 9, 0, ' ', "", "-NAN");
+ TEST (T, -nan, showpos | uppercase, 9, 0, ' ', "", "-NAN");
+
+ TEST (T, nan, 0, 0, 1, ' ', "", "nan");
+ TEST (T, nan, showpos, 0, 1, ' ', "", "+nan");
+ TEST (T, nan, uppercase, 0, 1, ' ', "", "NAN");
+ TEST (T, nan, showpos | uppercase, 0, 1, ' ', "", "+NAN");
+
+ TEST (T, -nan, 0, 0, 1, ' ', "", "-nan");
+ TEST (T, -nan, showpos, 0, 1, ' ', "", "-nan");
+ TEST (T, -nan, uppercase, 0, 1, ' ', "", "-NAN");
+ TEST (T, -nan, showpos | uppercase, 0, 1, ' ', "", "-NAN");
+
+ TEST (T, nan, 0, 0, 3, ' ', "", "nan");
+ TEST (T, nan, showpos, 0, 3, ' ', "", "+nan");
+ TEST (T, nan, uppercase, 0, 3, ' ', "", "NAN");
+ TEST (T, nan, showpos | uppercase, 0, 3, ' ', "", "+NAN");
+
+ TEST (T, -nan, 0, 0, 3, ' ', "", "-nan");
+ TEST (T, -nan, showpos, 0, 3, ' ', "", "-nan");
+ TEST (T, -nan, uppercase, 0, 3, ' ', "", "-NAN");
+ TEST (T, -nan, showpos | uppercase, 0, 3, ' ', "", "-NAN");
+
+ TEST (T, nan, 0, 0, 4, ' ', "", " nan");
+ TEST (T, nan, showpos, 0, 4, ' ', "", "+nan");
+ TEST (T, nan, uppercase, 0, 4, ' ', "", " NAN");
+ TEST (T, nan, showpos | uppercase, 0, 4, ' ', "", "+NAN");
+
+ TEST (T, -nan, 0, 0, 4, ' ', "", "-nan");
+ TEST (T, -nan, showpos, 0, 4, ' ', "", "-nan");
+ TEST (T, -nan, uppercase, 0, 4, ' ', "", "-NAN");
+ TEST (T, -nan, showpos | uppercase, 0, 4, ' ', "", "-NAN");
+
+ TEST (T, nan, 0, 0, 5, ' ', "", " nan");
+ TEST (T, nan, showpos, 0, 5, ' ', "", " +nan");
+ TEST (T, nan, uppercase, 0, 5, ' ', "", " NAN");
+ TEST (T, nan, showpos | uppercase, 0, 5, ' ', "", " +NAN");
+
+ TEST (T, -nan, 0, 0, 5, ' ', "", " -nan");
+ TEST (T, -nan, showpos, 0, 5, ' ', "", " -nan");
+ TEST (T, -nan, uppercase, 0, 5, ' ', "", " -NAN");
+ TEST (T, -nan, showpos | uppercase, 0, 5, ' ', "", " -NAN");
+
+ TEST (T, nan, 0, 0, 8, ' ', "", " nan");
+ TEST (T, nan, showpos, 0, 8, ' ', "", " +nan");
+ TEST (T, nan, uppercase, 0, 8, ' ', "", " NAN");
+ TEST (T, nan, showpos | uppercase, 0, 8, ' ', "", " +NAN");
+
+ TEST (T, -nan, 0, 0, 8, ' ', "", " -nan");
+ TEST (T, -nan, showpos, 0, 8, ' ', "", " -nan");
+ TEST (T, -nan, uppercase, 0, 8, ' ', "", " -NAN");
+ TEST (T, -nan, showpos | uppercase, 0, 8, ' ', "", " -NAN");
+
+ TEST (T, nan, left, 0, 9, ' ', "", "nan ");
+ TEST (T, nan, left | showpos, 0, 9, ' ', "", "+nan ");
+ TEST (T, nan, left | uppercase, 0, 9, ' ', "", "NAN ");
+ TEST (T, nan, left | showpos | uppercase, 0, 9, ' ', "", "+NAN ");
+
+ TEST (T, -nan, left, 0, 9, ' ', "", "-nan ");
+ TEST (T, -nan, left | showpos, 0, 9, ' ', "", "-nan ");
+ TEST (T, -nan, left | uppercase, 0, 9, ' ', "", "-NAN ");
+ TEST (T, -nan, left | showpos | uppercase, 0, 9, ' ', "", "-NAN ");
+
+ TEST (T, nan, right, 0, 9, ' ', "", " nan");
+ TEST (T, nan, right | showpos, 0, 9, ' ', "", " +nan");
+ TEST (T, nan, right | uppercase, 0, 9, ' ', "", " NAN");
+ TEST (T, nan, right | showpos | uppercase, 0, 9, ' ', "", " +NAN");
+
+ TEST (T, -nan, right, 0, 9, ' ', "", " -nan");
+ TEST (T, -nan, right | showpos, 0, 9, ' ', "", " -nan");
+ TEST (T, -nan, right | uppercase, 0, 9, ' ', "", " -NAN");
+ TEST (T, -nan, right | showpos | uppercase, 0, 9, ' ', "", " -NAN");
+
+#else
+
+ rw_info (0, 0, 0, "std::num_put<%s>::put (..., %s) formatting "
+ "NaN's disabled due to platform bugs", cname, tname);
+
+#endif // 0/1
+
+}
/**************************************************************************/
@@ -1511,8 +1791,9 @@
// reset the global locale
std::setlocale (LC_NUMERIC, "C");
}
-}
+ inf_nan_test (charT (), double (), cname, tname);
+}
/**************************************************************************/
@@ -1680,6 +1961,8 @@
TEST (T, Pi, scientific, 12, 0, ' ', "", "%.12Le", Eof, 3.14159265359L);
TEST (T, Pi, scientific, -3, 0, ' ', "", "%Le");
TEST (T, Pi, scientific, -7, 0, ' ', "", "%Le");
+
+ inf_nan_test (charT (), (long double)0, cname, tname);
#endif // _RWSTD_NO_LONG_DOUBLE
}