stdcpp/tsrc/Stdcpp_test/stdcxx/tstapps/localization/src/22.locale.num.put.cpp
changeset 0 e4d67989cc36
child 22 ddc455616bd6
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 
       
     2 
       
     3 /***************************************************************************
       
     4  *
       
     5  * 22.locale.num.put.cpp - tests exercising the std::num_put facet
       
     6  *
       
     7  * $Id: 22.locale.num.put.cpp 290034 2005-09-19 00:48:21Z sebor $
       
     8  *
       
     9  ***************************************************************************
       
    10  *
       
    11  * Copyright (c) 1994-2005 Quovadx,  Inc., acting through its  Rogue Wave
       
    12  * Software division. Licensed under the Apache License, Version 2.0 (the
       
    13  * "License");  you may  not use this file except  in compliance with the
       
    14  * License.    You    may   obtain   a   copy   of    the   License    at
       
    15  * http://www.apache.org/licenses/LICENSE-2.0.    Unless   required    by
       
    16  * applicable law  or agreed to  in writing,  software  distributed under
       
    17  * the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR
       
    18  * CONDITIONS OF  ANY KIND, either  express or implied.  See  the License
       
    19  * for the specific language governing permissions  and limitations under
       
    20  * the License.
       
    21  * 
       
    22  **************************************************************************/
       
    23 
       
    24 #ifdef __GNUG__
       
    25    // prevent gcc -Wshadow warnings for convenience types
       
    26 #  define ushort __rw_ushort
       
    27 #  define uint   __rw_uint
       
    28 #  define ulong  __rw_ulong
       
    29 #  include <sys/types.h>
       
    30 #  undef ushort
       
    31 #  undef uint
       
    32 #  undef ulong
       
    33 #endif   // __GNUG__
       
    34 
       
    35 #include <ios>
       
    36 #include <locale>
       
    37 
       
    38 #include <cerrno>    // for ERANGE, errno
       
    39 #include <cfloat>    // for floating limits macros
       
    40 #include <climits>   // for integral limits macros
       
    41 #include <clocale>   // for LC_NUMERIC, setlocale()
       
    42 #include <cstdio>    // for sprintf()
       
    43 #include <cstdlib>   // for mbstowcs()
       
    44 
       
    45 #include <any.h>         // for TOSTR()
       
    46 #include <cmdopt.h>      // for rw_enabled
       
    47 #include <driver.h>      // for rw_test
       
    48 #include <localedef.h>   // for rw_locales
       
    49 #include <valcmp.h>      // for rw_equal
       
    50 #include"std_log_result.h"
       
    51 #define LOG_FILENAME_LINE __FILE__, __LINE__
       
    52 int failures=0;
       
    53 
       
    54 /**************************************************************************/
       
    55 //#if 0
       
    56 // set by the command line option handler in response to:
       
    57 static int rw_opt_enable_num_get = 0;   // --enable-num_get
       
    58 static int rw_opt_no_errno       = 0;   // --no-errno
       
    59 static int rw_opt_no_grouping    = 0;   // --no-grouping
       
    60 static int rw_opt_no_widen       = 0;   // --no-widen
       
    61 
       
    62 /**************************************************************************/
       
    63 
       
    64 // replacement ctype facet
       
    65 template <class charT>
       
    66 struct Ctype: std::ctype<charT>
       
    67 {
       
    68     typedef std::ctype<charT> Base;
       
    69 
       
    70     typedef typename Base::char_type char_type;
       
    71 
       
    72     static int n_widen_;
       
    73 
       
    74     Ctype (): Base (0, 0, 1) { }
       
    75 
       
    76     virtual char_type do_widen (char c) const {
       
    77         ++n_widen_;
       
    78 
       
    79         switch (c) {
       
    80         case '0': c = '9'; break;
       
    81         case '1': c = '8'; break;
       
    82         case '2': c = '7'; break;
       
    83         case '3': c = '6'; break;
       
    84         case '4': c = '5'; break;
       
    85         case '5': c = '4'; break;
       
    86         case '6': c = '3'; break;
       
    87         case '7': c = '2'; break;
       
    88         case '8': c = '1'; break;
       
    89         case '9': c = '0'; break;
       
    90         default: break;
       
    91         }
       
    92 
       
    93         return char_type (c);
       
    94     }
       
    95 
       
    96     virtual const char_type*
       
    97     do_widen (const char *lo, const char *hi, char_type *dst) const {
       
    98         return Base::do_widen (lo, hi, dst);
       
    99     }
       
   100 };
       
   101 
       
   102 template <class charT>
       
   103 int Ctype<charT>::n_widen_;
       
   104 
       
   105 
       
   106 /**************************************************************************/
       
   107 
       
   108 // replacement numpunct facet
       
   109 
       
   110 template <class charT>
       
   111 struct Punct: std::numpunct<charT>
       
   112 {
       
   113     typedef typename std::numpunct<charT>::char_type   char_type;
       
   114     typedef typename std::numpunct<charT>::string_type string_type;
       
   115 
       
   116     static char_type        decimal_point_;
       
   117     static char_type        thousands_sep_;
       
   118     static const char      *grouping_;
       
   119     static const char_type *truename_;
       
   120     static const char_type *falsename_;
       
   121 
       
   122     static int n_objs_;            // number of facet objects in existence
       
   123     static int n_thousands_sep_;   // number of calls to do_thousands_sep()
       
   124 
       
   125     Punct (std::size_t ref = 0)
       
   126         : std::numpunct<charT>(ref) {
       
   127         ++n_objs_;
       
   128     }
       
   129 
       
   130     ~Punct () {
       
   131         --n_objs_;
       
   132     }
       
   133 
       
   134     virtual char_type do_decimal_point () const {
       
   135         return decimal_point_;
       
   136     }
       
   137 
       
   138     virtual std::string do_grouping () const {
       
   139         return grouping_;
       
   140     }
       
   141 
       
   142     virtual char_type do_thousands_sep () const {
       
   143         ++n_thousands_sep_;
       
   144         return thousands_sep_;
       
   145     }
       
   146 
       
   147     virtual string_type do_truename () const {
       
   148         return truename_ ? string_type (truename_) : string_type ();
       
   149     }
       
   150 
       
   151     virtual string_type do_falsename () const {
       
   152         return falsename_ ? string_type (falsename_) : string_type ();
       
   153     }
       
   154 };
       
   155 
       
   156 template <class charT>
       
   157 const char* Punct<charT>::grouping_ = "";
       
   158 
       
   159 template <class charT>
       
   160 typename Punct<charT>::char_type Punct<charT>::decimal_point_ = '.';
       
   161 
       
   162 template <class charT>
       
   163 typename Punct<charT>::char_type Punct<charT>::thousands_sep_ = ',';
       
   164 
       
   165 template <class charT>
       
   166 const typename Punct<charT>::char_type* Punct<charT>::truename_;
       
   167 
       
   168 template <class charT>
       
   169 const typename Punct<charT>::char_type* Punct<charT>::falsename_;
       
   170 
       
   171 template <class charT>
       
   172 int Punct<charT>::n_thousands_sep_;
       
   173 
       
   174 template <class charT>
       
   175 int Punct<charT>::n_objs_;
       
   176 
       
   177 
       
   178 /**************************************************************************/
       
   179 
       
   180 template <class charT>
       
   181 struct Ios: std::basic_ios<charT>
       
   182 {
       
   183     Ios () { this->init (0); }
       
   184 };
       
   185 
       
   186 
       
   187 template <class charT>
       
   188 struct NumGet: std::num_get<charT, const charT*> { NumGet () { } };
       
   189 
       
   190 
       
   191 template <class charT>
       
   192 struct NumPut: std::num_put<charT, charT*>
       
   193 {
       
   194     typedef std::num_put<charT, charT*> Base;
       
   195     typedef typename Base::char_type    char_type;
       
   196     typedef typename Base::iter_type    iter_type;
       
   197 
       
   198     enum {
       
   199         test_bool, test_short, test_ushort, test_int, test_uint,
       
   200         test_long, test_ulong, test_llong, test_ullong,
       
   201         test_pvoid, test_float, test_double, test_ldouble
       
   202     };
       
   203         
       
   204     static int ncalls_ [13];
       
   205 
       
   206     NumPut (std::size_t ref = 0): Base (ref) { }
       
   207 
       
   208 #ifndef _RWSTD_NO_BOOL
       
   209 
       
   210     virtual iter_type
       
   211     do_put (iter_type it, std::ios_base &f, char_type fill, bool v) const {
       
   212         ++ncalls_ [test_bool];
       
   213         return Base::do_put (it, f, fill, v);
       
   214     }
       
   215 
       
   216 #endif   // _RWSTD_NO_BOOL
       
   217 
       
   218     virtual iter_type
       
   219     do_put (iter_type it, std::ios_base &f, char_type fill, long v) const {
       
   220         ++ncalls_ [test_long];
       
   221         return Base::do_put (it, f, fill, v);
       
   222     }
       
   223 
       
   224     virtual iter_type
       
   225     do_put (iter_type it, std::ios_base &f, char_type fill,
       
   226             unsigned long v) const {
       
   227         ++ncalls_ [test_ulong];
       
   228         return Base::do_put (it, f, fill, v);
       
   229     }
       
   230 
       
   231 #ifdef _RWSTD_LONG_LONG
       
   232 
       
   233     // provided as an extension unless _RWSTD_NO_LONG_LONG is #defined
       
   234     virtual iter_type
       
   235     do_put (iter_type it, std::ios_base &f, char_type fill,
       
   236             unsigned _RWSTD_LONG_LONG v) const {
       
   237         ++ncalls_ [test_ullong];
       
   238         return Base::do_put (it, f, fill, v);
       
   239     }
       
   240 
       
   241     // provided as an extension unless _RWSTD_NO_LONG_LONG is #defined
       
   242     virtual iter_type
       
   243     do_put (iter_type it, std::ios_base &f, char_type fill,
       
   244             _RWSTD_LONG_LONG v) const {
       
   245         ++ncalls_ [test_llong];
       
   246         return Base::do_put (it, f, fill, v);
       
   247     }
       
   248 
       
   249 #endif   // _RWSTD_LONG_LONG
       
   250 
       
   251     virtual iter_type
       
   252     do_put (iter_type it, std::ios_base &f, char_type fill, double v) const {
       
   253         ++ncalls_ [test_double];
       
   254         return Base::do_put (it, f, fill, v);
       
   255     }
       
   256 
       
   257 #ifndef __SYMBIAN32__
       
   258 #ifndef _RWSTD_NO_LONG_DOUBLE
       
   259 
       
   260     virtual iter_type
       
   261     do_put (iter_type it, std::ios_base &f, char_type fill,
       
   262             long double v) const {
       
   263         ++ncalls_ [test_ldouble];
       
   264         return Base::do_put (it, f, fill, v);
       
   265     }
       
   266 #endif 
       
   267 #endif   // _RWSTD_NO_LONG_DOUBLE
       
   268 
       
   269     virtual iter_type
       
   270     do_put (iter_type it, std::ios_base &f, char_type fill,
       
   271             const void *v) const {
       
   272         ++ncalls_ [test_pvoid];
       
   273         return Base::do_put (it, f, fill, v);
       
   274     }
       
   275 };
       
   276 
       
   277 
       
   278 // explicit initialization of the static array below used
       
   279 // to work around a SunPro 5.4 bug (PR #27293)
       
   280 template <class charT>
       
   281 /* static */ int NumPut<charT>::ncalls_ [13] = { 0 };
       
   282 
       
   283 /**************************************************************************/
       
   284 
       
   285 template <class charT, class T>
       
   286 void do_test (charT           /* dummy */,
       
   287               const char     *cname,    // charT name
       
   288               const char     *tname,    // T name
       
   289               int             lineno,   // line number
       
   290               T               val,      // value to format
       
   291               int             flags,    // ios flags
       
   292               std::streamsize prec,     // precision
       
   293               std::streamsize width,    // field width
       
   294               char            fill,     // fill character
       
   295               const char     *grouping, // grouping string
       
   296               const char     *str,      // expected output
       
   297               int             err_expect = -1,   // expected iostate
       
   298               T val_expect = T ()       /* expected num_get result */)
       
   299 {
       
   300     if (!rw_enabled (lineno)) {
       
   301         rw_note (0, __FILE__, __LINE__, "test on line %d disabled", lineno);
       
   302         return;
       
   303     }
       
   304     
       
   305     // create a distinct punctuation facet for each iteration to make sure
       
   306     // any data cached in between successive calls to the facet's public
       
   307     // member functions are flushed
       
   308     const Punct<charT> pun (1);
       
   309 
       
   310     Ios<charT> ios;
       
   311     NumPut<charT> np;
       
   312 
       
   313     ios.imbue (std::locale (ios.getloc (), (const std::numpunct<charT>*)&pun));
       
   314 
       
   315     ios.flags (std::ios_base::fmtflags (flags));
       
   316     ios.precision (prec);
       
   317     ios.width (width);
       
   318     pun.grouping_ = grouping;
       
   319 
       
   320 //#if defined (_RWSTD_LDBL_MAX_10_EXP)
       
   321 
       
   322 //    charT buf [_RWSTD_LDBL_MAX_10_EXP + 2] = { 0 };
       
   323 
       
   324 //#else   // if !defined (_RWSTD_LDBL_MAX_10_EXP)
       
   325 
       
   326     //charT buf [4096] = { 0 };
       
   327     charT buf [512] = { 0 };
       
   328 
       
   329 //#endif   // _RWSTD_LDBL_MAX_10_EXP
       
   330 
       
   331     const charT* const bufend = np.put (buf, ios, fill, val);
       
   332 
       
   333     // verify 22.2.2.2.2, p21
       
   334     if (ios.width ()) {
       
   335 
       
   336         static int width_fail = 0;
       
   337 
       
   338         // fail at most once for each specialization
       
   339         #ifndef __SYMBIAN32__
       
   340         rw_assert (!width_fail++, 0, lineno,
       
   341                    "%line d: num_put<%s>::put (..., %s = %s) "
       
   342                    "failed to reset width from %d; width() = %d",
       
   343                    __LINE__, cname, tname, TOSTR (val),
       
   344                    TOSTR (buf), width, ios.width ());
       
   345        #else
       
   346         {
       
   347           
       
   348            if(width_fail++)
       
   349            {
       
   350              
       
   351             failures++;
       
   352             std_log(LOG_FILENAME_LINE,"Reason:Failing") ;
       
   353              
       
   354              }
       
   355         }
       
   356                     
       
   357         #endif           
       
   358     }
       
   359 
       
   360     /******************************************************************/
       
   361 
       
   362     if (str) {
       
   363 
       
   364         char cbuf [sizeof buf / sizeof *buf] = { '\0' };
       
   365 
       
   366         if ('%' == *str) {
       
   367             std::sprintf (cbuf, str, val);
       
   368             str = cbuf;
       
   369 
       
   370 #if defined (_WIN32) || defined (_WIN64)
       
   371 
       
   372             std::size_t len = std::strlen (str);
       
   373 
       
   374             if (   ('e' == cbuf [len - 5] || 'E' == cbuf [len - 5])
       
   375                 && ('-' == cbuf [len - 4] || '+' == cbuf [len - 4])
       
   376                 && ('0' == cbuf [len - 3])) {
       
   377                 cbuf [len - 3] = cbuf [len - 2];
       
   378                 cbuf [len - 2] = cbuf [len - 1];
       
   379                 cbuf [len - 1] = cbuf [len];
       
   380             }
       
   381 
       
   382 #endif   // _WIN{32,64}
       
   383         }
       
   384 
       
   385         #ifndef __SYMBIAN32__
       
   386         // compare output produced by num_put with that produced by printf()
       
   387         rw_assert (0 == rw_strncmp (buf, str), 0, lineno,
       
   388                    "line %d: num_put<%s>::put (..., %s = %s) "
       
   389                    "wrote %{*Ac}, expected %{*Ac}, "
       
   390                    "flags = %{If}, precision = %d"
       
   391                    "%{?}, grouping = \"%#s\"%{;}",
       
   392                    __LINE__, cname, tname, TOSTR (val),
       
   393                    sizeof *buf, buf, sizeof *str, str,
       
   394                    flags, prec,
       
   395                    grouping && *grouping, grouping);
       
   396         #else
       
   397          {
       
   398          if(0 != rw_strncmp (buf, str)){
       
   399           failures++;
       
   400           std_log(LOG_FILENAME_LINE,"Reason: Failing");}
       
   401                      
       
   402          } 
       
   403          #endif  // __SYMBIAN32__    
       
   404     }
       
   405 
       
   406     /******************************************************************/
       
   407 
       
   408 #ifndef NO_NUM_GET
       
   409 
       
   410     if (!rw_opt_enable_num_get)
       
   411         return;
       
   412 
       
   413     // skip negative precision (extension requiring special treatment)
       
   414     if (prec < 0)
       
   415         return;
       
   416 
       
   417     const charT *next = buf;
       
   418 
       
   419     // skip leading fill characters (if any)
       
   420     for ( ; *next == fill; ++next);
       
   421 
       
   422     // find the first non-fill character if it exists
       
   423     const charT *last = next;
       
   424     for ( ; *last && *last != fill; ++last);
       
   425     for ( ; *last && *last == fill; ++last);
       
   426 
       
   427     // do not perform extraction if there are any fill characters
       
   428     // in the middle of output (they serve as punctuators and break
       
   429     // up the input sequence)
       
   430     if (next != last && *last)
       
   431         return;
       
   432 
       
   433     // do not perform extraction if the fill character is the minus
       
   434     // sign, the plus sign, the thousands separator, the decimal point,
       
   435     // or a digit
       
   436     if (   '-' == fill
       
   437         || '+' == fill
       
   438         || pun.thousands_sep_ == fill
       
   439         || pun.decimal_point_ == fill
       
   440         || fill >= '0' && fill <= '9')
       
   441         return;
       
   442 
       
   443     // do not perform extraction if there is no data to extract
       
   444     // (unless this is an extraction-only test)
       
   445     if (!*next && str)
       
   446         return;
       
   447 
       
   448     NumGet<charT> ng;
       
   449 
       
   450     T x = T ();
       
   451 
       
   452     std::ios_base::iostate err = std::ios_base::goodbit;
       
   453 
       
   454     if (-1 == err_expect) {
       
   455 
       
   456         // lwg issue 17: special treatment for bool:
       
   457 
       
   458         // The in iterator is always left pointing one position beyond
       
   459         // the last character successfully matched. If val is set, then
       
   460         // err is set to str.goodbit; or to str.eofbit if, when seeking
       
   461         // another character to match, it is found that (in==end). If
       
   462         // val is not set, then err is set to str.failbit; or to
       
   463         // (str.failbit|str.eofbit) if the reason for the failure was
       
   464         // that (in==end). [Example: for targets true:"a" and false:"abb",
       
   465         // the input sequence "a" yields val==true and err==str.eofbit;
       
   466         // the input sequence "abc" yields err=str.failbit, with in ending
       
   467         // at the 'c' element. For targets true:"1" and false:"0", the
       
   468         // input sequence "1" yields val==true and err=str.goodbit. For
       
   469         // empty targets (""), any input sequence yields err==str.failbit.
       
   470         // --end example]
       
   471 
       
   472         err_expect = T (1) == T (2) && flags & std::ios::boolalpha
       
   473             ? std::ios::goodbit
       
   474             : last == bufend && last [-1] != fill
       
   475             ? std::ios::eofbit : std::ios::goodbit;
       
   476 
       
   477         val_expect = val;
       
   478     }
       
   479 
       
   480     last = ng.get (next, bufend, ios, err, x);
       
   481 #ifndef __SYMBIAN32__
       
   482     // verify the state
       
   483     rw_assert (err == err_expect, 0, lineno,
       
   484                "line %d: num_get<%s>::get (%s, ..., %s&) "
       
   485                "flags = %{If}, "
       
   486                "%{?}grouping = \"%#s\", %{;}"
       
   487                "iostate = %{Is}, expected %{Is}",
       
   488                __LINE__, cname,
       
   489                TOSTR (next), tname,
       
   490                flags,
       
   491                grouping && *grouping, grouping,
       
   492                err, err_expect);
       
   493 
       
   494     // verify the parsed value
       
   495     rw_assert (rw_equal (x, val_expect), 0, lineno,
       
   496                "line %d: num_get<%s>::get (%s, ..., %s&) got %s, "
       
   497                "expected %s, flags = %{If}, "
       
   498                "%{?}grouping = \"%#s\", %{;}",
       
   499                __LINE__, cname,
       
   500                TOSTR (next), tname,
       
   501                TOSTR (x), TOSTR (val_expect),
       
   502                flags,
       
   503                grouping && *grouping, grouping);
       
   504   #else
       
   505    {
       
   506    
       
   507    if(err != err_expect)
       
   508      {
       
   509      failures++;
       
   510      std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
   511      }
       
   512    if(!rw_equal (x, val_expect))
       
   513      {
       
   514      failures++;
       
   515      std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
   516      }
       
   517    
       
   518    
       
   519    
       
   520    }             
       
   521 #endif//__SYMBIAN32__
       
   522 #else
       
   523 
       
   524     _RWSTD_UNUSED (bufend);
       
   525     _RWSTD_UNUSED (err_expect);
       
   526     _RWSTD_UNUSED (val_expect);
       
   527 
       
   528 #endif   // NO_NUM_GET
       
   529 
       
   530 }
       
   531 
       
   532 /**************************************************************************/
       
   533 
       
   534 template <class charT>
       
   535 struct Streambuf: std::basic_streambuf<charT, std::char_traits<charT> > { };
       
   536 #if 0 //FIX
       
   537 template <class charT>
       
   538 void direct_use_test (charT, const char *cname)
       
   539 {
       
   540     _RWSTD_UNUSED (cname);
       
   541 
       
   542     // verify that num_put objects can be used directly w/o first
       
   543     // having been installed in a locale object; the behavior of
       
   544     // such facets is unspecified (but not undefined)
       
   545 
       
   546     Ios<charT> ios;
       
   547 
       
   548     const std::num_put<charT> np; //can not directly instantiate num_put, it is illegal, same behaviour in linux also 
       
   549 
       
   550     Streambuf<charT> sb;
       
   551 
       
   552 #define DIRECT_USE_TEST(T) \
       
   553     np.put (std::ostreambuf_iterator<charT>(&sb), ios, charT (), (T)0)
       
   554 
       
   555 #ifndef _RWSTD_NO_BOOL
       
   556 
       
   557     DIRECT_USE_TEST (bool);
       
   558 
       
   559 #endif   // _RWSTD_NO_BOOL
       
   560 
       
   561     DIRECT_USE_TEST (unsigned long);
       
   562     DIRECT_USE_TEST (long);
       
   563     DIRECT_USE_TEST (double);
       
   564 
       
   565 #ifndef _RWSTD_NO_LONG_DOUBLE
       
   566 
       
   567     DIRECT_USE_TEST (long double);
       
   568 
       
   569 #endif
       
   570 
       
   571     DIRECT_USE_TEST (void*);
       
   572 }
       
   573 #endif 
       
   574 /**************************************************************************/
       
   575 
       
   576 
       
   577 // for convenience
       
   578 #define boolalpha   std::ios_base::boolalpha
       
   579 #define dec         std::ios_base::dec
       
   580 #define fixed       std::ios_base::fixed
       
   581 #define hex         std::ios_base::hex
       
   582 #define internal    std::ios_base::internal
       
   583 #define left        std::ios_base::left
       
   584 #define oct         std::ios_base::oct
       
   585 #define right       std::ios_base::right
       
   586 #define scientific  std::ios_base::scientific
       
   587 #define showbase    std::ios_base::showbase
       
   588 #define showpoint   std::ios_base::showpoint
       
   589 #define showpos     std::ios_base::showpos
       
   590 #define skipws      std::ios_base::skipws
       
   591 #define unitbuf     std::ios_base::unitbuf
       
   592 #define uppercase   std::ios_base::uppercase
       
   593 //#define bin         std::ios_base::bin //it is not bin its is binary
       
   594 #define bin         std::ios_base::binary
       
   595 #define adjustfield std::ios_base::adjustfield
       
   596 #define basefield   std::ios_base::basefield
       
   597 #define floatfield  std::ios_base::floatfield
       
   598 #define nolock      std::ios_base::nolock
       
   599 #define nolockbuf   std::ios_base::nolockbuf
       
   600 
       
   601 #define Bad         std::ios_base::badbit
       
   602 #define Eof         std::ios_base::eofbit
       
   603 #define Fail        std::ios_base::failbit
       
   604 #define Good        std::ios_base::goodbit
       
   605 
       
   606 
       
   607 template <class charT>
       
   608 void bool_test (charT, const char *cname)
       
   609 {
       
   610 #ifndef _RWSTD_NO_BOOL
       
   611 
       
   612     rw_info (0, 0, __LINE__, "std::num_put<%s>::put (..., bool)", cname);
       
   613 
       
   614     const char* const tname = "bool";
       
   615 
       
   616     static const charT boolnames[][4] = {
       
   617         { 'y', 'e', 's', '\0' }, { 'n', 'o', '.', '\0' },
       
   618 
       
   619         // unusual strings to try to trip up the formatting algorithm
       
   620         { '+', '1', '\0' },      { '-', '2', '\0' },
       
   621         { '-', '+', '1', '\0' }, { '+', '-', '0', '\0' },
       
   622         { '\001', '\0' },        { '\0' }
       
   623     };
       
   624 
       
   625     Punct<charT>::decimal_point_ = '*';
       
   626     Punct<charT>::truename_      = boolnames [0];
       
   627     Punct<charT>::falsename_     = boolnames [1];
       
   628 
       
   629 // set line number to __LINE__ and perform test so that
       
   630 // assertion output will point to the failed TEST line
       
   631 #define TEST  do_test
       
   632 #define T     charT (), cname, tname, __LINE__
       
   633 
       
   634     std_log(LOG_FILENAME_LINE,"Test start");
       
   635     TEST (T, false, 0, 0, 0, ' ', "", "0");
       
   636     std_log(LOG_FILENAME_LINE,"Test end");
       
   637     std_log(LOG_FILENAME_LINE,"Test start");
       
   638     
       
   639     TEST (T, true,  0, 0, 0, ' ', "", "1");
       
   640     std_log(LOG_FILENAME_LINE,"Test end");
       
   641     std_log(LOG_FILENAME_LINE,"Test start");
       
   642 
       
   643     TEST (T, false, 0, 0, 0, ' ', "", "%d");
       
   644     std_log(LOG_FILENAME_LINE,"Test end");
       
   645     std_log(LOG_FILENAME_LINE,"Test start");
       
   646     TEST (T, true,  0, 0, 0, ' ', "", "%d");
       
   647     std_log(LOG_FILENAME_LINE,"Test end");
       
   648     std_log(LOG_FILENAME_LINE,"Test start");
       
   649 
       
   650     TEST (T, false, showpos, 0, 0, ' ', "", "%+d");
       
   651     std_log(LOG_FILENAME_LINE,"Test end");
       
   652     std_log(LOG_FILENAME_LINE,"Test start");
       
   653     TEST (T, true,  showpos, 0, 0, ' ', "", "%+d");
       
   654     std_log(LOG_FILENAME_LINE,"Test end");
       
   655     std_log(LOG_FILENAME_LINE,"Test start");
       
   656 
       
   657     TEST (T, false, oct, 0, 0, ' ', "", "%o");
       
   658     std_log(LOG_FILENAME_LINE,"Test end");
       
   659     std_log(LOG_FILENAME_LINE,"Test start");
       
   660     TEST (T, true,  oct, 0, 0, ' ', "", "%o");
       
   661     std_log(LOG_FILENAME_LINE,"Test end");
       
   662     std_log(LOG_FILENAME_LINE,"Test start");
       
   663 
       
   664     TEST (T, false, dec, 0, 0, ' ', "", "%d");
       
   665     std_log(LOG_FILENAME_LINE,"Test end");
       
   666     std_log(LOG_FILENAME_LINE,"Test start");
       
   667     TEST (T, true,  dec, 0, 0, ' ', "", "%d");
       
   668     std_log(LOG_FILENAME_LINE,"Test end");
       
   669     std_log(LOG_FILENAME_LINE,"Test start");
       
   670 
       
   671     TEST (T, false, hex, 0, 0, ' ', "", "%x");
       
   672     std_log(LOG_FILENAME_LINE,"Test end");
       
   673     std_log(LOG_FILENAME_LINE,"Test start");
       
   674     TEST (T, true,  hex, 0, 0, ' ', "", "%x");
       
   675     std_log(LOG_FILENAME_LINE,"Test end");
       
   676     std_log(LOG_FILENAME_LINE,"Test start");
       
   677 
       
   678     rw_info (0, 0, __LINE__, "std::ios::boolalpha");
       
   679 
       
   680     TEST (T, false, boolalpha, 0, 0, ' ', "", "no.");
       
   681     std_log(LOG_FILENAME_LINE,"Test end");
       
   682     std_log(LOG_FILENAME_LINE,"Test start");
       
   683     TEST (T, true,  boolalpha, 0, 0, ' ', "", "yes");
       
   684     std_log(LOG_FILENAME_LINE,"Test end");
       
   685     std_log(LOG_FILENAME_LINE,"Test start");
       
   686 
       
   687     // left justified boolalpha
       
   688     TEST (T, false, boolalpha | left, 0, 6, ' ', "", "no.   ");
       
   689     std_log(LOG_FILENAME_LINE,"Test end");
       
   690     std_log(LOG_FILENAME_LINE,"Test start");
       
   691     TEST (T, true,  boolalpha | left, 0, 6, ' ', "", "yes   ");
       
   692     std_log(LOG_FILENAME_LINE,"Test end");
       
   693     std_log(LOG_FILENAME_LINE,"Test start");
       
   694 
       
   695     // right justified boolalpha
       
   696     TEST (T, false, boolalpha | right, 0, 6, ' ', "", "   no.");
       
   697     std_log(LOG_FILENAME_LINE,"Test end");
       
   698     std_log(LOG_FILENAME_LINE,"Test start");
       
   699     TEST (T, true,  boolalpha | right, 0, 6, ' ', "", "   yes");
       
   700     std_log(LOG_FILENAME_LINE,"Test end");
       
   701     std_log(LOG_FILENAME_LINE,"Test start");
       
   702 
       
   703     // implied right justified boolalpha (internal bit set)
       
   704     TEST (T, false, boolalpha | internal, 0, 4, ' ', "", " no.");
       
   705     std_log(LOG_FILENAME_LINE,"Test end");
       
   706     std_log(LOG_FILENAME_LINE,"Test start");
       
   707     TEST (T, true,  boolalpha | internal, 0, 4, ' ', "", " yes");
       
   708     std_log(LOG_FILENAME_LINE,"Test end");
       
   709 
       
   710 
       
   711 
       
   712     Punct<charT>::truename_  = boolnames [2];
       
   713     Punct<charT>::falsename_ = boolnames [3];
       
   714 
       
   715     std_log(LOG_FILENAME_LINE,"Test start");
       
   716 
       
   717     TEST (T, false, boolalpha, 0, 1, ' ', "", "-2");
       
   718     std_log(LOG_FILENAME_LINE,"Test end");
       
   719     std_log(LOG_FILENAME_LINE,"Test start");
       
   720     TEST (T, true,  boolalpha, 0, 1, ' ', "", "+1");
       
   721     std_log(LOG_FILENAME_LINE,"Test end");
       
   722     std_log(LOG_FILENAME_LINE,"Test start");
       
   723 
       
   724     TEST (T, false, boolalpha | internal, 0, 4, ' ', "", "  -2");
       
   725     std_log(LOG_FILENAME_LINE,"Test end");
       
   726     std_log(LOG_FILENAME_LINE,"Test start");
       
   727     TEST (T, true,  boolalpha | internal, 0, 4, ' ', "", "  +1");
       
   728     std_log(LOG_FILENAME_LINE,"Test end");
       
   729 
       
   730 
       
   731 
       
   732     Punct<charT>::truename_  = boolnames [4];
       
   733     Punct<charT>::falsename_ = boolnames [5];
       
   734 
       
   735     std_log(LOG_FILENAME_LINE,"Test start");
       
   736 
       
   737     TEST (T, false, boolalpha, 0, 1, ' ', "", "+-0");
       
   738     std_log(LOG_FILENAME_LINE,"Test end");
       
   739     std_log(LOG_FILENAME_LINE,"Test start");
       
   740     TEST (T, true,  boolalpha, 0, 1, ' ', "", "-+1");
       
   741     std_log(LOG_FILENAME_LINE,"Test end");
       
   742     std_log(LOG_FILENAME_LINE,"Test start");
       
   743 
       
   744     TEST (T, false, boolalpha | internal, 0, 4, ' ', "", " +-0");
       
   745     std_log(LOG_FILENAME_LINE,"Test end");
       
   746     std_log(LOG_FILENAME_LINE,"Test start");
       
   747     TEST (T, true,  boolalpha | internal, 0, 4, ' ', "", " -+1");
       
   748     std_log(LOG_FILENAME_LINE,"Test end");
       
   749 
       
   750 
       
   751 
       
   752     Punct<charT>::truename_  = boolnames [6];
       
   753     Punct<charT>::falsename_ = boolnames [7];
       
   754 
       
   755     std_log(LOG_FILENAME_LINE,"Test start");
       
   756 
       
   757     TEST (T, false, boolalpha, 0, 0, ' ', "", "");
       
   758     std_log(LOG_FILENAME_LINE,"Test end");
       
   759     std_log(LOG_FILENAME_LINE,"Test start");
       
   760     TEST (T, true,  boolalpha, 0, 0, ' ', "", "\001");
       
   761     std_log(LOG_FILENAME_LINE,"Test end");
       
   762     std_log(LOG_FILENAME_LINE,"Test start");
       
   763 
       
   764     TEST (T, false, boolalpha, 0, 1, ' ', "", " ");
       
   765     std_log(LOG_FILENAME_LINE,"Test end");
       
   766     std_log(LOG_FILENAME_LINE,"Test start");
       
   767     TEST (T, true,  boolalpha, 0, 1, ' ', "", "\001");
       
   768     std_log(LOG_FILENAME_LINE,"Test end");
       
   769     std_log(LOG_FILENAME_LINE,"Test start");
       
   770 
       
   771     TEST (T, false, boolalpha, 0, 1, ',', "", ",");
       
   772     std_log(LOG_FILENAME_LINE,"Test end");
       
   773     std_log(LOG_FILENAME_LINE,"Test start");
       
   774     TEST (T, true,  boolalpha, 0, 1, ',', "", "\001");
       
   775     std_log(LOG_FILENAME_LINE,"Test end");
       
   776     std_log(LOG_FILENAME_LINE,"Test start");
       
   777 
       
   778     TEST (T, false, boolalpha | internal, 0,4, ',', "", ",,,,");
       
   779     std_log(LOG_FILENAME_LINE,"Test end");
       
   780     std_log(LOG_FILENAME_LINE,"Test start");
       
   781     TEST (T, true,  boolalpha | internal, 0,4, ',', "", ",,,\001");
       
   782     std_log(LOG_FILENAME_LINE,"Test end");
       
   783 
       
   784 
       
   785 #endif   // _RWSTD_NO_BOOL
       
   786 
       
   787 }
       
   788 
       
   789 /**************************************************************************/
       
   790 
       
   791 template <class charT>
       
   792 void long_test (charT, const char *cname)
       
   793 {
       
   794     const char* const tname = "long";
       
   795 
       
   796     rw_info (0, 0, __LINE__, "std::num_put<%s>::put (..., %s)", cname, tname);
       
   797 
       
   798 // working around a VAC++/AIX bug where LONG_{MIN,MAX} are
       
   799 // of type int rather than long as required (see PR #28798)
       
   800 #ifndef	LONG_MIN 
       
   801 #undef LONG_MIN
       
   802 #define LONG_MIN _RWSTD_LONG_MIN
       
   803 #endif
       
   804 
       
   805 #ifndef	LONG_MAX
       
   806 #undef LONG_MAX
       
   807 #define LONG_MAX _RWSTD_LONG_MAX
       
   808 #endif
       
   809 
       
   810 #undef GET_FAIL
       
   811 #define GET_FAIL (Eof | Fail), LONG_MAX
       
   812 
       
   813     //////////////////////////////////////////////////////////////////
       
   814     // implicit decimal output
       
   815     rw_info (0, 0, __LINE__, "std::ios::fmtflags ()");
       
   816 
       
   817     std_log(LOG_FILENAME_LINE,"Test start");
       
   818 
       
   819     TEST (T,       0L,   0, 0, 0, ' ', "", "%ld");
       
   820     std_log(LOG_FILENAME_LINE,"Test end");
       
   821     std_log(LOG_FILENAME_LINE,"Test start");
       
   822     TEST (T,       1L,   0, 0, 0, ' ', "", "%ld");
       
   823     std_log(LOG_FILENAME_LINE,"Test end");
       
   824     std_log(LOG_FILENAME_LINE,"Test start");
       
   825     TEST (T,       2L,   0, 0, 0, ' ', "", "%ld");
       
   826     std_log(LOG_FILENAME_LINE,"Test end");
       
   827     std_log(LOG_FILENAME_LINE,"Test start");
       
   828     TEST (T,      -3L,   0, 0, 0, ' ', "", "%ld");
       
   829     std_log(LOG_FILENAME_LINE,"Test end");
       
   830     std_log(LOG_FILENAME_LINE,"Test start");
       
   831     TEST (T,      12L,   0, 0, 0, ' ', "", "%ld");
       
   832     std_log(LOG_FILENAME_LINE,"Test end");
       
   833     std_log(LOG_FILENAME_LINE,"Test start");
       
   834     TEST (T,     -13L,   0, 0, 0, ' ', "", "%ld");
       
   835     std_log(LOG_FILENAME_LINE,"Test end");
       
   836     std_log(LOG_FILENAME_LINE,"Test start");
       
   837     TEST (T,     345L,   0, 0, 0, ' ', "", "%ld");
       
   838     std_log(LOG_FILENAME_LINE,"Test end");
       
   839     std_log(LOG_FILENAME_LINE,"Test start");
       
   840     TEST (T,    -456L,   0, 0, 0, ' ', "", "%ld");
       
   841     std_log(LOG_FILENAME_LINE,"Test end");
       
   842     std_log(LOG_FILENAME_LINE,"Test start");
       
   843     TEST (T,    6789L,   0, 0, 0, ' ', "", "%ld");
       
   844     std_log(LOG_FILENAME_LINE,"Test end");
       
   845     std_log(LOG_FILENAME_LINE,"Test start");
       
   846     TEST (T,   -7890L,   0, 0, 0, ' ', "", "%ld");
       
   847     std_log(LOG_FILENAME_LINE,"Test end");
       
   848     std_log(LOG_FILENAME_LINE,"Test start");
       
   849     TEST (T,   98765L,   0, 0, 0, ' ', "", "%ld");
       
   850     std_log(LOG_FILENAME_LINE,"Test end");
       
   851     std_log(LOG_FILENAME_LINE,"Test start");
       
   852     TEST (T,  -98766L,   0, 0, 0, ' ', "", "%ld");
       
   853     std_log(LOG_FILENAME_LINE,"Test end");
       
   854     std_log(LOG_FILENAME_LINE,"Test start");
       
   855     TEST (T, LONG_MAX,   0, 0, 0, ' ', "", "%ld");
       
   856     std_log(LOG_FILENAME_LINE,"Test end");
       
   857     std_log(LOG_FILENAME_LINE,"Test start");
       
   858     TEST (T, LONG_MIN,   0, 0, 0, ' ', "", "%ld");
       
   859     std_log(LOG_FILENAME_LINE,"Test end");
       
   860 
       
   861 
       
   862     //////////////////////////////////////////////////////////////////
       
   863     // explicit decimal ouptut
       
   864     rw_info (0, 0, __LINE__, "std::ios::dec");
       
   865 
       
   866     std_log(LOG_FILENAME_LINE,"Test start");
       
   867 
       
   868     TEST (T,       0L, dec, 0, 0, ' ', "", "%ld");
       
   869     std_log(LOG_FILENAME_LINE,"Test end");
       
   870     std_log(LOG_FILENAME_LINE,"Test start");
       
   871     TEST (T,       1L, dec, 0, 0, ' ', "", "%ld");
       
   872     std_log(LOG_FILENAME_LINE,"Test end");
       
   873     std_log(LOG_FILENAME_LINE,"Test start");
       
   874     TEST (T,       2L, dec, 0, 0, ' ', "", "%ld");
       
   875     std_log(LOG_FILENAME_LINE,"Test end");
       
   876     std_log(LOG_FILENAME_LINE,"Test start");
       
   877     TEST (T,      12L, dec, 0, 0, ' ', "", "%ld");
       
   878     std_log(LOG_FILENAME_LINE,"Test end");
       
   879     std_log(LOG_FILENAME_LINE,"Test start");
       
   880     TEST (T,     345L, dec, 0, 0, ' ', "", "%ld");
       
   881     std_log(LOG_FILENAME_LINE,"Test end");
       
   882     std_log(LOG_FILENAME_LINE,"Test start");
       
   883     TEST (T,    6789L, dec, 0, 0, ' ', "", "%ld");
       
   884     std_log(LOG_FILENAME_LINE,"Test end");
       
   885     std_log(LOG_FILENAME_LINE,"Test start");
       
   886     TEST (T,   98765L, dec, 0, 0, ' ', "", "%ld");
       
   887     std_log(LOG_FILENAME_LINE,"Test end");
       
   888     std_log(LOG_FILENAME_LINE,"Test start");
       
   889     TEST (T, LONG_MAX, dec, 0, 0, ' ', "", "%ld");
       
   890     std_log(LOG_FILENAME_LINE,"Test end");
       
   891     std_log(LOG_FILENAME_LINE,"Test start");
       
   892 
       
   893     TEST (T,      ~0L, dec, 0, 0, ' ', "", "%ld");
       
   894     std_log(LOG_FILENAME_LINE,"Test end");
       
   895     std_log(LOG_FILENAME_LINE,"Test start");
       
   896     TEST (T,      -1L, dec, 0, 0, ' ', "", "%ld");
       
   897     std_log(LOG_FILENAME_LINE,"Test end");
       
   898     std_log(LOG_FILENAME_LINE,"Test start");
       
   899     TEST (T,      -2L, dec, 0, 0, ' ', "", "%ld");
       
   900     std_log(LOG_FILENAME_LINE,"Test end");
       
   901     std_log(LOG_FILENAME_LINE,"Test start");
       
   902     TEST (T,     -12L, dec, 0, 0, ' ', "", "%ld");
       
   903     std_log(LOG_FILENAME_LINE,"Test end");
       
   904     std_log(LOG_FILENAME_LINE,"Test start");
       
   905     TEST (T,    -345L, dec, 0, 0, ' ', "", "%ld");
       
   906     std_log(LOG_FILENAME_LINE,"Test end");
       
   907     std_log(LOG_FILENAME_LINE,"Test start");
       
   908     TEST (T,   -6789L, dec, 0, 0, ' ', "", "%ld");
       
   909     std_log(LOG_FILENAME_LINE,"Test end");
       
   910     std_log(LOG_FILENAME_LINE,"Test start");
       
   911     TEST (T,  -98765L, dec, 0, 0, ' ', "", "%ld");
       
   912     std_log(LOG_FILENAME_LINE,"Test end");
       
   913     std_log(LOG_FILENAME_LINE,"Test start");
       
   914     TEST (T, LONG_MIN, dec, 0, 0, ' ', "", "%ld");
       
   915     std_log(LOG_FILENAME_LINE,"Test end");
       
   916 
       
   917 
       
   918     rw_info (0, 0, __LINE__, "std::ios::dec | std::ios::showbase");
       
   919     std_log(LOG_FILENAME_LINE,"Test end");
       
   920     std_log(LOG_FILENAME_LINE,"Test start");
       
   921 
       
   922     TEST (T,       0L, dec | showbase, 0, 0, ' ', "", "%#ld");
       
   923     std_log(LOG_FILENAME_LINE,"Test end");
       
   924     std_log(LOG_FILENAME_LINE,"Test start");
       
   925     TEST (T,    1234L, dec | showbase, 0, 0, ' ', "", "%#ld");
       
   926     std_log(LOG_FILENAME_LINE,"Test end");
       
   927     std_log(LOG_FILENAME_LINE,"Test start");
       
   928     TEST (T,   -1235L, dec | showbase, 0, 0, ' ', "", "%#ld");
       
   929     std_log(LOG_FILENAME_LINE,"Test end");
       
   930     std_log(LOG_FILENAME_LINE,"Test start");
       
   931     TEST (T, LONG_MAX, dec | showbase, 0, 0, ' ', "", "%#ld");
       
   932     std_log(LOG_FILENAME_LINE,"Test end");
       
   933     std_log(LOG_FILENAME_LINE,"Test start");
       
   934     TEST (T, LONG_MIN, dec | showbase, 0, 0, ' ', "", "%#ld");
       
   935     std_log(LOG_FILENAME_LINE,"Test end");
       
   936 
       
   937 
       
   938     rw_info (0, 0, __LINE__, "std::ios::dec | std::ios::showpos");
       
   939 
       
   940     std_log(LOG_FILENAME_LINE,"Test start");
       
   941 
       
   942     TEST (T,       0L, dec | showpos, 0, 0, ' ', "", "%+ld");
       
   943     std_log(LOG_FILENAME_LINE,"Test end");
       
   944     std_log(LOG_FILENAME_LINE,"Test start");
       
   945     TEST (T,    1236L, dec | showpos, 0, 0, ' ', "", "%+ld");
       
   946     std_log(LOG_FILENAME_LINE,"Test end");
       
   947     std_log(LOG_FILENAME_LINE,"Test start");
       
   948     TEST (T,   -1237L, dec | showpos, 0, 0, ' ', "", "%+ld");
       
   949     std_log(LOG_FILENAME_LINE,"Test end");
       
   950     std_log(LOG_FILENAME_LINE,"Test start");
       
   951     TEST (T, LONG_MAX, dec | showpos, 0, 0, ' ', "", "%+ld");
       
   952     std_log(LOG_FILENAME_LINE,"Test end");
       
   953     std_log(LOG_FILENAME_LINE,"Test start");
       
   954     TEST (T, LONG_MIN, dec | showpos, 0, 0, ' ', "", "%+ld");
       
   955     std_log(LOG_FILENAME_LINE,"Test end");
       
   956 
       
   957 
       
   958     rw_info (0, 0, __LINE__,
       
   959              "std::ios::dec | std::ios::showbase | std::ios::showpos");
       
   960 
       
   961     std_log(LOG_FILENAME_LINE,"Test start");
       
   962 
       
   963     TEST (T,       0L, dec | showbase | showpos, 0, 0, ' ', "", "%#+ld");
       
   964     std_log(LOG_FILENAME_LINE,"Test end");
       
   965     std_log(LOG_FILENAME_LINE,"Test start");
       
   966     TEST (T,    1238L, dec | showbase | showpos, 0, 0, ' ', "", "%#+ld");
       
   967     std_log(LOG_FILENAME_LINE,"Test end");
       
   968     std_log(LOG_FILENAME_LINE,"Test start");
       
   969     TEST (T,   -1239L, dec | showbase | showpos, 0, 0, ' ', "", "%#+ld");
       
   970     std_log(LOG_FILENAME_LINE,"Test end");
       
   971     std_log(LOG_FILENAME_LINE,"Test start");
       
   972     TEST (T, LONG_MAX, dec | showbase | showpos, 0, 0, ' ', "", "%#+ld");
       
   973     std_log(LOG_FILENAME_LINE,"Test end");
       
   974     std_log(LOG_FILENAME_LINE,"Test start");
       
   975     TEST (T, LONG_MIN, dec | showbase | showpos, 0, 0, ' ', "", "%#+ld");
       
   976     std_log(LOG_FILENAME_LINE,"Test end");
       
   977     std_log(LOG_FILENAME_LINE,"Test start");
       
   978 
       
   979     // left justfication
       
   980     rw_info (0, 0, __LINE__, "std::ios::dec | std::ios::left");
       
   981 
       
   982     TEST (T,  0L,         dec | left, 0, 10, ' ', "", "%-10ld");
       
   983     std_log(LOG_FILENAME_LINE,"Test end");
       
   984     std_log(LOG_FILENAME_LINE,"Test start");
       
   985     TEST (T,  1L,         dec | left, 0, 10, ' ', "", "%-10ld");
       
   986     std_log(LOG_FILENAME_LINE,"Test end");
       
   987     std_log(LOG_FILENAME_LINE,"Test start");
       
   988     TEST (T,  12L,        dec | left, 0, 10, ' ', "", "%-10ld");
       
   989     std_log(LOG_FILENAME_LINE,"Test end");
       
   990     std_log(LOG_FILENAME_LINE,"Test start");
       
   991     TEST (T,  123L,       dec | left, 0, 10, ' ', "", "%-10ld");
       
   992     std_log(LOG_FILENAME_LINE,"Test end");
       
   993     std_log(LOG_FILENAME_LINE,"Test start");
       
   994     TEST (T,  1234L,      dec | left, 0, 10, ' ', "", "%-10ld");
       
   995     std_log(LOG_FILENAME_LINE,"Test end");
       
   996     std_log(LOG_FILENAME_LINE,"Test start");
       
   997     TEST (T,  12345L,     dec | left, 0, 10, ' ', "", "%-10ld");
       
   998     std_log(LOG_FILENAME_LINE,"Test end");
       
   999     std_log(LOG_FILENAME_LINE,"Test start");
       
  1000     TEST (T,  123456L,    dec | left, 0, 10, ' ', "", "%-10ld");
       
  1001     std_log(LOG_FILENAME_LINE,"Test end");
       
  1002     std_log(LOG_FILENAME_LINE,"Test start");
       
  1003     TEST (T,  1234567L,   dec | left, 0, 10, ' ', "", "%-10ld");
       
  1004     std_log(LOG_FILENAME_LINE,"Test end");
       
  1005     std_log(LOG_FILENAME_LINE,"Test start");
       
  1006     TEST (T,  12345678L,  dec | left, 0, 10, ' ', "", "%-10ld");
       
  1007     std_log(LOG_FILENAME_LINE,"Test end");
       
  1008     std_log(LOG_FILENAME_LINE,"Test start");
       
  1009     TEST (T,  123456789L, dec | left, 0, 10, ' ', "", "%-10ld");
       
  1010     std_log(LOG_FILENAME_LINE,"Test end");
       
  1011     std_log(LOG_FILENAME_LINE,"Test start");
       
  1012 
       
  1013     // left justfication, signed dec
       
  1014     TEST (T,  -1L,         dec | left, 0, 10, ' ', "", "-1        ");
       
  1015     std_log(LOG_FILENAME_LINE,"Test end");
       
  1016     std_log(LOG_FILENAME_LINE,"Test start");
       
  1017     TEST (T,  -12L,        dec | left, 0, 10, ' ', "", "-12       ");
       
  1018     std_log(LOG_FILENAME_LINE,"Test end");
       
  1019     std_log(LOG_FILENAME_LINE,"Test start");
       
  1020     TEST (T,  -123L,       dec | left, 0, 10, ' ', "", "-123      ");
       
  1021     std_log(LOG_FILENAME_LINE,"Test end");
       
  1022     std_log(LOG_FILENAME_LINE,"Test start");
       
  1023     TEST (T,  -1234L,      dec | left, 0, 10, ' ', "", "-1234     ");
       
  1024     std_log(LOG_FILENAME_LINE,"Test end");
       
  1025     std_log(LOG_FILENAME_LINE,"Test start");
       
  1026     TEST (T,  -12345L,     dec | left, 0, 10, ' ', "", "-12345    ");
       
  1027     std_log(LOG_FILENAME_LINE,"Test end");
       
  1028     std_log(LOG_FILENAME_LINE,"Test start");
       
  1029     TEST (T,  -123456L,    dec | left, 0, 10, ' ', "", "-123456   ");
       
  1030     std_log(LOG_FILENAME_LINE,"Test end");
       
  1031     std_log(LOG_FILENAME_LINE,"Test start");
       
  1032     TEST (T,  -1234567L,   dec | left, 0, 10, ' ', "", "-1234567  ");
       
  1033     std_log(LOG_FILENAME_LINE,"Test end");
       
  1034     std_log(LOG_FILENAME_LINE,"Test start");
       
  1035     TEST (T,  -12345678L,  dec | left, 0, 10, ' ', "", "-12345678 ");
       
  1036     std_log(LOG_FILENAME_LINE,"Test end");
       
  1037     std_log(LOG_FILENAME_LINE,"Test start");
       
  1038     TEST (T,  -123456789L, dec | left, 0, 10, ' ', "", "-123456789");
       
  1039     std_log(LOG_FILENAME_LINE,"Test end");
       
  1040     std_log(LOG_FILENAME_LINE,"Test start");
       
  1041 
       
  1042     // left justification with fill char
       
  1043     TEST (T,  -1L,         dec | left, 0, 10, '#', "", "-1########");
       
  1044     std_log(LOG_FILENAME_LINE,"Test end");
       
  1045     std_log(LOG_FILENAME_LINE,"Test start");
       
  1046     TEST (T,  -12L,        dec | left, 0, 10, '@', "", "-12@@@@@@@");
       
  1047     std_log(LOG_FILENAME_LINE,"Test end");
       
  1048     std_log(LOG_FILENAME_LINE,"Test start");
       
  1049     TEST (T,  -123L,       dec | left, 0, 10, '*', "", "-123******");
       
  1050     std_log(LOG_FILENAME_LINE,"Test end");
       
  1051     std_log(LOG_FILENAME_LINE,"Test start");
       
  1052     TEST (T,  -1234L,      dec | left, 0, 10, '=', "", "-1234=====");
       
  1053     std_log(LOG_FILENAME_LINE,"Test end");
       
  1054     std_log(LOG_FILENAME_LINE,"Test start");
       
  1055     TEST (T,  -12345L,     dec | left, 0, 10, '.', "", "-12345....");
       
  1056     std_log(LOG_FILENAME_LINE,"Test end");
       
  1057     std_log(LOG_FILENAME_LINE,"Test start");
       
  1058     TEST (T,  -123456L,    dec | left, 0, 10, ',', "", "-123456,,,");
       
  1059     std_log(LOG_FILENAME_LINE,"Test end");
       
  1060     std_log(LOG_FILENAME_LINE,"Test start");
       
  1061     TEST (T,  -1234567L,   dec | left, 0, 10, '-', "", "-1234567--");
       
  1062     std_log(LOG_FILENAME_LINE,"Test end");
       
  1063     std_log(LOG_FILENAME_LINE,"Test start");
       
  1064     TEST (T,  -12345678L,  dec | left, 0, 10, '+', "", "-12345678+");
       
  1065     std_log(LOG_FILENAME_LINE,"Test end");
       
  1066     std_log(LOG_FILENAME_LINE,"Test start");
       
  1067     TEST (T,  -123456789L, dec | left, 0, 10, ';', "", "-123456789");
       
  1068     std_log(LOG_FILENAME_LINE,"Test end");
       
  1069     std_log(LOG_FILENAME_LINE,"Test start");
       
  1070 
       
  1071     // left justfication with grouping
       
  1072     TEST (T,  1L,         dec | left, 0, 14, ' ', "\2", "1             ");
       
  1073     std_log(LOG_FILENAME_LINE,"Test end");
       
  1074     std_log(LOG_FILENAME_LINE,"Test start");
       
  1075     TEST (T,  12L,        dec | left, 0, 14, ' ', "\2", "12            ");
       
  1076     std_log(LOG_FILENAME_LINE,"Test end");
       
  1077     std_log(LOG_FILENAME_LINE,"Test start");
       
  1078     TEST (T,  123L,       dec | left, 0, 14, ' ', "\2", "1,23          ");
       
  1079     std_log(LOG_FILENAME_LINE,"Test end");
       
  1080     std_log(LOG_FILENAME_LINE,"Test start");
       
  1081     TEST (T,  1234L,      dec | left, 0, 14, ' ', "\2", "12,34         ");
       
  1082     std_log(LOG_FILENAME_LINE,"Test end");
       
  1083     std_log(LOG_FILENAME_LINE,"Test start");
       
  1084     TEST (T,  12345L,     dec | left, 0, 14, ' ', "\2", "1,23,45       ");
       
  1085     std_log(LOG_FILENAME_LINE,"Test end");
       
  1086     std_log(LOG_FILENAME_LINE,"Test start");
       
  1087     TEST (T,  123456L,    dec | left, 0, 14, ' ', "\2", "12,34,56      ");
       
  1088     std_log(LOG_FILENAME_LINE,"Test end");
       
  1089     std_log(LOG_FILENAME_LINE,"Test start");
       
  1090     TEST (T,  1234567L,   dec | left, 0, 14, ' ', "\2", "1,23,45,67    ");
       
  1091     std_log(LOG_FILENAME_LINE,"Test end");
       
  1092     std_log(LOG_FILENAME_LINE,"Test start");
       
  1093     TEST (T,  12345678L,  dec | left, 0, 14, ' ', "\2", "12,34,56,78   ");
       
  1094     std_log(LOG_FILENAME_LINE,"Test end");
       
  1095     std_log(LOG_FILENAME_LINE,"Test start");
       
  1096     TEST (T,  123456789L, dec | left, 0, 14, ' ', "\2", "1,23,45,67,89 ");
       
  1097     std_log(LOG_FILENAME_LINE,"Test end");
       
  1098     std_log(LOG_FILENAME_LINE,"Test start");
       
  1099     TEST (T,  123456789L, dec | left, 0, 14, ',', "\2", "1,23,45,67,89,");
       
  1100     std_log(LOG_FILENAME_LINE,"Test end");
       
  1101     std_log(LOG_FILENAME_LINE,"Test start");
       
  1102 
       
  1103     TEST (T,  1L,         dec | left, 0, 14, ' ', "\2\1\3", "1             ");
       
  1104     std_log(LOG_FILENAME_LINE,"Test end");
       
  1105     std_log(LOG_FILENAME_LINE,"Test start");
       
  1106     TEST (T,  12L,        dec | left, 0, 14, ' ', "\2\1\3", "12            ");
       
  1107     std_log(LOG_FILENAME_LINE,"Test end");
       
  1108     std_log(LOG_FILENAME_LINE,"Test start");
       
  1109     TEST (T,  123L,       dec | left, 0, 14, ' ', "\2\1\3", "1,23          ");
       
  1110     std_log(LOG_FILENAME_LINE,"Test end");
       
  1111     std_log(LOG_FILENAME_LINE,"Test start");
       
  1112     TEST (T,  1234L,      dec | left, 0, 14, ' ', "\2\1\3", "1,2,34        ");
       
  1113     std_log(LOG_FILENAME_LINE,"Test end");
       
  1114     std_log(LOG_FILENAME_LINE,"Test start");
       
  1115     TEST (T,  12345L,     dec | left, 0, 14, ' ', "\2\1\3", "12,3,45       ");
       
  1116     std_log(LOG_FILENAME_LINE,"Test end");
       
  1117     std_log(LOG_FILENAME_LINE,"Test start");
       
  1118     TEST (T,  123456L,    dec | left, 0, 14, ' ', "\2\1\3", "123,4,56      ");
       
  1119     std_log(LOG_FILENAME_LINE,"Test end");
       
  1120     std_log(LOG_FILENAME_LINE,"Test start");
       
  1121     TEST (T,  1234567L,   dec | left, 0, 14, ' ', "\2\1\3", "1,234,5,67    ");
       
  1122     std_log(LOG_FILENAME_LINE,"Test end");
       
  1123     std_log(LOG_FILENAME_LINE,"Test start");
       
  1124     TEST (T,  12345678L,  dec | left, 0, 14, ' ', "\2\1\3", "12,345,6,78   ");
       
  1125     std_log(LOG_FILENAME_LINE,"Test end");
       
  1126     std_log(LOG_FILENAME_LINE,"Test start");
       
  1127     TEST (T,  123456789L, dec | left, 0, 14, ' ', "\2\1\3", "123,456,7,89  ");
       
  1128     std_log(LOG_FILENAME_LINE,"Test end");
       
  1129     std_log(LOG_FILENAME_LINE,"Test start");
       
  1130     TEST (T,  123456789L, dec | left, 0, 14, '0', "\2\1\3", "123,456,7,8900");
       
  1131     std_log(LOG_FILENAME_LINE,"Test end");
       
  1132     std_log(LOG_FILENAME_LINE,"Test start");
       
  1133 
       
  1134     TEST (T,  -1L,         dec | left, 0, 14, ' ', "\1\2\3", "-1            ");
       
  1135         std_log(LOG_FILENAME_LINE,"Test end");
       
  1136     std_log(LOG_FILENAME_LINE,"Test start");
       
  1137 TEST (T,  -12L,        dec | left, 0, 14, ' ', "\1\2\3", "-1,2          ");
       
  1138     std_log(LOG_FILENAME_LINE,"Test end");
       
  1139     std_log(LOG_FILENAME_LINE,"Test start");
       
  1140     TEST (T,  -123L,       dec | left, 0, 14, ' ', "\1\2\3", "-12,3         ");
       
  1141     std_log(LOG_FILENAME_LINE,"Test end");
       
  1142     std_log(LOG_FILENAME_LINE,"Test start");
       
  1143     TEST (T,  -1234L,      dec | left, 0, 14, ' ', "\1\2\3", "-1,23,4       ");
       
  1144     std_log(LOG_FILENAME_LINE,"Test end");
       
  1145     std_log(LOG_FILENAME_LINE,"Test start");
       
  1146     TEST (T,  -12345L,     dec | left, 0, 14, ' ', "\1\2\3", "-12,34,5      ");
       
  1147     std_log(LOG_FILENAME_LINE,"Test end");
       
  1148     std_log(LOG_FILENAME_LINE,"Test start");
       
  1149     TEST (T,  -123456L,    dec | left, 0, 14, ' ', "\1\2\3", "-123,45,6     ");
       
  1150     std_log(LOG_FILENAME_LINE,"Test end");
       
  1151     std_log(LOG_FILENAME_LINE,"Test start");
       
  1152     TEST (T,  -1234567L,   dec | left, 0, 14, ' ', "\1\2\3", "-1,234,56,7   ");
       
  1153     std_log(LOG_FILENAME_LINE,"Test end");
       
  1154     std_log(LOG_FILENAME_LINE,"Test start");
       
  1155     TEST (T,  -12345678L,  dec | left, 0, 14, ' ', "\1\2\3", "-12,345,67,8  ");
       
  1156     std_log(LOG_FILENAME_LINE,"Test end");
       
  1157     std_log(LOG_FILENAME_LINE,"Test start");
       
  1158     TEST (T,  -123456789L, dec | left, 0, 14, ' ', "\1\2\3", "-123,456,78,9 ");
       
  1159     std_log(LOG_FILENAME_LINE,"Test end");
       
  1160     std_log(LOG_FILENAME_LINE,"Test start");
       
  1161     TEST (T,  -123456789L, dec | left, 0, 14, ' ', "\3\1\2", "-1,23,45,6,789");
       
  1162     std_log(LOG_FILENAME_LINE,"Test end");
       
  1163     std_log(LOG_FILENAME_LINE,"Test start");
       
  1164 
       
  1165     TEST (T,  -123456780L, dec | left, 0, 14, ' ', "\x1", "-1,2,3,4,5,6,7,8,0");
       
  1166     std_log(LOG_FILENAME_LINE,"Test end");
       
  1167     std_log(LOG_FILENAME_LINE,"Test start");
       
  1168 
       
  1169     TEST (T,  -123456781L, dec | left, 0, 14, ' ', "\x2", "-1,23,45,67,81");
       
  1170     std_log(LOG_FILENAME_LINE,"Test end");
       
  1171     std_log(LOG_FILENAME_LINE,"Test start");
       
  1172     TEST (T,  -123456782L, dec | left, 0, 14, ' ', "\x3", "-123,456,782  ");
       
  1173     std_log(LOG_FILENAME_LINE,"Test end");
       
  1174     std_log(LOG_FILENAME_LINE,"Test start");
       
  1175     TEST (T,  -123456783L, dec | left, 0, 14, ' ', "\x4", "-1,2345,6783  ");
       
  1176     std_log(LOG_FILENAME_LINE,"Test end");
       
  1177     std_log(LOG_FILENAME_LINE,"Test start");
       
  1178     TEST (T,  -123456784L, dec | left, 0, 14, ' ', "\x5", "-1234,56784   ");
       
  1179     std_log(LOG_FILENAME_LINE,"Test end");
       
  1180     std_log(LOG_FILENAME_LINE,"Test start");
       
  1181     TEST (T,  -123456785L, dec | left, 0, 14, ' ', "\x6", "-123,456785   ");
       
  1182     std_log(LOG_FILENAME_LINE,"Test end");
       
  1183     std_log(LOG_FILENAME_LINE,"Test start");
       
  1184     TEST (T,  -123456786L, dec | left, 0, 14, ' ', "\x7", "-12,3456786   ");
       
  1185     std_log(LOG_FILENAME_LINE,"Test end");
       
  1186     std_log(LOG_FILENAME_LINE,"Test start");
       
  1187     TEST (T,  -123456787L, dec | left, 0, 14, ' ', "\x8", "-1,23456787   ");
       
  1188     std_log(LOG_FILENAME_LINE,"Test end");
       
  1189     std_log(LOG_FILENAME_LINE,"Test start");
       
  1190     TEST (T,  -123456788L, dec | left, 0, 14, ' ', "\x9", "-123456788    ");
       
  1191     std_log(LOG_FILENAME_LINE,"Test end");
       
  1192 
       
  1193 
       
  1194 #ifndef _RWSTD_NO_EXT_BIN_IO
       
  1195 
       
  1196     rw_info (0, 0, __LINE__, "std::ios::dec | std::ios::bin [extension]");
       
  1197 
       
  1198     TEST (T, 33333333L, bin | dec, 0, 0, ' ', "", "%ld");
       
  1199 
       
  1200 #endif   // _RWSTD_NO_EXT_BIN_IO
       
  1201 
       
  1202     //////////////////////////////////////////////////////////////////
       
  1203     // explicit octal ouptut
       
  1204     rw_info (0, 0, __LINE__, "std::ios::oct");
       
  1205     
       
  1206     std_log(LOG_FILENAME_LINE,"Test start");
       
  1207 
       
  1208     TEST (T,       0L, oct, 0, 0, ' ', "", "%lo");
       
  1209         std_log(LOG_FILENAME_LINE,"Test end");
       
  1210     std_log(LOG_FILENAME_LINE,"Test start");
       
  1211 TEST (T,       1L, oct, 0, 0, ' ', "", "%lo");
       
  1212     std_log(LOG_FILENAME_LINE,"Test end");
       
  1213     std_log(LOG_FILENAME_LINE,"Test start");
       
  1214     TEST (T,       2L, oct, 0, 0, ' ', "", "%lo");
       
  1215     std_log(LOG_FILENAME_LINE,"Test end");
       
  1216     std_log(LOG_FILENAME_LINE,"Test start");
       
  1217     TEST (T,      12L, oct, 0, 0, ' ', "", "%lo");
       
  1218     std_log(LOG_FILENAME_LINE,"Test end");
       
  1219     std_log(LOG_FILENAME_LINE,"Test start");
       
  1220     TEST (T,     345L, oct, 0, 0, ' ', "", "%lo");
       
  1221     std_log(LOG_FILENAME_LINE,"Test end");
       
  1222     std_log(LOG_FILENAME_LINE,"Test start");
       
  1223     TEST (T,    6789L, oct, 0, 0, ' ', "", "%lo");
       
  1224     std_log(LOG_FILENAME_LINE,"Test end");
       
  1225     std_log(LOG_FILENAME_LINE,"Test start");
       
  1226     TEST (T,   98765L, oct, 0, 0, ' ', "", "%lo");
       
  1227     std_log(LOG_FILENAME_LINE,"Test end");
       
  1228     std_log(LOG_FILENAME_LINE,"Test start");
       
  1229     TEST (T, LONG_MAX, oct, 0, 0, ' ', "", "%lo");
       
  1230     std_log(LOG_FILENAME_LINE,"Test end");
       
  1231     std_log(LOG_FILENAME_LINE,"Test start");
       
  1232 
       
  1233     TEST (T, LONG_MAX - 1, oct, 0, 0, ' ', "", "%lo");
       
  1234     std_log(LOG_FILENAME_LINE,"Test end");
       
  1235     std_log(LOG_FILENAME_LINE,"Test start");
       
  1236 
       
  1237     // negative values formatted as oct cause overflow on input (lwg issue 23)
       
  1238     TEST (T,      ~0L, oct, 0, 0, ' ', "", "%lo", GET_FAIL);
       
  1239     std_log(LOG_FILENAME_LINE,"Test end");
       
  1240     std_log(LOG_FILENAME_LINE,"Test start");
       
  1241     TEST (T,      -1L, oct, 0, 0, ' ', "", "%lo", GET_FAIL);
       
  1242     std_log(LOG_FILENAME_LINE,"Test end");
       
  1243     std_log(LOG_FILENAME_LINE,"Test start");
       
  1244     TEST (T,      -2L, oct, 0, 0, ' ', "", "%lo", GET_FAIL);
       
  1245     std_log(LOG_FILENAME_LINE,"Test end");
       
  1246     std_log(LOG_FILENAME_LINE,"Test start");
       
  1247     TEST (T,     -12L, oct, 0, 0, ' ', "", "%lo", GET_FAIL);
       
  1248     std_log(LOG_FILENAME_LINE,"Test end");
       
  1249     std_log(LOG_FILENAME_LINE,"Test start");
       
  1250     TEST (T,    -345L, oct, 0, 0, ' ', "", "%lo", GET_FAIL);
       
  1251     std_log(LOG_FILENAME_LINE,"Test end");
       
  1252     std_log(LOG_FILENAME_LINE,"Test start");
       
  1253     TEST (T,   -6789L, oct, 0, 0, ' ', "", "%lo", GET_FAIL);
       
  1254     std_log(LOG_FILENAME_LINE,"Test end");
       
  1255     std_log(LOG_FILENAME_LINE,"Test start");
       
  1256     TEST (T,  -98765L, oct, 0, 0, ' ', "", "%lo", GET_FAIL);
       
  1257     std_log(LOG_FILENAME_LINE,"Test end");
       
  1258     std_log(LOG_FILENAME_LINE,"Test start");
       
  1259     TEST (T, LONG_MIN, oct, 0, 0, ' ', "", "%lo", GET_FAIL);
       
  1260     std_log(LOG_FILENAME_LINE,"Test end");
       
  1261     std_log(LOG_FILENAME_LINE,"Test start");
       
  1262 
       
  1263     rw_info (0, 0, __LINE__, "std::ios::oct | std::ios::dec");
       
  1264 
       
  1265     TEST (T, 13579L, oct | dec, 0, 0, ' ', "", "%ld");
       
  1266     std_log(LOG_FILENAME_LINE,"Test end");
       
  1267     std_log(LOG_FILENAME_LINE,"Test start");
       
  1268 
       
  1269     rw_info (0, 0, __LINE__, "std::ios::oct | std::ios::showbase");
       
  1270 
       
  1271     TEST (T,       0L, oct | showbase, 0, 0, ' ', "", "%#lo");
       
  1272     std_log(LOG_FILENAME_LINE,"Test end");
       
  1273     std_log(LOG_FILENAME_LINE,"Test start");
       
  1274     TEST (T,    2345L, oct | showbase, 0, 0, ' ', "", "%#lo");
       
  1275     std_log(LOG_FILENAME_LINE,"Test end");
       
  1276     std_log(LOG_FILENAME_LINE,"Test start");
       
  1277     TEST (T,   -2346L, oct | showbase, 0, 0, ' ', "", "%#lo", GET_FAIL);
       
  1278     std_log(LOG_FILENAME_LINE,"Test end");
       
  1279     std_log(LOG_FILENAME_LINE,"Test start");
       
  1280     TEST (T, LONG_MAX, oct | showbase, 0, 0, ' ', "", "%#+lo");
       
  1281     std_log(LOG_FILENAME_LINE,"Test end");
       
  1282     std_log(LOG_FILENAME_LINE,"Test start");
       
  1283     TEST (T, LONG_MIN, oct | showbase, 0, 0, ' ', "", "%#+lo", GET_FAIL);
       
  1284     std_log(LOG_FILENAME_LINE,"Test end");
       
  1285     std_log(LOG_FILENAME_LINE,"Test start");
       
  1286 
       
  1287     rw_info (0, 0, __LINE__, "std::ios::oct | std::ios::showpos");
       
  1288 
       
  1289     TEST (T,       0L, oct | showpos, 0, 0, ' ', "", "%+lo");
       
  1290     std_log(LOG_FILENAME_LINE,"Test end");
       
  1291     std_log(LOG_FILENAME_LINE,"Test start");
       
  1292     TEST (T,    2347L, oct | showpos, 0, 0, ' ', "", "%+lo");
       
  1293     std_log(LOG_FILENAME_LINE,"Test end");
       
  1294     std_log(LOG_FILENAME_LINE,"Test start");
       
  1295     TEST (T,   -2348L, oct | showpos, 0, 0, ' ', "", "%+lo", GET_FAIL);
       
  1296     std_log(LOG_FILENAME_LINE,"Test end");
       
  1297     std_log(LOG_FILENAME_LINE,"Test start");
       
  1298 
       
  1299     TEST (T, LONG_MAX, oct | showpos, 0, 0, ' ', "", "%+lo");
       
  1300     std_log(LOG_FILENAME_LINE,"Test end");
       
  1301     std_log(LOG_FILENAME_LINE,"Test start");
       
  1302     TEST (T, LONG_MIN, oct | showpos, 0, 0, ' ', "", "%+lo", GET_FAIL);
       
  1303     std_log(LOG_FILENAME_LINE,"Test end");
       
  1304     std_log(LOG_FILENAME_LINE,"Test start");
       
  1305 
       
  1306     rw_info (0, 0, __LINE__,
       
  1307              "std::ios::oct | std::ios::showbase | std::ios::showpos");
       
  1308 
       
  1309     TEST (T,       0L, oct | showbase | showpos, 0, 0, ' ', "", "%#+lo");
       
  1310     std_log(LOG_FILENAME_LINE,"Test end");
       
  1311     std_log(LOG_FILENAME_LINE,"Test start");
       
  1312     TEST (T,    2349L, oct | showbase | showpos, 0, 0, ' ', "", "%#+lo");
       
  1313     std_log(LOG_FILENAME_LINE,"Test end");
       
  1314     std_log(LOG_FILENAME_LINE,"Test start");
       
  1315     TEST (T,   -2350L, oct | showbase | showpos, 0, 0, ' ', "", "%#+lo",
       
  1316           GET_FAIL);
       
  1317     std_log(LOG_FILENAME_LINE,"Test end");
       
  1318     std_log(LOG_FILENAME_LINE,"Test start");
       
  1319 
       
  1320     TEST (T, LONG_MAX, oct | showbase | showpos, 0, 0, ' ', "", "%#+lo");
       
  1321     std_log(LOG_FILENAME_LINE,"Test end");
       
  1322     std_log(LOG_FILENAME_LINE,"Test start");
       
  1323     TEST (T, LONG_MIN, oct | showbase | showpos, 0, 0, ' ', "", "%#+lo",
       
  1324           GET_FAIL);
       
  1325     std_log(LOG_FILENAME_LINE,"Test end");
       
  1326 
       
  1327 
       
  1328 #ifndef _RWSTD_NO_EXT_BIN_IO
       
  1329 
       
  1330     rw_info (0, 0, __LINE__, "std::ios::oct | std::ios::bin [extension]");
       
  1331 
       
  1332     std_log(LOG_FILENAME_LINE,"Test start");
       
  1333 
       
  1334     TEST (T, 22222222L, bin | oct, 0, 0, ' ', "", "%ld");
       
  1335     std_log(LOG_FILENAME_LINE,"Test end");
       
  1336 
       
  1337 
       
  1338 #endif   // _RWSTD_NO_EXT_BIN_IO
       
  1339 
       
  1340     //////////////////////////////////////////////////////////////////
       
  1341     // explicit hexadecimal ouptut
       
  1342     rw_info (0, 0, __LINE__, "std::ios::hex");
       
  1343     std_log(LOG_FILENAME_LINE,"Test end");
       
  1344     std_log(LOG_FILENAME_LINE,"Test start");
       
  1345 
       
  1346     TEST (T,       0L, hex, 0, 0, ' ', "", "%lx");
       
  1347     std_log(LOG_FILENAME_LINE,"Test end");
       
  1348     std_log(LOG_FILENAME_LINE,"Test start");
       
  1349     TEST (T,       1L, hex, 0, 0, ' ', "", "%lx");
       
  1350     std_log(LOG_FILENAME_LINE,"Test end");
       
  1351     std_log(LOG_FILENAME_LINE,"Test start");
       
  1352     TEST (T,       2L, hex, 0, 0, ' ', "", "%lx");
       
  1353     std_log(LOG_FILENAME_LINE,"Test end");
       
  1354     std_log(LOG_FILENAME_LINE,"Test start");
       
  1355     TEST (T,      12L, hex, 0, 0, ' ', "", "%lx");
       
  1356     std_log(LOG_FILENAME_LINE,"Test end");
       
  1357     std_log(LOG_FILENAME_LINE,"Test start");
       
  1358     TEST (T,     345L, hex, 0, 0, ' ', "", "%lx");
       
  1359     std_log(LOG_FILENAME_LINE,"Test end");
       
  1360     std_log(LOG_FILENAME_LINE,"Test start");
       
  1361     TEST (T,    6789L, hex, 0, 0, ' ', "", "%lx");
       
  1362     std_log(LOG_FILENAME_LINE,"Test end");
       
  1363     std_log(LOG_FILENAME_LINE,"Test start");
       
  1364     TEST (T,   98765L, hex, 0, 0, ' ', "", "%lx");
       
  1365     std_log(LOG_FILENAME_LINE,"Test end");
       
  1366     std_log(LOG_FILENAME_LINE,"Test start");
       
  1367     TEST (T, LONG_MAX, hex, 0, 0, ' ', "", "%lx");
       
  1368     std_log(LOG_FILENAME_LINE,"Test end");
       
  1369     std_log(LOG_FILENAME_LINE,"Test start");
       
  1370     TEST (T, LONG_MAX - 1, hex, 0, 0, ' ', "", "%lx");
       
  1371     std_log(LOG_FILENAME_LINE,"Test end");
       
  1372     std_log(LOG_FILENAME_LINE,"Test start");
       
  1373     TEST (T, LONG_MAX - 2, hex, 0, 0, ' ', "", "%lx");
       
  1374     std_log(LOG_FILENAME_LINE,"Test end");
       
  1375     std_log(LOG_FILENAME_LINE,"Test start");
       
  1376 
       
  1377     // negative values formatted as hex cause overflow on input (lwg issue 23)
       
  1378     TEST (T,      ~0L, hex, 0, 0, ' ', "", "%lx", GET_FAIL);
       
  1379     std_log(LOG_FILENAME_LINE,"Test end");
       
  1380     std_log(LOG_FILENAME_LINE,"Test start");
       
  1381     TEST (T,      -1L, hex, 0, 0, ' ', "", "%lx", GET_FAIL);
       
  1382     std_log(LOG_FILENAME_LINE,"Test end");
       
  1383     std_log(LOG_FILENAME_LINE,"Test start");
       
  1384     TEST (T,      -2L, hex, 0, 0, ' ', "", "%lx", GET_FAIL);
       
  1385     std_log(LOG_FILENAME_LINE,"Test end");
       
  1386     std_log(LOG_FILENAME_LINE,"Test start");
       
  1387     TEST (T,     -12L, hex, 0, 0, ' ', "", "%lx", GET_FAIL);
       
  1388     std_log(LOG_FILENAME_LINE,"Test end");
       
  1389     std_log(LOG_FILENAME_LINE,"Test start");
       
  1390     TEST (T,    -345L, hex, 0, 0, ' ', "", "%lx", GET_FAIL);
       
  1391     std_log(LOG_FILENAME_LINE,"Test end");
       
  1392     std_log(LOG_FILENAME_LINE,"Test start");
       
  1393     TEST (T,   -6789L, hex, 0, 0, ' ', "", "%lx", GET_FAIL);
       
  1394     std_log(LOG_FILENAME_LINE,"Test end");
       
  1395     std_log(LOG_FILENAME_LINE,"Test start");
       
  1396     TEST (T,  -98765L, hex, 0, 0, ' ', "", "%lx", GET_FAIL);
       
  1397     std_log(LOG_FILENAME_LINE,"Test end");
       
  1398     std_log(LOG_FILENAME_LINE,"Test start");
       
  1399     TEST (T, LONG_MIN, hex, 0, 0, ' ', "", "%lx", GET_FAIL);
       
  1400     std_log(LOG_FILENAME_LINE,"Test end");
       
  1401     std_log(LOG_FILENAME_LINE,"Test start");
       
  1402 
       
  1403     rw_info (0, 0, __LINE__, "std::ios::hex | std::ios::uppercase");
       
  1404 
       
  1405     TEST (T,       0L, hex | uppercase, 0, 0, ' ', "", "%lX");
       
  1406     std_log(LOG_FILENAME_LINE,"Test end");
       
  1407     std_log(LOG_FILENAME_LINE,"Test start");
       
  1408     TEST (T,       1L, hex | uppercase, 0, 0, ' ', "", "%lX");
       
  1409     std_log(LOG_FILENAME_LINE,"Test end");
       
  1410     std_log(LOG_FILENAME_LINE,"Test start");
       
  1411     TEST (T,  0XABCDL, hex | uppercase, 0, 0, ' ', "", "%lX");
       
  1412     std_log(LOG_FILENAME_LINE,"Test end");
       
  1413     std_log(LOG_FILENAME_LINE,"Test start");
       
  1414     TEST (T,  0XBCDEL, hex | uppercase, 0, 0, ' ', "", "%lX");
       
  1415     std_log(LOG_FILENAME_LINE,"Test end");
       
  1416     std_log(LOG_FILENAME_LINE,"Test start");
       
  1417     TEST (T,  0XCDEFL, hex | uppercase, 0, 0, ' ', "", "%lX");
       
  1418     std_log(LOG_FILENAME_LINE,"Test end");
       
  1419     std_log(LOG_FILENAME_LINE,"Test start");
       
  1420 
       
  1421     rw_info (0, 0, __LINE__, "std::ios::hex | std::ios::showbase");
       
  1422 
       
  1423     TEST (T,       0L, hex | showbase, 0, 0, ' ', "", "%#lx");
       
  1424     std_log(LOG_FILENAME_LINE,"Test end");
       
  1425     std_log(LOG_FILENAME_LINE,"Test start");
       
  1426     TEST (T,       1L, hex | showbase, 0, 0, ' ', "", "%#lx");
       
  1427     std_log(LOG_FILENAME_LINE,"Test end");
       
  1428     std_log(LOG_FILENAME_LINE,"Test start");
       
  1429     TEST (T,  0xdef1L, hex | showbase, 0, 0, ' ', "", "%#lx");
       
  1430     std_log(LOG_FILENAME_LINE,"Test end");
       
  1431     
       
  1432 
       
  1433     rw_info (0, 0, __LINE__,
       
  1434              "std::ios::hex | std::ios::uppercase | std::ios::showbase");
       
  1435     std_log(LOG_FILENAME_LINE,"Test start");
       
  1436     TEST (T,       0L, hex | uppercase | showbase, 0, 0, ' ', "", "%#lX");
       
  1437     std_log(LOG_FILENAME_LINE,"Test end");
       
  1438     std_log(LOG_FILENAME_LINE,"Test start");
       
  1439     TEST (T,       1L, hex | uppercase | showbase, 0, 0, ' ', "", "%#lX");
       
  1440     std_log(LOG_FILENAME_LINE,"Test end");
       
  1441     std_log(LOG_FILENAME_LINE,"Test start");
       
  1442     TEST (T,  0XEF02L, hex | uppercase | showbase, 0, 0, ' ', "", "%#lX");
       
  1443     std_log(LOG_FILENAME_LINE,"Test end");
       
  1444     
       
  1445     
       
  1446     rw_info (0, 0, __LINE__, "std::ios::hex | std::ios::oct");
       
  1447     std_log(LOG_FILENAME_LINE,"Test start");
       
  1448     TEST (T,       0L, oct | hex, 0, 0, ' ', "", "%ld");
       
  1449     std_log(LOG_FILENAME_LINE,"Test end");
       
  1450     std_log(LOG_FILENAME_LINE,"Test start");
       
  1451     TEST (T,   97531L, oct | hex, 0, 0, ' ', "", "%ld");
       
  1452     std_log(LOG_FILENAME_LINE,"Test end");
       
  1453     
       
  1454 
       
  1455     rw_info (0, 0, __LINE__, "std::ios::hex | std::ios::dec");
       
  1456     std_log(LOG_FILENAME_LINE,"Test start");
       
  1457     TEST (T,   86420L, dec | hex, 0, 0, ' ', "", "%ld");
       
  1458     std_log(LOG_FILENAME_LINE,"Test end");
       
  1459 
       
  1460 
       
  1461     rw_info (0, 0, __LINE__, "std::ios::hex | std::ios::dec | std::ios::oct");
       
  1462     std_log(LOG_FILENAME_LINE,"Test start");
       
  1463     TEST (T, 11111111L, oct | dec | hex, 0, 0, ' ', "", "%ld");
       
  1464     std_log(LOG_FILENAME_LINE,"Test end");
       
  1465     
       
  1466 
       
  1467 #ifndef _RWSTD_NO_EXT_BIN_IO
       
  1468 
       
  1469     rw_info (0, 0, __LINE__, "std::ios::hex | std::ios::bin [extension]");
       
  1470     std_log(LOG_FILENAME_LINE,"Test start");
       
  1471     TEST (T, 44444444L, bin | hex, 0, 0, ' ', "", "%ld");
       
  1472 std_log(LOG_FILENAME_LINE,"Test end");
       
  1473     rw_info (0, 0, __LINE__, "std::ios::hex | std::ios::dec | "
       
  1474                   "std::ios::oct | std::ios::bin [extension]");
       
  1475 std_log(LOG_FILENAME_LINE,"Test start");
       
  1476     TEST (T, 55555555L, bin | oct | dec | hex, 0, 0, ' ', "", "%ld");
       
  1477 std_log(LOG_FILENAME_LINE,"Test end");
       
  1478 #endif   // _RWSTD_NO_EXT_BIN_IO
       
  1479 
       
  1480 
       
  1481     //////////////////////////////////////////////////////////////////
       
  1482     // extension: fixed and negative precision
       
  1483 
       
  1484     rw_info (0, 0, __LINE__,
       
  1485              "std::ios::fixed with negative precision [extension]");
       
  1486     std_log(LOG_FILENAME_LINE,"Test start");
       
  1487     TEST (T,  987654321L, 0,      -1, 0, ' ', "", "987654321");
       
  1488     std_log(LOG_FILENAME_LINE,"Test end");
       
  1489     std_log(LOG_FILENAME_LINE,"Test start");
       
  1490     TEST (T,  987654322L, fixed,   0, 0, ' ', "", "987654322");
       
  1491     std_log(LOG_FILENAME_LINE,"Test end");
       
  1492     std_log(LOG_FILENAME_LINE,"Test start");
       
  1493     TEST (T,  987654323L, fixed,  -1, 0, ' ', "", "98765432*3");
       
  1494     std_log(LOG_FILENAME_LINE,"Test end");
       
  1495     std_log(LOG_FILENAME_LINE,"Test start");
       
  1496     TEST (T, -987654323L, fixed,  -1, 0, ' ', "", "-98765432*3");
       
  1497     std_log(LOG_FILENAME_LINE,"Test end");
       
  1498     std_log(LOG_FILENAME_LINE,"Test start");
       
  1499     TEST (T,  987654324L, fixed,  -2, 0, ' ', "", "9876543*24");
       
  1500     std_log(LOG_FILENAME_LINE,"Test end");
       
  1501     std_log(LOG_FILENAME_LINE,"Test start");
       
  1502     TEST (T, -987654324L, fixed,  -2, 0, ' ', "", "-9876543*24");
       
  1503     std_log(LOG_FILENAME_LINE,"Test end");
       
  1504     std_log(LOG_FILENAME_LINE,"Test start");
       
  1505     TEST (T,  987654325L, fixed,  -3, 0, ' ', "", "987654*325");
       
  1506     std_log(LOG_FILENAME_LINE,"Test end");
       
  1507     std_log(LOG_FILENAME_LINE,"Test start");
       
  1508     TEST (T, -987654325L, fixed,  -3, 0, ' ', "", "-987654*325");
       
  1509     std_log(LOG_FILENAME_LINE,"Test end");
       
  1510     std_log(LOG_FILENAME_LINE,"Test start");
       
  1511     TEST (T,  987654326L, fixed,  -4, 0, ' ', "", "98765*4326");
       
  1512     std_log(LOG_FILENAME_LINE,"Test end");
       
  1513     std_log(LOG_FILENAME_LINE,"Test start");
       
  1514     TEST (T, -987654326L, fixed,  -4, 0, ' ', "", "-98765*4326");
       
  1515     std_log(LOG_FILENAME_LINE,"Test end");
       
  1516     std_log(LOG_FILENAME_LINE,"Test start");
       
  1517     TEST (T,  987654327L, fixed,  -5, 0, ' ', "", "9876*54327");
       
  1518     std_log(LOG_FILENAME_LINE,"Test end");
       
  1519     std_log(LOG_FILENAME_LINE,"Test start");
       
  1520     TEST (T, -987654327L, fixed,  -5, 0, ' ', "", "-9876*54327");
       
  1521     std_log(LOG_FILENAME_LINE,"Test end");
       
  1522     std_log(LOG_FILENAME_LINE,"Test start");
       
  1523     TEST (T,  987654328L, fixed,  -6, 0, ' ', "", "987*654328");
       
  1524     std_log(LOG_FILENAME_LINE,"Test end");
       
  1525     std_log(LOG_FILENAME_LINE,"Test start");
       
  1526     TEST (T, -987654328L, fixed,  -6, 0, ' ', "", "-987*654328");
       
  1527     std_log(LOG_FILENAME_LINE,"Test end");
       
  1528     std_log(LOG_FILENAME_LINE,"Test start");
       
  1529     TEST (T,  987654329L, fixed,  -7, 0, ' ', "", "98*7654329");
       
  1530     std_log(LOG_FILENAME_LINE,"Test end");
       
  1531     std_log(LOG_FILENAME_LINE,"Test start");
       
  1532     TEST (T, -987654329L, fixed,  -7, 0, ' ', "", "-98*7654329");
       
  1533     std_log(LOG_FILENAME_LINE,"Test end");
       
  1534     std_log(LOG_FILENAME_LINE,"Test start");
       
  1535     TEST (T,  987654330L, fixed,  -8, 0, ' ', "", "9*87654330");
       
  1536     std_log(LOG_FILENAME_LINE,"Test end");
       
  1537     std_log(LOG_FILENAME_LINE,"Test start");
       
  1538     TEST (T, -987654330L, fixed,  -8, 0, ' ', "", "-9*87654330");
       
  1539     std_log(LOG_FILENAME_LINE,"Test end");
       
  1540     std_log(LOG_FILENAME_LINE,"Test start");
       
  1541     TEST (T,  987654331L, fixed,  -9, 0, ' ', "", "0*987654331");
       
  1542     std_log(LOG_FILENAME_LINE,"Test end");
       
  1543     std_log(LOG_FILENAME_LINE,"Test start");
       
  1544     TEST (T, -987654331L, fixed,  -9, 0, ' ', "", "-0*987654331");
       
  1545     std_log(LOG_FILENAME_LINE,"Test end");
       
  1546     std_log(LOG_FILENAME_LINE,"Test start");
       
  1547     TEST (T,  987654332L, fixed, -10, 0, ' ', "", "0*0987654332");
       
  1548     std_log(LOG_FILENAME_LINE,"Test end");
       
  1549     std_log(LOG_FILENAME_LINE,"Test start");
       
  1550     TEST (T, -987654332L, fixed, -10, 0, ' ', "", "-0*0987654332");
       
  1551     std_log(LOG_FILENAME_LINE,"Test end");
       
  1552     std_log(LOG_FILENAME_LINE,"Test start");
       
  1553     TEST (T,  987654333L, fixed, -11, 0, ' ', "", "0*00987654333");
       
  1554     std_log(LOG_FILENAME_LINE,"Test end");
       
  1555     std_log(LOG_FILENAME_LINE,"Test start");
       
  1556     TEST (T, -987654333L, fixed, -11, 0, ' ', "", "-0*00987654333");
       
  1557     std_log(LOG_FILENAME_LINE,"Test end");
       
  1558     std_log(LOG_FILENAME_LINE,"Test start");
       
  1559     TEST (T,          0L, fixed, -12, 0, ' ', "", "0*000000000000");
       
  1560     std_log(LOG_FILENAME_LINE,"Test end");
       
  1561     std_log(LOG_FILENAME_LINE,"Test start");
       
  1562 
       
  1563     //////////////////////////////////////////////////////////////////
       
  1564 
       
  1565 // second group is the last group (i.e., prevent repetition)
       
  1566 #if CHAR_MAX == UCHAR_MAX
       
  1567 #  define GROUPING "\2\1\xff"
       
  1568 #else
       
  1569 #  define GROUPING "\2\1\x7f"
       
  1570 #endif
       
  1571     std_log(LOG_FILENAME_LINE,"Test start");
       
  1572     TEST (T,   123456789L, dec | left, 0, 0, ' ', GROUPING, "123456,7,89");
       
  1573     std_log(LOG_FILENAME_LINE,"Test end");
       
  1574     std_log(LOG_FILENAME_LINE,"Test start");
       
  1575     TEST (T,  -123456789L, dec | left, 0, 0, ' ', GROUPING, "-123456,7,89");
       
  1576 
       
  1577     std_log(LOG_FILENAME_LINE,"Test end");
       
  1578     
       
  1579 #undef GROUPING
       
  1580 
       
  1581 #if CHAR_MAX == UCHAR_MAX
       
  1582 #  define GROUPING "\2\3\xff"
       
  1583 #else
       
  1584 #  define GROUPING "\2\3\x7f"
       
  1585 #endif
       
  1586 std_log(LOG_FILENAME_LINE,"Test start");
       
  1587     TEST (T,   123456789L, dec | left, 0, 0, ' ', GROUPING, "1234,567,89");
       
  1588     std_log(LOG_FILENAME_LINE,"Test end");
       
  1589     std_log(LOG_FILENAME_LINE,"Test start");
       
  1590     TEST (T,  -123456789L, dec | left, 0, 0, ' ', GROUPING, "-1234,567,89");
       
  1591     std_log(LOG_FILENAME_LINE,"Test end");
       
  1592     std_log(LOG_FILENAME_LINE,"Test start");
       
  1593 
       
  1594     TEST (T,  0x12345678L, hex | showbase, 0, 0, ' ', GROUPING, "0x123,456,78");
       
  1595     std_log(LOG_FILENAME_LINE,"Test end");
       
  1596 
       
  1597 
       
  1598     //////////////////////////////////////////////////////////////////
       
  1599     // right justfication
       
  1600     rw_info (0, 0, __LINE__, "std::ios::right");
       
  1601     std_log(LOG_FILENAME_LINE,"Test start");
       
  1602     TEST (T,  1L,         dec | right, 0, 10, ' ', "", "         1");
       
  1603     std_log(LOG_FILENAME_LINE,"Test end");
       
  1604     std_log(LOG_FILENAME_LINE,"Test start");
       
  1605     TEST (T,  12L,        dec | right, 0, 10, ' ', "", "        12");
       
  1606     std_log(LOG_FILENAME_LINE,"Test end");
       
  1607     std_log(LOG_FILENAME_LINE,"Test start");
       
  1608     TEST (T,  123L,       dec | right, 0, 10, ' ', "", "       123");
       
  1609     std_log(LOG_FILENAME_LINE,"Test end");
       
  1610     std_log(LOG_FILENAME_LINE,"Test start");
       
  1611     TEST (T,  1234L,      dec | right, 0, 10, ' ', "", "      1234");
       
  1612     std_log(LOG_FILENAME_LINE,"Test end");
       
  1613     std_log(LOG_FILENAME_LINE,"Test start");
       
  1614     TEST (T,  12345L,     dec | right, 0, 10, ' ', "", "     12345");
       
  1615     std_log(LOG_FILENAME_LINE,"Test end");
       
  1616     std_log(LOG_FILENAME_LINE,"Test start");
       
  1617     TEST (T,  123456L,    dec | right, 0, 10, ' ', "", "    123456");
       
  1618     std_log(LOG_FILENAME_LINE,"Test end");
       
  1619     std_log(LOG_FILENAME_LINE,"Test start");
       
  1620     TEST (T,  1234567L,   dec | right, 0, 10, ' ', "", "   1234567");
       
  1621     std_log(LOG_FILENAME_LINE,"Test end");
       
  1622     std_log(LOG_FILENAME_LINE,"Test start");
       
  1623     TEST (T,  12345678L,  dec | right, 0, 10, ' ', "", "  12345678");
       
  1624     std_log(LOG_FILENAME_LINE,"Test end");
       
  1625     std_log(LOG_FILENAME_LINE,"Test start");
       
  1626     TEST (T,  123456789L, dec | right, 0, 10, ' ', "", " 123456789");
       
  1627     std_log(LOG_FILENAME_LINE,"Test end");
       
  1628     std_log(LOG_FILENAME_LINE,"Test start");
       
  1629     TEST (T,  123456789L, dec | right, 0, 10, '0', "", "0123456789");
       
  1630     std_log(LOG_FILENAME_LINE,"Test end");
       
  1631     std_log(LOG_FILENAME_LINE,"Test start");
       
  1632     TEST (T,  123456789L, dec | right, 0, 10, '+', "", "+123456789");
       
  1633     std_log(LOG_FILENAME_LINE,"Test end");
       
  1634     std_log(LOG_FILENAME_LINE,"Test start");
       
  1635     TEST (T,  123456789L, dec | right, 0, 10, '-', "", "-123456789");
       
  1636     std_log(LOG_FILENAME_LINE,"Test end");
       
  1637 
       
  1638 
       
  1639     // right justification, oct
       
  1640     std_log(LOG_FILENAME_LINE,"Test start");
       
  1641     TEST (T,  0L,         oct | right, 0, 10, ' ', "", "         0");
       
  1642     std_log(LOG_FILENAME_LINE,"Test end");
       
  1643     std_log(LOG_FILENAME_LINE,"Test start");
       
  1644     TEST (T,  01L,        oct | right, 0, 10, ' ', "", "         1");
       
  1645     std_log(LOG_FILENAME_LINE,"Test end");
       
  1646     std_log(LOG_FILENAME_LINE,"Test start");
       
  1647     TEST (T,  012L,       oct | right, 0, 10, ' ', "", "        12");
       
  1648     std_log(LOG_FILENAME_LINE,"Test end");
       
  1649     std_log(LOG_FILENAME_LINE,"Test start");
       
  1650     TEST (T,  0123L,      oct | right, 0, 10, ' ', "", "       123");
       
  1651     std_log(LOG_FILENAME_LINE,"Test end");
       
  1652     std_log(LOG_FILENAME_LINE,"Test start");
       
  1653     TEST (T,  01234L,     oct | right, 0, 10, ' ', "", "      1234");
       
  1654     std_log(LOG_FILENAME_LINE,"Test end");
       
  1655     std_log(LOG_FILENAME_LINE,"Test start");
       
  1656     TEST (T,  012345L,    oct | right, 0, 10, ' ', "", "     12345");
       
  1657     std_log(LOG_FILENAME_LINE,"Test end");
       
  1658     std_log(LOG_FILENAME_LINE,"Test start");
       
  1659     TEST (T,  0123456L,   oct | right, 0, 10, ' ', "", "    123456");
       
  1660     std_log(LOG_FILENAME_LINE,"Test end");
       
  1661     std_log(LOG_FILENAME_LINE,"Test start");
       
  1662     TEST (T,  01234567L,  oct | right, 0, 10, ' ', "", "   1234567");
       
  1663     std_log(LOG_FILENAME_LINE,"Test end");
       
  1664     std_log(LOG_FILENAME_LINE,"Test start");
       
  1665     TEST (T,  012345670L, oct | right, 0, 10, ' ', "", "  12345670");
       
  1666     std_log(LOG_FILENAME_LINE,"Test end");
       
  1667     std_log(LOG_FILENAME_LINE,"Test start");
       
  1668     TEST (T,  012345670L, oct | right, 0, 10, '1', "", "1112345670");
       
  1669 
       
  1670     std_log(LOG_FILENAME_LINE,"Test end");
       
  1671     std_log(LOG_FILENAME_LINE,"Test start");
       
  1672     // right justification with grouping
       
  1673     TEST (T,  0L,         oct | right, 0, 10, ' ', "\2",  "         0");
       
  1674     std_log(LOG_FILENAME_LINE,"Test end");
       
  1675     std_log(LOG_FILENAME_LINE,"Test start");
       
  1676     TEST (T,  01L,        oct | right, 0, 10, ' ', "\2",  "         1");
       
  1677     std_log(LOG_FILENAME_LINE,"Test end");
       
  1678     std_log(LOG_FILENAME_LINE,"Test start");
       
  1679     TEST (T,  012L,       oct | right, 0, 10, ' ', "\2",  "        12");
       
  1680     std_log(LOG_FILENAME_LINE,"Test end");
       
  1681     std_log(LOG_FILENAME_LINE,"Test start");
       
  1682     TEST (T,  0123L,      oct | right, 0, 10, ' ', "\2",  "      1,23");
       
  1683     std_log(LOG_FILENAME_LINE,"Test end");
       
  1684     std_log(LOG_FILENAME_LINE,"Test start");
       
  1685     TEST (T,  01234L,     oct | right, 0, 10, ' ', "\2",  "     12,34");
       
  1686     std_log(LOG_FILENAME_LINE,"Test end");
       
  1687     std_log(LOG_FILENAME_LINE,"Test start");
       
  1688     TEST (T,  012345L,    oct | right, 0, 10, ' ', "\2",  "   1,23,45");
       
  1689     std_log(LOG_FILENAME_LINE,"Test end");
       
  1690     std_log(LOG_FILENAME_LINE,"Test start");
       
  1691     TEST (T,  0123456L,   oct | right, 0, 10, ' ', "\2",  "  12,34,56");
       
  1692     std_log(LOG_FILENAME_LINE,"Test end");
       
  1693     std_log(LOG_FILENAME_LINE,"Test start");
       
  1694     TEST (T,  01234567L,  oct | right, 0, 10, ' ', "\2",  "1,23,45,67");
       
  1695     std_log(LOG_FILENAME_LINE,"Test end");
       
  1696     std_log(LOG_FILENAME_LINE,"Test start");
       
  1697     TEST (T,  012345670L, oct | right, 0, 10, ' ', "\2", "12,34,56,70");
       
  1698     std_log(LOG_FILENAME_LINE,"Test end");
       
  1699     std_log(LOG_FILENAME_LINE,"Test start");
       
  1700 
       
  1701 #undef FLAGS
       
  1702 #define flags   hex | showbase | internal
       
  1703 #define FLAGS   flags | uppercase
       
  1704 
       
  1705     // internal justfication, hex
       
  1706     rw_info (0, 0, __LINE__, "std::ios::internal");
       
  1707     TEST (T,  0X1L,        FLAGS, 0, 10, ' ', "", "0X       1");
       
  1708     std_log(LOG_FILENAME_LINE,"Test end");
       
  1709     std_log(LOG_FILENAME_LINE,"Test start");
       
  1710     TEST (T,  0x12L,       flags, 0, 10, ' ', "", "0x      12");
       
  1711     std_log(LOG_FILENAME_LINE,"Test end");
       
  1712     std_log(LOG_FILENAME_LINE,"Test start");
       
  1713     TEST (T,  0X123L,      FLAGS, 0, 10, ' ', "", "0X     123");
       
  1714     std_log(LOG_FILENAME_LINE,"Test end");
       
  1715     std_log(LOG_FILENAME_LINE,"Test start");
       
  1716     TEST (T,  0x1234L,     flags, 0, 10, ' ', "", "0x    1234");
       
  1717     std_log(LOG_FILENAME_LINE,"Test end");
       
  1718     std_log(LOG_FILENAME_LINE,"Test start");
       
  1719     TEST (T,  0X12345L,    FLAGS, 0, 10, ' ', "", "0X   12345");
       
  1720     std_log(LOG_FILENAME_LINE,"Test end");
       
  1721     std_log(LOG_FILENAME_LINE,"Test start");
       
  1722     TEST (T,  0x123abcL,   flags, 0, 10, ' ', "", "0x  123abc");
       
  1723     std_log(LOG_FILENAME_LINE,"Test end");
       
  1724     std_log(LOG_FILENAME_LINE,"Test start");
       
  1725     TEST (T,  0x123abcL,   flags, 0, 10, '0', "", "0x00123abc");
       
  1726     std_log(LOG_FILENAME_LINE,"Test end");
       
  1727     std_log(LOG_FILENAME_LINE,"Test start");
       
  1728     TEST (T,  0X1234ABCL,  FLAGS, 0, 10, ' ', "", "0X 1234ABC");
       
  1729     std_log(LOG_FILENAME_LINE,"Test end");
       
  1730     std_log(LOG_FILENAME_LINE,"Test start");
       
  1731     TEST (T,  0X12345678L, FLAGS, 0, 10, ' ', "", "0X12345678");
       
  1732     std_log(LOG_FILENAME_LINE,"Test end");
       
  1733     std_log(LOG_FILENAME_LINE,"Test start");
       
  1734     TEST (T,  0X12345678L, FLAGS, 0, 10, '0', "", "0X12345678");
       
  1735 
       
  1736     std_log(LOG_FILENAME_LINE,"Test end");
       
  1737     std_log(LOG_FILENAME_LINE,"Test start");
       
  1738     // internal justfication, hex, grouping
       
  1739     TEST (T,  0X1L,        FLAGS, 0, 10, ' ', "\1\2",     "0X       1");
       
  1740     std_log(LOG_FILENAME_LINE,"Test end");
       
  1741     std_log(LOG_FILENAME_LINE,"Test start");
       
  1742     TEST (T,  0x12L,       flags, 0, 10, ' ', "\1\2",     "0x     1,2");
       
  1743     std_log(LOG_FILENAME_LINE,"Test end");
       
  1744     std_log(LOG_FILENAME_LINE,"Test start");
       
  1745     TEST (T,  0X123L,      FLAGS, 0, 10, ' ', "\1\2",     "0X    12,3");
       
  1746     std_log(LOG_FILENAME_LINE,"Test end");
       
  1747     std_log(LOG_FILENAME_LINE,"Test start");
       
  1748     TEST (T,  0x1234L,     flags, 0, 10, ' ', "\1\2",     "0x  1,23,4");
       
  1749     std_log(LOG_FILENAME_LINE,"Test end");
       
  1750     std_log(LOG_FILENAME_LINE,"Test start");
       
  1751     TEST (T,  0X12345L,    FLAGS, 0, 10, ' ', "\1\2",     "0X 12,34,5");
       
  1752     std_log(LOG_FILENAME_LINE,"Test end");
       
  1753     std_log(LOG_FILENAME_LINE,"Test start");
       
  1754     TEST (T,  0X12345L,    FLAGS, 0, 10, ',', "\1\2",     "0X,12,34,5");
       
  1755     std_log(LOG_FILENAME_LINE,"Test end");
       
  1756     std_log(LOG_FILENAME_LINE,"Test start");
       
  1757     TEST (T,  0x123abcL,   flags, 0, 10, ' ', "\1\2",    "0x1,23,ab,c");
       
  1758     std_log(LOG_FILENAME_LINE,"Test end");
       
  1759     std_log(LOG_FILENAME_LINE,"Test start");
       
  1760     TEST (T,  0X1234ABCL,  FLAGS, 0, 10, ' ', "\1\2",   "0X12,34,AB,C");
       
  1761     std_log(LOG_FILENAME_LINE,"Test end");
       
  1762     std_log(LOG_FILENAME_LINE,"Test start");
       
  1763     TEST (T,  0X12345678L, FLAGS, 0, 10, ' ', "\1\2", "0X1,23,45,67,8");
       
  1764     std_log(LOG_FILENAME_LINE,"Test end");
       
  1765     std_log(LOG_FILENAME_LINE,"Test start");
       
  1766     TEST (T,  0X12345678L, FLAGS, 0, 10, '0', "\1\2", "0X1,23,45,67,8");
       
  1767     std_log(LOG_FILENAME_LINE,"Test end");
       
  1768 
       
  1769 
       
  1770 #undef flags
       
  1771 #undef FLAGS
       
  1772 #define FLAGS   dec | showpos | internal
       
  1773 
       
  1774     // internal justfication, signed dec
       
  1775 
       
  1776     std_log(LOG_FILENAME_LINE,"Test start");
       
  1777     TEST (T,   0L,         FLAGS, 0, 10, ' ', "", "+        0");
       
  1778     std_log(LOG_FILENAME_LINE,"Test end");
       
  1779     std_log(LOG_FILENAME_LINE,"Test start");
       
  1780     TEST (T,  -1L,         FLAGS, 0, 10, ' ', "", "-        1");
       
  1781     std_log(LOG_FILENAME_LINE,"Test end");
       
  1782     std_log(LOG_FILENAME_LINE,"Test start");
       
  1783     TEST (T,  +12L,        FLAGS, 0, 10, ' ', "", "+       12");
       
  1784     std_log(LOG_FILENAME_LINE,"Test end");
       
  1785     std_log(LOG_FILENAME_LINE,"Test start");
       
  1786     TEST (T,  -123L,       FLAGS, 0, 10, ' ', "", "-      123");
       
  1787     std_log(LOG_FILENAME_LINE,"Test end");
       
  1788     std_log(LOG_FILENAME_LINE,"Test start");
       
  1789     TEST (T,  +1234L,      FLAGS, 0, 10, ' ', "", "+     1234");
       
  1790     std_log(LOG_FILENAME_LINE,"Test end");
       
  1791     std_log(LOG_FILENAME_LINE,"Test start");
       
  1792     TEST (T,  -12345L,     FLAGS, 0, 10, ' ', "", "-    12345");
       
  1793     std_log(LOG_FILENAME_LINE,"Test end");
       
  1794     std_log(LOG_FILENAME_LINE,"Test start");
       
  1795     TEST (T,  +123456L,    FLAGS, 0, 10, ' ', "", "+   123456");
       
  1796     std_log(LOG_FILENAME_LINE,"Test end");
       
  1797     std_log(LOG_FILENAME_LINE,"Test start");
       
  1798     TEST (T,  -1234567L,   FLAGS, 0, 10, ' ', "", "-  1234567");
       
  1799     std_log(LOG_FILENAME_LINE,"Test end");
       
  1800     std_log(LOG_FILENAME_LINE,"Test start");
       
  1801     TEST (T,  +12345678L,  FLAGS, 0, 10, ' ', "", "+ 12345678");
       
  1802     std_log(LOG_FILENAME_LINE,"Test end");
       
  1803     std_log(LOG_FILENAME_LINE,"Test start");
       
  1804     TEST (T,  -123456789L, FLAGS, 0, 10, '0', "", "-123456789");
       
  1805     std_log(LOG_FILENAME_LINE,"Test end");
       
  1806     std_log(LOG_FILENAME_LINE,"Test start");
       
  1807 
       
  1808     TEST (T,  +1L,         FLAGS, 0, 10, '-', "", "+--------1");
       
  1809     std_log(LOG_FILENAME_LINE,"Test end");
       
  1810     std_log(LOG_FILENAME_LINE,"Test start");
       
  1811     TEST (T,  -12L,        FLAGS, 0, 10, '-', "", "--------12");
       
  1812     std_log(LOG_FILENAME_LINE,"Test end");
       
  1813     std_log(LOG_FILENAME_LINE,"Test start");
       
  1814     TEST (T,  +123L,       FLAGS, 0, 10, '+', "", "+++++++123");
       
  1815     std_log(LOG_FILENAME_LINE,"Test end");
       
  1816     std_log(LOG_FILENAME_LINE,"Test start");
       
  1817     TEST (T,  -1234L,      FLAGS, 0, 10, '+', "", "-+++++1234");
       
  1818     std_log(LOG_FILENAME_LINE,"Test end");
       
  1819     std_log(LOG_FILENAME_LINE,"Test start");
       
  1820     TEST (T,  +12345L,     FLAGS, 0, 10, '0', "", "+000012345");
       
  1821     std_log(LOG_FILENAME_LINE,"Test end");
       
  1822     std_log(LOG_FILENAME_LINE,"Test start");
       
  1823     TEST (T,  -123456L,    FLAGS, 0, 10, '1', "", "-111123456");
       
  1824     std_log(LOG_FILENAME_LINE,"Test end");
       
  1825     std_log(LOG_FILENAME_LINE,"Test start");
       
  1826     TEST (T,  +1234567L,   FLAGS, 0, 10, '2', "", "+221234567");
       
  1827     std_log(LOG_FILENAME_LINE,"Test end");
       
  1828     std_log(LOG_FILENAME_LINE,"Test start");
       
  1829     TEST (T,  -12345678L,  FLAGS, 0, 10, '3', "", "-312345678");
       
  1830     std_log(LOG_FILENAME_LINE,"Test end");
       
  1831     std_log(LOG_FILENAME_LINE,"Test start");
       
  1832     TEST (T,  +123456789L, FLAGS, 0, 10, '4', "", "+123456789");
       
  1833     std_log(LOG_FILENAME_LINE,"Test end");
       
  1834 
       
  1835 
       
  1836 #ifndef _RWSTD_NO_EXT_BIN_IO
       
  1837 
       
  1838     // bin
       
  1839     rw_info (0, 0, __LINE__, "std::ios::bin [extension]");
       
  1840 
       
  1841     std_log(LOG_FILENAME_LINE,"Test start");
       
  1842 
       
  1843     TEST (T,     0L, bin, 0, 16, '.', "\4", "...............0");
       
  1844     std_log(LOG_FILENAME_LINE,"Test end");
       
  1845     std_log(LOG_FILENAME_LINE,"Test start");
       
  1846     TEST (T,     1L, bin, 0, 16, '.', "\4", "...............1");
       
  1847     std_log(LOG_FILENAME_LINE,"Test end");
       
  1848     std_log(LOG_FILENAME_LINE,"Test start");
       
  1849     TEST (T,     2L, bin, 0, 16, '.', "\4", "..............10");
       
  1850     std_log(LOG_FILENAME_LINE,"Test end");
       
  1851     std_log(LOG_FILENAME_LINE,"Test start");
       
  1852     TEST (T,     3L, bin, 0, 16, '.', "\4", "..............11");
       
  1853     std_log(LOG_FILENAME_LINE,"Test end");
       
  1854     std_log(LOG_FILENAME_LINE,"Test start");
       
  1855     TEST (T,     4L, bin, 0, 16, '.', "\4", ".............100");
       
  1856     std_log(LOG_FILENAME_LINE,"Test end");
       
  1857     std_log(LOG_FILENAME_LINE,"Test start");
       
  1858     TEST (T,     5L, bin, 0, 16, '.', "\4", ".............101");
       
  1859     std_log(LOG_FILENAME_LINE,"Test end");
       
  1860     std_log(LOG_FILENAME_LINE,"Test start");
       
  1861     TEST (T,     6L, bin, 0, 16, '.', "\4", ".............110");
       
  1862     std_log(LOG_FILENAME_LINE,"Test end");
       
  1863     std_log(LOG_FILENAME_LINE,"Test start");
       
  1864     TEST (T,     7L, bin, 0, 16, '.', "\4", ".............111");
       
  1865     std_log(LOG_FILENAME_LINE,"Test end");
       
  1866     std_log(LOG_FILENAME_LINE,"Test start");
       
  1867     TEST (T,     8L, bin, 0, 16, '.', "\4", "............1000");
       
  1868     std_log(LOG_FILENAME_LINE,"Test end");
       
  1869     std_log(LOG_FILENAME_LINE,"Test start");
       
  1870     TEST (T,     9L, bin, 0, 16, '.', "\4", "............1001");
       
  1871     std_log(LOG_FILENAME_LINE,"Test end");
       
  1872     std_log(LOG_FILENAME_LINE,"Test start");
       
  1873     TEST (T,  0x0aL, bin, 0, 16, '.', "\4", "............1010");
       
  1874     std_log(LOG_FILENAME_LINE,"Test end");
       
  1875     std_log(LOG_FILENAME_LINE,"Test start");
       
  1876     TEST (T,  0x0bL, bin, 0, 16, '.', "\4", "............1011");
       
  1877     std_log(LOG_FILENAME_LINE,"Test end");
       
  1878     std_log(LOG_FILENAME_LINE,"Test start");
       
  1879     TEST (T,  0x0cL, bin, 0, 16, '.', "\4", "............1100");
       
  1880     std_log(LOG_FILENAME_LINE,"Test end");
       
  1881     std_log(LOG_FILENAME_LINE,"Test start");
       
  1882     TEST (T,  0x0dL, bin, 0, 16, '.', "\4", "............1101");
       
  1883     std_log(LOG_FILENAME_LINE,"Test end");
       
  1884     std_log(LOG_FILENAME_LINE,"Test start");
       
  1885     TEST (T,  0x0eL, bin, 0, 16, '.', "\4", "............1110");
       
  1886     std_log(LOG_FILENAME_LINE,"Test end");
       
  1887     std_log(LOG_FILENAME_LINE,"Test start");
       
  1888     TEST (T,  0x0fL, bin, 0, 16, '.', "\4", "............1111");
       
  1889     std_log(LOG_FILENAME_LINE,"Test end");
       
  1890     std_log(LOG_FILENAME_LINE,"Test start");
       
  1891 
       
  1892     TEST (T,  0xf0L, bin, 0, 16, '.', "\4", ".......1111,0000");
       
  1893     std_log(LOG_FILENAME_LINE,"Test end");
       
  1894     std_log(LOG_FILENAME_LINE,"Test start");
       
  1895     TEST (T,  0xf1L, bin, 0, 16, '.', "\4", ".......1111,0001");
       
  1896     std_log(LOG_FILENAME_LINE,"Test end");
       
  1897     std_log(LOG_FILENAME_LINE,"Test start");
       
  1898     TEST (T,  0xf2L, bin, 0, 16, '.', "\4", ".......1111,0010");
       
  1899     std_log(LOG_FILENAME_LINE,"Test end");
       
  1900     std_log(LOG_FILENAME_LINE,"Test start");
       
  1901     TEST (T,  0xf3L, bin, 0, 16, '.', "\4", ".......1111,0011");
       
  1902     std_log(LOG_FILENAME_LINE,"Test end");
       
  1903     std_log(LOG_FILENAME_LINE,"Test start");
       
  1904     TEST (T,  0xf4L, bin, 0, 16, '.', "\4", ".......1111,0100");
       
  1905     TEST (T,  0xf5L, bin, 0, 16, '.', "\4", ".......1111,0101");
       
  1906     std_log(LOG_FILENAME_LINE,"Test end");
       
  1907     std_log(LOG_FILENAME_LINE,"Test start");
       
  1908 
       
  1909     TEST (T,  0x12345678L, bin, 0, 0, '.', "\4",
       
  1910              "1,0010,0011,0100,0101,0110,0111,1000");
       
  1911     std_log(LOG_FILENAME_LINE,"Test end");
       
  1912     std_log(LOG_FILENAME_LINE,"Test start");
       
  1913 
       
  1914     TEST (T,  0xfedcba98L, bin, 0, 0, '\0', "\010",
       
  1915              "11111110,11011100,10111010,10011000");
       
  1916     std_log(LOG_FILENAME_LINE,"Test end");
       
  1917 
       
  1918 #endif   // _RWSTD_NO_EXT_BIN_IO
       
  1919 
       
  1920     // locale 3.0 extension
       
  1921 
       
  1922 #define BASE(n)   ((n)  << _RWSTD_IOS_BASEOFF)
       
  1923 
       
  1924     // bases 0 and 10 are both base 10
       
  1925     // base 1 is roman (values 1 through 4999)
       
  1926     // bases 2 through 36 are what they are
       
  1927     // anything else is unspecified
       
  1928 
       
  1929     rw_info (0, 0, __LINE__, "base 1 (Roman), and 2 through 36 [extension]");
       
  1930 
       
  1931     std_log(LOG_FILENAME_LINE,"Test start");
       
  1932 
       
  1933     TEST (T,    1234L, BASE ( 0), 0, 0, '\0', "",  "1234");
       
  1934     std_log(LOG_FILENAME_LINE,"Test end");
       
  1935     std_log(LOG_FILENAME_LINE,"Test start");
       
  1936     TEST (T,    1234L, BASE ( 1), 0, 0, '\0', "",  "mccxxxiv");
       
  1937     std_log(LOG_FILENAME_LINE,"Test end");
       
  1938     std_log(LOG_FILENAME_LINE,"Test start");
       
  1939     TEST (T,  0x1234L, BASE ( 2), 0, 0, '\0', "",  "1001000110100");
       
  1940     std_log(LOG_FILENAME_LINE,"Test end");
       
  1941     std_log(LOG_FILENAME_LINE,"Test start");
       
  1942 
       
  1943     TEST (T,   01234L, oct | BASE ( 8), 0, 0, '\0', "",  "1234");
       
  1944     std_log(LOG_FILENAME_LINE,"Test end");
       
  1945     std_log(LOG_FILENAME_LINE,"Test start");
       
  1946     TEST (T,    1234L, dec | BASE (10), 0, 0, '\0', "",  "1234");
       
  1947     std_log(LOG_FILENAME_LINE,"Test end");
       
  1948     std_log(LOG_FILENAME_LINE,"Test start");
       
  1949     TEST (T,  0x1234L, hex | BASE (16), 0, 0, '\0', "",  "1234");
       
  1950     std_log(LOG_FILENAME_LINE,"Test end");
       
  1951     std_log(LOG_FILENAME_LINE,"Test start");
       
  1952 
       
  1953     TEST (T,    1234L, BASE ( 2), 0, 0, '\0', "",  "10011010010");
       
  1954     std_log(LOG_FILENAME_LINE,"Test end");
       
  1955     std_log(LOG_FILENAME_LINE,"Test start");
       
  1956     TEST (T,    1234L, BASE ( 3), 0, 0, '\0', "",  "1200201");
       
  1957     std_log(LOG_FILENAME_LINE,"Test end");
       
  1958     std_log(LOG_FILENAME_LINE,"Test start");
       
  1959     TEST (T,    1234L, BASE ( 4), 0, 0, '\0', "",  "103102");
       
  1960     std_log(LOG_FILENAME_LINE,"Test end");
       
  1961     std_log(LOG_FILENAME_LINE,"Test start");
       
  1962     TEST (T,    1234L, BASE ( 5), 0, 0, '\0', "",  "14414");
       
  1963     std_log(LOG_FILENAME_LINE,"Test end");
       
  1964     std_log(LOG_FILENAME_LINE,"Test start");
       
  1965     TEST (T,    1234L, BASE ( 6), 0, 0, '\0', "",  "5414");
       
  1966     std_log(LOG_FILENAME_LINE,"Test end");
       
  1967     std_log(LOG_FILENAME_LINE,"Test start");
       
  1968     TEST (T,    1234L, BASE ( 7), 0, 0, '\0', "",  "3412");
       
  1969     std_log(LOG_FILENAME_LINE,"Test end");
       
  1970     std_log(LOG_FILENAME_LINE,"Test start");
       
  1971     TEST (T,    1234L, BASE ( 9), 0, 0, '\0', "",  "1621");
       
  1972 
       
  1973     std_log(LOG_FILENAME_LINE,"Test end");
       
  1974     std_log(LOG_FILENAME_LINE,"Test start");
       
  1975     TEST (T,    1234L, dec | BASE (10), 0, 0, '\0', "",  "1234");
       
  1976     std_log(LOG_FILENAME_LINE,"Test end");
       
  1977     std_log(LOG_FILENAME_LINE,"Test start");
       
  1978 
       
  1979     TEST (T,    1234L, BASE (11), 0, 0, '\0', "",  "a22");
       
  1980     std_log(LOG_FILENAME_LINE,"Test end");
       
  1981     std_log(LOG_FILENAME_LINE,"Test start");
       
  1982     TEST (T,    1234L, BASE (12), 0, 0, '\0', "",  "86a");
       
  1983     std_log(LOG_FILENAME_LINE,"Test end");
       
  1984     std_log(LOG_FILENAME_LINE,"Test start");
       
  1985     TEST (T,    1234L, BASE (13), 0, 0, '\0', "",  "73c");
       
  1986     std_log(LOG_FILENAME_LINE,"Test end");
       
  1987     std_log(LOG_FILENAME_LINE,"Test start");
       
  1988     TEST (T,    1234L, BASE (14), 0, 0, '\0', "",  "642");
       
  1989     std_log(LOG_FILENAME_LINE,"Test end");
       
  1990     std_log(LOG_FILENAME_LINE,"Test start");
       
  1991     TEST (T,    1234L, BASE (15), 0, 0, '\0', "",  "574");
       
  1992     std_log(LOG_FILENAME_LINE,"Test end");
       
  1993     std_log(LOG_FILENAME_LINE,"Test start");
       
  1994 
       
  1995     TEST (T,    1234L, hex | BASE (16), 0, 0, '\0', "",  "4d2");
       
  1996     std_log(LOG_FILENAME_LINE,"Test end");
       
  1997     std_log(LOG_FILENAME_LINE,"Test start");
       
  1998 
       
  1999     TEST (T,    1234L, BASE (17), 0, 0, '\0', "",  "44a");
       
  2000     std_log(LOG_FILENAME_LINE,"Test end");
       
  2001     std_log(LOG_FILENAME_LINE,"Test start");
       
  2002     TEST (T,    1234L, BASE (18), 0, 0, '\0', "",  "3ea");
       
  2003     std_log(LOG_FILENAME_LINE,"Test end");
       
  2004     std_log(LOG_FILENAME_LINE,"Test start");
       
  2005     TEST (T,    1234L, BASE (19), 0, 0, '\0', "",  "37i");
       
  2006     std_log(LOG_FILENAME_LINE,"Test end");
       
  2007     std_log(LOG_FILENAME_LINE,"Test start");
       
  2008     TEST (T,    1234L, BASE (20), 0, 0, '\0', "",  "31e");
       
  2009     std_log(LOG_FILENAME_LINE,"Test end");
       
  2010     std_log(LOG_FILENAME_LINE,"Test start");
       
  2011     TEST (T,    1234L, BASE (21), 0, 0, '\0', "",  "2gg");
       
  2012     std_log(LOG_FILENAME_LINE,"Test end");
       
  2013     std_log(LOG_FILENAME_LINE,"Test start");
       
  2014     TEST (T,    1234L, BASE (22), 0, 0, '\0', "",  "2c2");
       
  2015     std_log(LOG_FILENAME_LINE,"Test end");
       
  2016     std_log(LOG_FILENAME_LINE,"Test start");
       
  2017     TEST (T,    1234L, BASE (23), 0, 0, '\0', "",  "27f");
       
  2018     std_log(LOG_FILENAME_LINE,"Test end");
       
  2019     std_log(LOG_FILENAME_LINE,"Test start");
       
  2020     TEST (T,    1234L, BASE (24), 0, 0, '\0', "",  "23a");
       
  2021     std_log(LOG_FILENAME_LINE,"Test end");
       
  2022     std_log(LOG_FILENAME_LINE,"Test start");
       
  2023     TEST (T,    1234L, BASE (25), 0, 0, '\0', "",  "1o9");
       
  2024     std_log(LOG_FILENAME_LINE,"Test end");
       
  2025     std_log(LOG_FILENAME_LINE,"Test start");
       
  2026     TEST (T,    1234L, BASE (26), 0, 0, '\0', "",  "1lc");
       
  2027     std_log(LOG_FILENAME_LINE,"Test end");
       
  2028     std_log(LOG_FILENAME_LINE,"Test start");
       
  2029     TEST (T,    1234L, BASE (27), 0, 0, '\0', "",  "1ij");
       
  2030     std_log(LOG_FILENAME_LINE,"Test end");
       
  2031     std_log(LOG_FILENAME_LINE,"Test start");
       
  2032     TEST (T,    1234L, BASE (28), 0, 0, '\0', "",  "1g2");
       
  2033     std_log(LOG_FILENAME_LINE,"Test end");
       
  2034     std_log(LOG_FILENAME_LINE,"Test start");
       
  2035     TEST (T,    1234L, BASE (29), 0, 0, '\0', "",  "1dg");
       
  2036     std_log(LOG_FILENAME_LINE,"Test end");
       
  2037     std_log(LOG_FILENAME_LINE,"Test start");
       
  2038     TEST (T,    1234L, BASE (30), 0, 0, '\0', "",  "1b4");
       
  2039     std_log(LOG_FILENAME_LINE,"Test end");
       
  2040     std_log(LOG_FILENAME_LINE,"Test start");
       
  2041     TEST (T,    1234L, BASE (31), 0, 0, '\0', "",  "18p");
       
  2042     std_log(LOG_FILENAME_LINE,"Test end");
       
  2043     std_log(LOG_FILENAME_LINE,"Test start");
       
  2044     TEST (T,    1234L, BASE (32), 0, 0, '\0', "",  "16i");
       
  2045     std_log(LOG_FILENAME_LINE,"Test end");
       
  2046     std_log(LOG_FILENAME_LINE,"Test start");
       
  2047     TEST (T,    1234L, BASE (33), 0, 0, '\0', "",  "14d");
       
  2048     std_log(LOG_FILENAME_LINE,"Test end");
       
  2049     std_log(LOG_FILENAME_LINE,"Test start");
       
  2050     TEST (T,    1234L, BASE (34), 0, 0, '\0', "",  "12a");
       
  2051     std_log(LOG_FILENAME_LINE,"Test end");
       
  2052     std_log(LOG_FILENAME_LINE,"Test start");
       
  2053     TEST (T,    1234L, BASE (35), 0, 0, '\0', "",  "109");
       
  2054     std_log(LOG_FILENAME_LINE,"Test end");
       
  2055     std_log(LOG_FILENAME_LINE,"Test start");
       
  2056     TEST (T,    1234L, BASE (36), 0, 0, '\0', "",  "ya");
       
  2057     std_log(LOG_FILENAME_LINE,"Test end");
       
  2058     std_log(LOG_FILENAME_LINE,"Test start");
       
  2059 
       
  2060     // effect of non-empty grouping is unspecified
       
  2061     TEST (T,       0L, BASE (1), 0, 0, '\0', "",  "0");
       
  2062     std_log(LOG_FILENAME_LINE,"Test end");
       
  2063     std_log(LOG_FILENAME_LINE,"Test start");
       
  2064     TEST (T,       1L, BASE (1), 0, 0, '\0', "",  "i");
       
  2065     std_log(LOG_FILENAME_LINE,"Test end");
       
  2066     std_log(LOG_FILENAME_LINE,"Test start");
       
  2067 TEST (T,       2L, BASE (1), 0, 0, '\0', "",  "ii");
       
  2068     std_log(LOG_FILENAME_LINE,"Test end");
       
  2069     std_log(LOG_FILENAME_LINE,"Test start");
       
  2070     TEST (T,       3L, BASE (1), 0, 0, '\0', "",  "iii");
       
  2071     std_log(LOG_FILENAME_LINE,"Test end");
       
  2072     std_log(LOG_FILENAME_LINE,"Test start");
       
  2073     TEST (T,       4L, BASE (1), 0, 0, '\0', "",  "iv");
       
  2074     std_log(LOG_FILENAME_LINE,"Test end");
       
  2075     std_log(LOG_FILENAME_LINE,"Test start");
       
  2076     TEST (T,       5L, BASE (1), 0, 0, '\0', "",  "v");
       
  2077     std_log(LOG_FILENAME_LINE,"Test end");
       
  2078     std_log(LOG_FILENAME_LINE,"Test start");
       
  2079     TEST (T,       6L, BASE (1), 0, 0, '\0', "",  "vi");
       
  2080     std_log(LOG_FILENAME_LINE,"Test end");
       
  2081     std_log(LOG_FILENAME_LINE,"Test start");
       
  2082     TEST (T,       7L, BASE (1), 0, 0, '\0', "",  "vii");
       
  2083     std_log(LOG_FILENAME_LINE,"Test end");
       
  2084     std_log(LOG_FILENAME_LINE,"Test start");
       
  2085     TEST (T,       8L, BASE (1), 0, 0, '\0', "",  "viii");
       
  2086     std_log(LOG_FILENAME_LINE,"Test end");
       
  2087     std_log(LOG_FILENAME_LINE,"Test start");
       
  2088     TEST (T,       9L, BASE (1), 0, 0, '\0', "",  "ix");
       
  2089     std_log(LOG_FILENAME_LINE,"Test end");
       
  2090     std_log(LOG_FILENAME_LINE,"Test start");
       
  2091     TEST (T,      10L, BASE (1), 0, 0, '\0', "",  "x");
       
  2092     std_log(LOG_FILENAME_LINE,"Test end");
       
  2093     std_log(LOG_FILENAME_LINE,"Test start");
       
  2094     TEST (T,      50L, BASE (1), 0, 0, '\0', "",  "l");
       
  2095     std_log(LOG_FILENAME_LINE,"Test end");
       
  2096     std_log(LOG_FILENAME_LINE,"Test start");
       
  2097     TEST (T,     100L, BASE (1), 0, 0, '\0', "",  "c");
       
  2098     std_log(LOG_FILENAME_LINE,"Test end");
       
  2099     std_log(LOG_FILENAME_LINE,"Test start");
       
  2100     TEST (T,     500L, BASE (1), 0, 0, '\0', "",  "d");
       
  2101     std_log(LOG_FILENAME_LINE,"Test end");
       
  2102     std_log(LOG_FILENAME_LINE,"Test start");
       
  2103     TEST (T,    1000L, BASE (1), 0, 0, '\0', "",  "m");
       
  2104     std_log(LOG_FILENAME_LINE,"Test end");
       
  2105     std_log(LOG_FILENAME_LINE,"Test start");
       
  2106     TEST (T,      49L, BASE (1), 0, 0, '\0', "",  "xlix");
       
  2107     std_log(LOG_FILENAME_LINE,"Test end");
       
  2108     std_log(LOG_FILENAME_LINE,"Test start");
       
  2109     TEST (T,      88L, BASE (1), 0, 0, '\0', "",  "lxxxviii");
       
  2110     std_log(LOG_FILENAME_LINE,"Test end");
       
  2111     std_log(LOG_FILENAME_LINE,"Test start");
       
  2112     TEST (T,      99L, BASE (1), 0, 0, '\0', "",  "xcix");
       
  2113     std_log(LOG_FILENAME_LINE,"Test end");
       
  2114     std_log(LOG_FILENAME_LINE,"Test start");
       
  2115     TEST (T,    1999L, BASE (1), 0, 0, '\0', "",  "mcmxcix");
       
  2116     std_log(LOG_FILENAME_LINE,"Test end");
       
  2117     std_log(LOG_FILENAME_LINE,"Test start");
       
  2118     TEST (T,    2000L, BASE (1), 0, 0, '\0', "",  "mm");
       
  2119     std_log(LOG_FILENAME_LINE,"Test end");
       
  2120     std_log(LOG_FILENAME_LINE,"Test start");
       
  2121     TEST (T,    2001L, BASE (1), 0, 0, '\0', "",  "mmi");
       
  2122     std_log(LOG_FILENAME_LINE,"Test end");
       
  2123     std_log(LOG_FILENAME_LINE,"Test start");
       
  2124     TEST (T,    4999L, BASE (1), 0, 0, '\0', "",  "mmmmcmxcix");
       
  2125     std_log(LOG_FILENAME_LINE,"Test end");
       
  2126     std_log(LOG_FILENAME_LINE,"Test start");
       
  2127     TEST (T,    5000L, BASE (1), 0, 0, '\0', "",  "5000");
       
  2128     std_log(LOG_FILENAME_LINE,"Test end");
       
  2129     std_log(LOG_FILENAME_LINE,"Test start");
       
  2130 
       
  2131     TEST (T,    1492L, BASE (1), 0, 10, '*', "",  "***mcdxcii");
       
  2132     std_log(LOG_FILENAME_LINE,"Test end");
       
  2133     std_log(LOG_FILENAME_LINE,"Test start");
       
  2134 
       
  2135     TEST (T,  1776L, BASE (1) | uppercase, 0, 0, '\0', "", "MDCCLXXVI");
       
  2136     std_log(LOG_FILENAME_LINE,"Test end");
       
  2137 
       
  2138 }
       
  2139 
       
  2140 
       
  2141 /**************************************************************************/
       
  2142 
       
  2143 template <class charT>
       
  2144 void ulong_test (charT, const char *cname)
       
  2145 {
       
  2146     const char* const tname = "unsigned long";
       
  2147 
       
  2148     rw_info (0, 0, __LINE__, "std::num_put<%s>::put (..., %s)", cname, tname);
       
  2149 
       
  2150     typedef unsigned long ULong;
       
  2151 
       
  2152     //////////////////////////////////////////////////////////////////
       
  2153     rw_info (0, 0, __LINE__, "std::ios::dec");
       
  2154 
       
  2155     std_log(LOG_FILENAME_LINE,"Test start");
       
  2156 
       
  2157     TEST (T,              0UL,  dec, 0, 0, ' ', "", "%lu");
       
  2158     std_log(LOG_FILENAME_LINE,"Test end");
       
  2159     std_log(LOG_FILENAME_LINE,"Test start");
       
  2160     TEST (T, ULong (LONG_MAX),  dec, 0, 0, ' ', "", "%lu");
       
  2161 
       
  2162     std_log(LOG_FILENAME_LINE,"Test end");
       
  2163     std_log(LOG_FILENAME_LINE,"Test start");
       
  2164     rw_info (0, 0, __LINE__, "std::ios::dec | std::ios::shopos");
       
  2165     TEST (T,              0UL,  dec | showpos, 0, 0, ' ', "", "%+lu");
       
  2166     std_log(LOG_FILENAME_LINE,"Test end");
       
  2167     std_log(LOG_FILENAME_LINE,"Test start");
       
  2168 
       
  2169     TEST (T,              1UL,  dec | showpos, 0, 0, ' ', "", "%+lu");
       
  2170     std_log(LOG_FILENAME_LINE,"Test end");
       
  2171     std_log(LOG_FILENAME_LINE,"Test start");
       
  2172     TEST (T, ULong (LONG_MAX),  dec | showpos, 0, 0, ' ', "", "%+lu");
       
  2173     std_log(LOG_FILENAME_LINE,"Test end");
       
  2174     std_log(LOG_FILENAME_LINE,"Test start");
       
  2175 
       
  2176     //////////////////////////////////////////////////////////////////
       
  2177     rw_info (0, 0, __LINE__, "std::ios::oct");
       
  2178 
       
  2179     TEST (T, ULong (CHAR_MAX),  oct, 0, 0, ' ', "", "%lo");
       
  2180     std_log(LOG_FILENAME_LINE,"Test end");
       
  2181     std_log(LOG_FILENAME_LINE,"Test start");
       
  2182     TEST (T, ULong (UCHAR_MAX), oct, 0, 0, ' ', "", "%lo");
       
  2183     std_log(LOG_FILENAME_LINE,"Test end");
       
  2184     std_log(LOG_FILENAME_LINE,"Test start");
       
  2185     TEST (T, ULong (SCHAR_MAX), oct, 0, 0, ' ', "", "%lo");
       
  2186     std_log(LOG_FILENAME_LINE,"Test end");
       
  2187     std_log(LOG_FILENAME_LINE,"Test start");
       
  2188     TEST (T, ULong (SHRT_MAX),  oct, 0, 0, ' ', "", "%lo");
       
  2189     std_log(LOG_FILENAME_LINE,"Test end");
       
  2190     std_log(LOG_FILENAME_LINE,"Test start");
       
  2191     TEST (T, ULong (USHRT_MAX), oct, 0, 0, ' ', "", "%lo");
       
  2192     std_log(LOG_FILENAME_LINE,"Test end");
       
  2193     std_log(LOG_FILENAME_LINE,"Test start");
       
  2194     TEST (T, ULong (INT_MAX),   oct, 0, 0, ' ', "", "%lo");
       
  2195     std_log(LOG_FILENAME_LINE,"Test end");
       
  2196     std_log(LOG_FILENAME_LINE,"Test start");
       
  2197     TEST (T, ULong (UINT_MAX),  oct, 0, 0, ' ', "", "%lo");
       
  2198     std_log(LOG_FILENAME_LINE,"Test end");
       
  2199     std_log(LOG_FILENAME_LINE,"Test start");
       
  2200     TEST (T, ULong (LONG_MAX),  oct, 0, 0, ' ', "", "%lo");
       
  2201     std_log(LOG_FILENAME_LINE,"Test end");
       
  2202     std_log(LOG_FILENAME_LINE,"Test start");
       
  2203 
       
  2204     TEST (T, ULong (CHAR_MIN),  oct, 0, 0, ' ', "", "%lo");
       
  2205     std_log(LOG_FILENAME_LINE,"Test end");
       
  2206     std_log(LOG_FILENAME_LINE,"Test start");
       
  2207     TEST (T, ULong (SCHAR_MIN), oct, 0, 0, ' ', "", "%lo");
       
  2208     std_log(LOG_FILENAME_LINE,"Test end");
       
  2209     std_log(LOG_FILENAME_LINE,"Test start");
       
  2210     TEST (T, ULong (SHRT_MIN),  oct, 0, 0, ' ', "", "%lo");
       
  2211     std_log(LOG_FILENAME_LINE,"Test end");
       
  2212     std_log(LOG_FILENAME_LINE,"Test start");
       
  2213     TEST (T, ULong (INT_MIN),   oct, 0, 0, ' ', "", "%lo");
       
  2214     std_log(LOG_FILENAME_LINE,"Test end");
       
  2215     std_log(LOG_FILENAME_LINE,"Test start");
       
  2216     TEST (T, ULong (LONG_MIN),  oct, 0, 0, ' ', "", "%lo");
       
  2217     std_log(LOG_FILENAME_LINE,"Test end");
       
  2218     std_log(LOG_FILENAME_LINE,"Test start");
       
  2219 
       
  2220     // no overflow
       
  2221     TEST (T,               1UL, oct, 0, 0, ' ', "", "%lo");
       
  2222     std_log(LOG_FILENAME_LINE,"Test end");
       
  2223     std_log(LOG_FILENAME_LINE,"Test start");
       
  2224     TEST (T,              ~0UL, oct, 0, 0, ' ', "", "%lo");
       
  2225     std_log(LOG_FILENAME_LINE,"Test end");
       
  2226     std_log(LOG_FILENAME_LINE,"Test start");
       
  2227     TEST (T, ULong (ULONG_MAX), oct, 0, 0, ' ', "", "%lo");
       
  2228     std_log(LOG_FILENAME_LINE,"Test end");
       
  2229     
       
  2230 
       
  2231     //////////////////////////////////////////////////////////////////
       
  2232     rw_info (0, 0, __LINE__, "std::ios::hex");
       
  2233     std_log(LOG_FILENAME_LINE,"Test start");
       
  2234     TEST (T, ULong (CHAR_MAX),  hex, 0, 0, ' ', "", "%lx");
       
  2235     std_log(LOG_FILENAME_LINE,"Test end");
       
  2236     std_log(LOG_FILENAME_LINE,"Test start");
       
  2237     TEST (T, ULong (UCHAR_MAX), hex, 0, 0, ' ', "", "%lx");
       
  2238     std_log(LOG_FILENAME_LINE,"Test end");
       
  2239     std_log(LOG_FILENAME_LINE,"Test start");
       
  2240     TEST (T, ULong (SCHAR_MAX), hex, 0, 0, ' ', "", "%lx");
       
  2241     std_log(LOG_FILENAME_LINE,"Test end");
       
  2242     std_log(LOG_FILENAME_LINE,"Test start");
       
  2243     TEST (T, ULong (SHRT_MAX),  hex, 0, 0, ' ', "", "%lx");
       
  2244     std_log(LOG_FILENAME_LINE,"Test end");
       
  2245     std_log(LOG_FILENAME_LINE,"Test start");
       
  2246     TEST (T, ULong (USHRT_MAX), hex, 0, 0, ' ', "", "%lx");
       
  2247     std_log(LOG_FILENAME_LINE,"Test end");
       
  2248     std_log(LOG_FILENAME_LINE,"Test start");
       
  2249     TEST (T, ULong (INT_MAX),   hex, 0, 0, ' ', "", "%lx");
       
  2250     std_log(LOG_FILENAME_LINE,"Test end");
       
  2251     std_log(LOG_FILENAME_LINE,"Test start");
       
  2252     TEST (T, ULong (UINT_MAX),  hex, 0, 0, ' ', "", "%lx");
       
  2253     std_log(LOG_FILENAME_LINE,"Test end");
       
  2254     std_log(LOG_FILENAME_LINE,"Test start");
       
  2255     TEST (T, ULong (LONG_MAX),  hex, 0, 0, ' ', "", "%lx");
       
  2256     std_log(LOG_FILENAME_LINE,"Test end");
       
  2257     std_log(LOG_FILENAME_LINE,"Test start");
       
  2258 
       
  2259     TEST (T, ULong (CHAR_MIN),  hex, 0, 0, ' ', "", "%lx");
       
  2260     std_log(LOG_FILENAME_LINE,"Test end");
       
  2261     std_log(LOG_FILENAME_LINE,"Test start");
       
  2262     TEST (T, ULong (SCHAR_MIN), hex, 0, 0, ' ', "", "%lx");
       
  2263     std_log(LOG_FILENAME_LINE,"Test end");
       
  2264     std_log(LOG_FILENAME_LINE,"Test start");
       
  2265     TEST (T, ULong (SHRT_MIN),  hex, 0, 0, ' ', "", "%lx");
       
  2266     std_log(LOG_FILENAME_LINE,"Test end");
       
  2267     std_log(LOG_FILENAME_LINE,"Test start");
       
  2268     TEST (T, ULong (INT_MIN),   hex, 0, 0, ' ', "", "%lx");
       
  2269     std_log(LOG_FILENAME_LINE,"Test end");
       
  2270     std_log(LOG_FILENAME_LINE,"Test start");
       
  2271     TEST (T, ULong (LONG_MIN),  hex, 0, 0, ' ', "", "%lx");
       
  2272     std_log(LOG_FILENAME_LINE,"Test end");
       
  2273     std_log(LOG_FILENAME_LINE,"Test start");
       
  2274 
       
  2275     TEST (T,               1UL, hex, 0, 0, ' ', "", "%lx");
       
  2276     std_log(LOG_FILENAME_LINE,"Test end");
       
  2277     std_log(LOG_FILENAME_LINE,"Test start");
       
  2278     TEST (T,              ~0UL, hex, 0, 0, ' ', "", "%lx");
       
  2279     std_log(LOG_FILENAME_LINE,"Test end");
       
  2280     std_log(LOG_FILENAME_LINE,"Test start");
       
  2281     TEST (T, ULong (ULONG_MAX), hex, 0, 0, ' ', "", "%lx");
       
  2282     std_log(LOG_FILENAME_LINE,"Test end");
       
  2283 
       
  2284 }
       
  2285 
       
  2286 
       
  2287 /**************************************************************************/
       
  2288 
       
  2289 template <class charT>
       
  2290 void llong_test (charT, const char *cname)
       
  2291 {
       
  2292 #ifdef _RWSTD_LONG_LONG
       
  2293 
       
  2294     const char* const tname = "long long";
       
  2295 
       
  2296     rw_info (0, 0, 0, "std::num_put<%s>::put (..., %s)", cname, tname);
       
  2297 
       
  2298 #  define STDIO_FMAT   "%" _RWSTD_LLONG_PRINTF_PREFIX "d"
       
  2299 
       
  2300 #  ifndef _MSC_VER
       
  2301 #    define LL(number)   number ## LL
       
  2302 #  else   // if defined (_MSC_VER)
       
  2303      // MSVC 7.0 doesn't recognize the LL suffix
       
  2304 #    define LL(number)   number ## I64
       
  2305 #  endif   // _MSC_VER
       
  2306     std_log(LOG_FILENAME_LINE,"Test start");
       
  2307     TEST (T,          LL (0), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2308     std_log(LOG_FILENAME_LINE,"Test end");
       
  2309     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2310     TEST (T,          LL (1), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2311     std_log(LOG_FILENAME_LINE,"Test end");
       
  2312     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2313     TEST (T,         LL (21), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2314     std_log(LOG_FILENAME_LINE,"Test end");
       
  2315     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2316     TEST (T,        LL (321), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2317     std_log(LOG_FILENAME_LINE,"Test end");
       
  2318     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2319     TEST (T,       LL (4321), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2320     std_log(LOG_FILENAME_LINE,"Test end");
       
  2321     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2322     TEST (T,      LL (54321), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2323     std_log(LOG_FILENAME_LINE,"Test end");
       
  2324     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2325     TEST (T,     LL (654321), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2326     std_log(LOG_FILENAME_LINE,"Test end");
       
  2327     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2328     TEST (T,    LL (7654321), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2329     std_log(LOG_FILENAME_LINE,"Test end");
       
  2330     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2331     TEST (T,   LL (87654321), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2332     std_log(LOG_FILENAME_LINE,"Test end");
       
  2333     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2334     TEST (T,  LL (987654321), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2335     std_log(LOG_FILENAME_LINE,"Test end");
       
  2336     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2337 
       
  2338     TEST (T,         ~LL (0), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2339     std_log(LOG_FILENAME_LINE,"Test end");
       
  2340     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2341     TEST (T,         -LL (1), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2342     std_log(LOG_FILENAME_LINE,"Test end");
       
  2343     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2344     TEST (T,        -LL (21), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2345     std_log(LOG_FILENAME_LINE,"Test end");
       
  2346     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2347     TEST (T,       -LL (321), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2348     std_log(LOG_FILENAME_LINE,"Test end");
       
  2349     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2350     TEST (T,      -LL (4321), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2351     std_log(LOG_FILENAME_LINE,"Test end");
       
  2352     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2353     TEST (T,     -LL (54321), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2354     std_log(LOG_FILENAME_LINE,"Test end");
       
  2355     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2356     TEST (T,    -LL (654321), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2357     std_log(LOG_FILENAME_LINE,"Test end");
       
  2358     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2359     TEST (T,   -LL (7654321), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2360     std_log(LOG_FILENAME_LINE,"Test end");
       
  2361     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2362     TEST (T,  -LL (87654321), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2363     std_log(LOG_FILENAME_LINE,"Test end");
       
  2364     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2365     TEST (T, -LL (987654321), dec, 0, 0, ' ', "", STDIO_FMAT);
       
  2366     std_log(LOG_FILENAME_LINE,"Test end");
       
  2367 
       
  2368 
       
  2369 #undef FLAGS
       
  2370 #define FLAGS   hex | showbase | internal
       
  2371 
       
  2372 #undef OPTS
       
  2373 #define OPTS   FLAGS, 0, 20, ' ', "\1\2\3\4\1\2\3\4"
       
  2374 
       
  2375     // internal justfication, hex format, grouping
       
  2376     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2377     TEST (T, LL (0),                  OPTS,     "                   0");
       
  2378     std_log(LOG_FILENAME_LINE,"Test end");
       
  2379     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2380     TEST (T, LL (0x1),                OPTS,     "0x                 1");
       
  2381     std_log(LOG_FILENAME_LINE,"Test end");
       
  2382     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2383     TEST (T, LL (0x12),               OPTS,     "0x               1,2");
       
  2384     std_log(LOG_FILENAME_LINE,"Test end");
       
  2385     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2386     TEST (T, LL (0x123),              OPTS,     "0x              12,3");
       
  2387     std_log(LOG_FILENAME_LINE,"Test end");
       
  2388     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2389     TEST (T, LL (0x1234),             OPTS,     "0x            1,23,4");
       
  2390     std_log(LOG_FILENAME_LINE,"Test end");
       
  2391     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2392     TEST (T, LL (0x12345),            OPTS,     "0x           12,34,5");
       
  2393     std_log(LOG_FILENAME_LINE,"Test end");
       
  2394     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2395     TEST (T, LL (0x123456),           OPTS,     "0x          123,45,6");
       
  2396     std_log(LOG_FILENAME_LINE,"Test end");
       
  2397     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2398     TEST (T, LL (0x1234567),          OPTS,     "0x        1,234,56,7");
       
  2399     std_log(LOG_FILENAME_LINE,"Test end");
       
  2400     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2401     TEST (T, LL (0x12345678),         OPTS,     "0x       12,345,67,8");
       
  2402     std_log(LOG_FILENAME_LINE,"Test end");
       
  2403     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2404     TEST (T, LL (0x123456789),        OPTS,     "0x      123,456,78,9");
       
  2405     std_log(LOG_FILENAME_LINE,"Test end");
       
  2406     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2407     TEST (T, LL (0x123456789a),       OPTS,     "0x     1234,567,89,a");
       
  2408     std_log(LOG_FILENAME_LINE,"Test end");
       
  2409     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2410     TEST (T, LL (0x123456789ab),      OPTS,     "0x   1,2345,678,9a,b");
       
  2411     std_log(LOG_FILENAME_LINE,"Test end");
       
  2412     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2413     TEST (T, LL (0x123456789abc),     OPTS,     "0x 1,2,3456,789,ab,c");
       
  2414     std_log(LOG_FILENAME_LINE,"Test end");
       
  2415     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2416     TEST (T, LL (0x123456789abcd),    OPTS,     "0x12,3,4567,89a,bc,d");
       
  2417     std_log(LOG_FILENAME_LINE,"Test end");
       
  2418     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2419     TEST (T, LL (0x123456789abcde),   OPTS,   "0x1,23,4,5678,9ab,cd,e");
       
  2420     std_log(LOG_FILENAME_LINE,"Test end");
       
  2421     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2422     TEST (T, LL (0x123456789abcdef),  OPTS,  "0x12,34,5,6789,abc,de,f");
       
  2423     std_log(LOG_FILENAME_LINE,"Test end");
       
  2424     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2425     TEST (T, LL (0x123456789abcdef0), OPTS, "0x123,45,6,789a,bcd,ef,0");
       
  2426     std_log(LOG_FILENAME_LINE,"Test end");
       
  2427 
       
  2428 
       
  2429 #endif   // _RWSTD_LONG_LONG
       
  2430 }
       
  2431 
       
  2432 
       
  2433 /**************************************************************************/
       
  2434 
       
  2435 template <class charT>
       
  2436 void ullong_test (charT, const char *cname)
       
  2437 {
       
  2438 #ifdef _RWSTD_LONG_LONG
       
  2439 
       
  2440     const char* const tname = "unsigned long long";
       
  2441 
       
  2442     rw_info (0, 0, 0, "std::num_put<%s>::put (..., %s)", cname, tname);
       
  2443 
       
  2444 #endif   // _RWSTD_LONG_LONG
       
  2445 }
       
  2446 
       
  2447 
       
  2448 /**************************************************************************/
       
  2449 
       
  2450 template <class charT>
       
  2451 void dbl_test (charT, const char *cname)
       
  2452 {
       
  2453     const char* const tname = "double";
       
  2454 
       
  2455     rw_info (0, 0, 0, "std::num_put<%s>::put (..., %s)", cname, tname);
       
  2456 
       
  2457     Punct<charT>::decimal_point_ = '.';
       
  2458 
       
  2459     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2460 
       
  2461     TEST (T,  0.0, 0, 0, 0, ' ', "", "%g");
       
  2462     std_log(LOG_FILENAME_LINE,"Test end");
       
  2463     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2464     TEST (T, -0.0, 0, 0, 0, ' ', "", "%g");
       
  2465     std_log(LOG_FILENAME_LINE,"Test end");
       
  2466     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2467     TEST (T,  1.0, 0, 0, 0, ' ', "", "%g");
       
  2468     std_log(LOG_FILENAME_LINE,"Test end");
       
  2469     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2470     TEST (T,  1.0, 0, 0, 0, ' ', "", "1");
       
  2471     std_log(LOG_FILENAME_LINE,"Test end");
       
  2472     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2473     TEST (T, -1.0, 0, 0, 0, ' ', "", "%g");
       
  2474     std_log(LOG_FILENAME_LINE,"Test end");
       
  2475     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2476     TEST (T, -1.0, 0, 0, 0, ' ', "", "-1");
       
  2477     std_log(LOG_FILENAME_LINE,"Test end");
       
  2478     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2479     TEST (T,  1.1, 0, 0, 0, ' ', "", "%g");
       
  2480     std_log(LOG_FILENAME_LINE,"Test end");
       
  2481     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2482     TEST (T,  1.1, 0, 0, 0, ' ', "", "1.1");
       
  2483     std_log(LOG_FILENAME_LINE,"Test end");
       
  2484     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2485     TEST (T, -1.1, 0, 0, 0, ' ', "", "%g");
       
  2486     std_log(LOG_FILENAME_LINE,"Test end");
       
  2487     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2488     TEST (T, -1.1, 0, 0, 0, ' ', "", "-1.1");
       
  2489     std_log(LOG_FILENAME_LINE,"Test end");
       
  2490     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2491 
       
  2492 
       
  2493     // exercise formatting of very large numbers in a fixed notation
       
  2494     // using '+' as the fill character to disable num_get tests
       
  2495     TEST (T, 1.0e+128, fixed, 0, 0, '+', "", "%.0f", Eof);
       
  2496     std_log(LOG_FILENAME_LINE,"Test end");
       
  2497     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2498     TEST (T, 1.0e+256, fixed, 0, 0, '+', "", "%.0f", Eof);
       
  2499     std_log(LOG_FILENAME_LINE,"Test end");
       
  2500 
       
  2501 
       
  2502 
       
  2503 #undef CAT
       
  2504 #undef CONCAT
       
  2505 
       
  2506 #define CAT(a, b)      CONCAT (a, b)
       
  2507 #define CONCAT(a, b)   a ## b
       
  2508 
       
  2509     const double d = CAT (1.0e+, _RWSTD_DBL_MAX_10_EXP);
       
  2510     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2511     TEST (T, d, fixed, 0, 0, '+', "", "%.0f", Eof);
       
  2512     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2513 
       
  2514 
       
  2515     {
       
  2516         char stdiofmt [8];
       
  2517         const std::streamsize prec = std::streamsize (DBL_DIG + 3);
       
  2518         std::sprintf (stdiofmt, "%%.%dg", int (prec));
       
  2519         std_log(LOG_FILENAME_LINE,"Test start");    
       
  2520         TEST (T, DBL_MIN, 0, prec, 0, ' ', "", stdiofmt);
       
  2521     std_log(LOG_FILENAME_LINE,"Test end");
       
  2522     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2523         TEST (T, DBL_MAX, 0, prec, 0, ' ', "", stdiofmt);
       
  2524     std_log(LOG_FILENAME_LINE,"Test end");
       
  2525 
       
  2526     }
       
  2527 
       
  2528     if (1) {
       
  2529 #if 0    
       
  2530         // verify that the global LC_NUMERIC setting has no impact on the facet
       
  2531         for (const char *name = rw_locales (LC_NUMERIC, 0); *name;
       
  2532              name += std::strlen (name) + 1) {
       
  2533 
       
  2534             // find the first locale whose decimal_point character
       
  2535             // is different than in the classic C locale (i.e., than '.')
       
  2536             if (0 == std::setlocale (LC_NUMERIC, name))
       
  2537                 continue;
       
  2538 
       
  2539             const std::lconv* const conv = std::localeconv ();
       
  2540 
       
  2541             if (!conv)
       
  2542                 continue;
       
  2543 
       
  2544             if (conv->decimal_point && '.' != *conv->decimal_point)
       
  2545                 break;
       
  2546         }
       
  2547 #endif
       
  2548 
       
  2549         Punct<charT>::decimal_point_ = '*';
       
  2550         Punct<charT>::thousands_sep_ = '/';
       
  2551 
       
  2552     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2553 
       
  2554         TEST (T, 12345.678900, fixed, 6, 0, ' ', "\000", "12345*678900");
       
  2555     std_log(LOG_FILENAME_LINE,"Test end");
       
  2556     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2557         TEST (T, 123456.78900, fixed, 5, 0, ' ', "\002", "12/34/56*78900");
       
  2558     std_log(LOG_FILENAME_LINE,"Test end");
       
  2559     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2560         TEST (T, 1234567.8900, fixed, 4, 0, ' ', "\003", "1/234/567*8900");
       
  2561     std_log(LOG_FILENAME_LINE,"Test end");
       
  2562     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2563 
       
  2564         Punct<charT>::decimal_point_ = '.';
       
  2565 
       
  2566         TEST (T, 12345678.900, fixed, 3, 0, ' ', "\004", "1234/5678.900");
       
  2567     std_log(LOG_FILENAME_LINE,"Test end");
       
  2568 
       
  2569 
       
  2570         // reset the global locale
       
  2571         std::setlocale (LC_NUMERIC, "C");
       
  2572     }
       
  2573 }
       
  2574 
       
  2575 
       
  2576 /**************************************************************************/
       
  2577 
       
  2578 template <class charT>
       
  2579 void ldbl_test (charT, const char *cname)
       
  2580 {
       
  2581 #ifndef _RWSTD_NO_LONG_DOUBLE
       
  2582 
       
  2583     const char* const tname = "long double";
       
  2584 
       
  2585     rw_info (0, 0, 0, "std::num_put<%s>::put (..., %s) "
       
  2586              "[sizeof (long double) = %u]",
       
  2587              cname, tname, sizeof (long double));
       
  2588 
       
  2589     typedef long double LDbl;
       
  2590 
       
  2591     Punct<charT>::decimal_point_ = '.';
       
  2592     
       
  2593     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2594     TEST (T,     0.0L, 0, 0, 0, ' ', "", "%Lg");
       
  2595     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2596     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2597     TEST (T,     1.0L, 0, 0, 0, ' ', "", "%Lg");
       
  2598     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2599     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2600     TEST (T,     2.1L, 0, 0, 0, ' ', "", "%Lg");
       
  2601     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2602     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2603     TEST (T,    -3.2L, 0, 0, 0, ' ', "", "%Lg");
       
  2604     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2605     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2606     TEST (T,    -4.3L, 0, 0, 0, ' ', "", "%Lg");
       
  2607     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2608     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2609 
       
  2610     TEST (T, 1.0e+10L, 0, 0, 0, ' ', "", "%Lg");
       
  2611     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2612     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2613     TEST (T, 2.0e+20L, 0, 0, 0, ' ', "", "%Lg");
       
  2614     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2615     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2616     TEST (T, 4.0e+30L, 0, 0, 0, ' ', "", "%Lg");
       
  2617     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2618     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2619 
       
  2620     TEST (T, 1.0e-10L, 0, 0, 0, ' ', "", "%Lg");
       
  2621     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2622     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2623     TEST (T, 2.0e-20L, 0, 0, 0, ' ', "", "%Lg");
       
  2624     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2625     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2626     TEST (T, 4.0e-30L, 0, 0, 0, ' ', "", "%Lg");
       
  2627     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2628     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2629 
       
  2630     TEST (T, LDbl (CHAR_MAX),  0, 0, 0, ' ', "", "%Lg");
       
  2631     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2632     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2633     TEST (T, LDbl (UCHAR_MAX), 0, 0, 0, ' ', "", "%Lg");    std_log(LOG_FILENAME_LINE,"Test end");    
       
  2634     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2635 
       
  2636     TEST (T, LDbl (SCHAR_MAX), 0, 0, 0, ' ', "", "%Lg");
       
  2637     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2638     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2639     TEST (T, LDbl (SHRT_MAX),  0, 0, 0, ' ', "", "%Lg");
       
  2640     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2641     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2642     TEST (T, LDbl (USHRT_MAX), 0, 0, 0, ' ', "", "%Lg");
       
  2643     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2644     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2645 
       
  2646     // specify greater precision than the default 6 for large numbers
       
  2647     TEST (T, LDbl (INT_MAX),   0, 32, 0, ' ', "", "%.32Lg");
       
  2648     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2649     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2650     TEST (T, LDbl (UINT_MAX),  0, 32, 0, ' ', "", "%.32Lg");
       
  2651     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2652     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2653 
       
  2654     TEST (T, LDbl (LONG_MAX),  0, 32, 0, ' ', "", "%.32Lg");
       
  2655     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2656     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2657     TEST (T, LDbl (ULONG_MAX), 0, 32, 0, ' ', "", "%.32Lg");
       
  2658     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2659     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2660 
       
  2661     TEST (T, LDbl (FLT_MIN),   0, 32, 0, ' ', "", "%.32Lg");
       
  2662     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2663     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2664     TEST (T, LDbl (FLT_MAX),   0, 32, 0, ' ', "", "%.32Lg");
       
  2665     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2666     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2667     TEST (T, LDbl (DBL_MIN),   0, 32, 0, ' ', "", "%.32Lg");
       
  2668     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2669     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2670     TEST (T, LDbl (DBL_MAX),   0, 32, 0, ' ', "", "%.32Lg");
       
  2671     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2672     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2673 
       
  2674     {
       
  2675         char stdiofmt [8];
       
  2676         const std::streamsize prec = std::streamsize (LDBL_DIG + 3);
       
  2677         std::sprintf (stdiofmt, "%%.%d" _RWSTD_LDBL_PRINTF_PREFIX "g",
       
  2678                       int (prec));
       
  2679 
       
  2680         TEST (T, LDbl (LDBL_MIN), 0, prec, 0, ' ', "", stdiofmt);
       
  2681     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2682     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2683         TEST (T, LDbl (LDBL_MAX), 0, prec, 0, ' ', "", stdiofmt);
       
  2684     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2685     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2686     }
       
  2687 
       
  2688     const long double Pi = 3.14159265358979323846L;
       
  2689 
       
  2690     // some test cases below that use precision in conjuction with
       
  2691     // scientific in the libc format specifier in order to exercise
       
  2692     // the proposed resolution of lwg issue 231
       
  2693     TEST (T, Pi, 0,          32, 0, ' ', "", "%.32Lg");
       
  2694     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2695     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2696     TEST (T, Pi, fixed,       0, 0, ' ', "", "%.0Lf", Eof, 3.0L);
       
  2697     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2698     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2699     TEST (T, Pi, scientific,  0, 0, ' ', "", "%.0Le", Eof, 3.0L);
       
  2700     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2701     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2702     TEST (T, Pi, fixed,       0, 0, ' ', "", "3",     Eof, 3.0L);
       
  2703     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2704     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2705     TEST (T, Pi, scientific,  0, 0, ' ', "", "3e+00", Eof, 3.0L);
       
  2706     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2707     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2708 
       
  2709     TEST (T, Pi, uppercase,              32, 0, ' ', "", "%.32LG");
       
  2710     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2711     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2712     TEST (T, Pi, uppercase | fixed,       0, 0, ' ', "", "%.0Lf", Eof, 3.0L);
       
  2713     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2714     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2715     TEST (T, Pi, uppercase | scientific,  0, 0, ' ', "", "%.0LE", Eof, 3.0L);
       
  2716     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2717     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2718     TEST (T, Pi, uppercase | scientific,  0, 0, ' ', "", "3E+00", Eof, 3.0L);
       
  2719     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2720     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2721 
       
  2722 #define Showpos(f)   (showpos | f)
       
  2723 
       
  2724     TEST (T, Pi, Showpos (0),          32, 0, ' ', "", "%+.32Lg");
       
  2725     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2726     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2727     TEST (T, Pi, Showpos (fixed),       0, 0, ' ', "", "%+.0Lf", Eof, 3.0L);
       
  2728     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2729     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2730     TEST (T, Pi, Showpos (scientific),  0, 0, ' ', "", "%+.0Le", Eof, 3.0L);
       
  2731     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2732     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2733     TEST (T, Pi, Showpos (fixed),       0, 0, ' ', "", "+3",     Eof, 3.0L);
       
  2734     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2735     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2736     TEST (T, Pi, Showpos (scientific),  0, 0, ' ', "", "+3e+00", Eof, 3.0L);
       
  2737     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2738     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2739 
       
  2740 #define SHOWPOS(f)   (showpos | uppercase | f)
       
  2741 
       
  2742     TEST (T, Pi, SHOWPOS (0),          32, 0, ' ', "", "%+.32LG");
       
  2743     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2744     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2745     TEST (T, Pi, SHOWPOS (fixed),       0, 0, ' ', "", "%+.0Lf", Eof, 3.0L);
       
  2746     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2747     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2748     TEST (T, Pi, SHOWPOS (scientific),  0, 0, ' ', "", "%+.0LE", Eof, 3.0L);
       
  2749     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2750     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2751     TEST (T, Pi, SHOWPOS (fixed),       0, 0, ' ', "", "+3",     Eof, 3.0L);
       
  2752     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2753     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2754     TEST (T, Pi, SHOWPOS (scientific),  0, 0, ' ', "", "+3E+00", Eof, 3.0L);
       
  2755     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2756     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2757 
       
  2758 #define Showpoint(f)   (showpoint | f)
       
  2759 
       
  2760     TEST (T, Pi, Showpoint (0),          32, 0, ' ', "", "%#.32Lg");
       
  2761     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2762     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2763     TEST (T, Pi, Showpoint (fixed),       0, 0, ' ', "", "%#.0Lf", Eof, 3.0L);
       
  2764     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2765     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2766     TEST (T, Pi, Showpoint (scientific),  0, 0, ' ', "", "%#.0Le", Eof, 3.0L);
       
  2767     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2768     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2769     TEST (T, Pi, Showpoint (fixed),       0, 0, ' ', "", "3.",     Eof, 3.0L);
       
  2770     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2771     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2772     TEST (T, Pi, Showpoint (scientific),  0, 0, ' ', "", "3.e+00", Eof, 3.0L);
       
  2773     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2774     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2775 
       
  2776 #define SHOWPOINT(f)   (showpoint | uppercase | f)
       
  2777 
       
  2778     TEST (T, Pi, SHOWPOINT (0),          32, 0, ' ', "", "%#.32LG");
       
  2779     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2780     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2781     TEST (T, Pi, SHOWPOINT (fixed),       0, 0, ' ', "", "%#.0Lf", Eof, 3.0L);
       
  2782     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2783     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2784     TEST (T, Pi, SHOWPOINT (scientific),  0, 0, ' ', "", "%#.0LE", Eof, 3.0L);
       
  2785     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2786     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2787     TEST (T, Pi, SHOWPOINT (scientific),  0, 0, ' ', "", "3.E+00", Eof, 3.0L);
       
  2788     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2789     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2790 
       
  2791 #define Showall(f)   (showpoint | showpos | f)
       
  2792 
       
  2793     TEST (T, Pi, Showall (0),          32, 0, ' ', "", "%#+.32Lg");
       
  2794     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2795     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2796     TEST (T, Pi, Showall (fixed),       0, 0, ' ', "", "%#+.0Lf", Eof, 3.0L);
       
  2797     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2798     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2799     TEST (T, Pi, Showall (scientific),  0, 0, ' ', "", "%#+.0Le", Eof, 3.0L);
       
  2800     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2801     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2802     TEST (T, Pi, Showall (fixed),       0, 0, ' ', "", "+3.",     Eof, 3.0L);
       
  2803     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2804     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2805     TEST (T, Pi, Showall (scientific),  0, 0, ' ', "", "+3.e+00", Eof, 3.0L);
       
  2806     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2807     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2808 
       
  2809 #define SHOWALL(f)   (showpoint | showpos | uppercase | f)
       
  2810 
       
  2811     TEST (T, Pi, SHOWALL (0),          32, 0, ' ', "", "%#+.32LG");
       
  2812     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2813     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2814     TEST (T, Pi, SHOWALL (fixed),       0, 0, ' ', "", "%#+.0Lf", Eof, 3.0L);
       
  2815     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2816     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2817     TEST (T, Pi, SHOWALL (scientific),  0, 0, ' ', "", "%#+.0LE", Eof, 3.0L);
       
  2818     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2819     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2820     TEST (T, Pi, SHOWALL (scientific),  0, 0, ' ', "", "+3.E+00", Eof, 3.0L);
       
  2821     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2822     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2823 
       
  2824     // with {g,G}, precision indicates the number of significant digits
       
  2825     TEST (T, Pi, 0,  1, 0, ' ', "", "%.1Lg",  Eof, 3.0L);
       
  2826     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2827     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2828     TEST (T, Pi, 0,  2, 0, ' ', "", "%.2Lg",  Eof, 3.1L);
       
  2829     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2830     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2831     TEST (T, Pi, 0,  3, 0, ' ', "", "%.3Lg",  Eof, 3.14L);
       
  2832     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2833     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2834     TEST (T, Pi, 0, 10, 0, ' ', "", "%.10Lg", Eof, 3.141592654L);
       
  2835     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2836     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2837 
       
  2838     // C89 and C99 both specify that (only if specified using the asterisk)
       
  2839     // negative precision is treated the same as no precision at all; verify
       
  2840     // that num_put handles negative precision gracefully (i.e., ignores it)
       
  2841     TEST (T, Pi, 0, -1, 0, ' ', "", "%Lg");
       
  2842     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2843     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2844     TEST (T, Pi, 0, -9, 0, ' ', "", "%Lg");
       
  2845     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2846     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2847 
       
  2848     // with {e,E,f,F}, precision indicates the number of fractional digits
       
  2849     TEST (T, Pi, fixed,  1, 0, ' ', "", "%.1Lf",  Eof, 3.1L);
       
  2850     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2851     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2852     TEST (T, Pi, fixed,  2, 0, ' ', "", "%.2Lf",  Eof, 3.14L);
       
  2853     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2854     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2855     TEST (T, Pi, fixed,  3, 0, ' ', "", "%.3Lf",  Eof, 3.142L);
       
  2856     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2857     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2858     TEST (T, Pi, fixed, 10, 0, ' ', "", "%.10Lf", Eof, 3.1415926536L);
       
  2859     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2860     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2861     
       
  2862 
       
  2863     // exercise formatting of very large numbers in a fixed notation
       
  2864     // using '-' as the fill character to disable num_get tests
       
  2865     TEST (T, 2.0e+128L, fixed, 0, 0, '-', "", "%.0Lf", Eof);
       
  2866     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2867     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2868     TEST (T, 3.0e+256L, fixed, 0, 0, '-', "", "%.0Lf", Eof);
       
  2869     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2870     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2871     TEST (T, 4.0e+300L, fixed, 0, 0, '-', "", "%.0Lf", Eof);
       
  2872 
       
  2873     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2874     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2875     // extension: fixed format and negative precision
       
  2876     TEST (T, Pi, fixed, -2, 0, ' ', "", "0.03");
       
  2877     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2878     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2879     TEST (T, Pi, fixed, -8, 0, ' ', "", "0.00000003");
       
  2880     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2881 
       
  2882 
       
  2883 #undef CAT
       
  2884 #undef CONCAT
       
  2885 
       
  2886 #define CAT(a, b)      CONCAT (a, b)
       
  2887 #define CONCAT(a, b)   a ## b
       
  2888 
       
  2889     const long double ld = CAT (CAT (1.0e+, _RWSTD_LDBL_MAX_10_EXP), L);
       
  2890 
       
  2891     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2892 
       
  2893     TEST (T, ld, fixed, 0, 0, '-', "", "%.0Lf", Eof);
       
  2894     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2895     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2896 
       
  2897     TEST (T, Pi, scientific,  2, 0, ' ', "", "%.2Le",  Eof, 3.14L);
       
  2898     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2899     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2900     TEST (T, Pi, scientific,  4, 0, ' ', "", "%.4Le",  Eof, 3.1416L);
       
  2901     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2902     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2903     TEST (T, Pi, scientific,  6, 0, ' ', "", "%.6Le",  Eof, 3.141593L);
       
  2904     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2905     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2906     TEST (T, Pi, scientific, 12, 0, ' ', "", "%.12Le", Eof, 3.14159265359L);
       
  2907     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2908     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2909     TEST (T, Pi, scientific, -3, 0, ' ', "", "%Le");
       
  2910     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2911     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2912     TEST (T, Pi, scientific, -7, 0, ' ', "", "%Le");
       
  2913     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2914 
       
  2915 
       
  2916 #endif   // _RWSTD_NO_LONG_DOUBLE
       
  2917 }
       
  2918 
       
  2919 
       
  2920 /**************************************************************************/
       
  2921 
       
  2922 template <class charT>
       
  2923 void pvoid_test (charT, const char *cname)
       
  2924 {
       
  2925     const char* const tname = "const void*";
       
  2926 
       
  2927     rw_info (0, 0, 0, "std::num_put<%s>::put (..., %s)", cname, tname);
       
  2928 
       
  2929     typedef void* PVoid;
       
  2930 
       
  2931     int foo = 0;
       
  2932     int bar = 0;
       
  2933 
       
  2934     // use "0" rather than "%p" for null pointers to avoid
       
  2935     // having to deal with GNU libc's "(nil)" format
       
  2936 
       
  2937     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2938     TEST (T, PVoid (     0),  0, 0, 0, ' ', "", "0");
       
  2939     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2940     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2941     TEST (T, PVoid (     1),  0, 0, 0, ' ', "", "%p");
       
  2942     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2943     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2944     TEST (T, PVoid (  &foo),  0, 0, 0, ' ', "", "%p");
       
  2945     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2946     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2947     TEST (T, PVoid (  &bar),  0, 0, 0, ' ', "", "%p");
       
  2948     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2949     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2950     TEST (T, PVoid (   ~0L),  0, 0, 0, ' ', "", "%p");
       
  2951     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2952     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2953 
       
  2954     // 22.2.2.2.2, p16 and lwg issue 282: grouping and thousands_sep
       
  2955     // is only used in arithmetic types
       
  2956     TEST (T, PVoid (     0),  0, 0, 0, ' ', "\1",   "0");
       
  2957     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2958     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2959     TEST (T, PVoid (     1),  0, 0, 0, ' ', "\1",   "%p");
       
  2960     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2961     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2962     TEST (T, PVoid (  &foo),  0, 0, 0, ' ', "\1\1", "%p");
       
  2963     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2964     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2965     TEST (T, PVoid (  &bar),  0, 0, 0, ' ', "\1\2", "%p");
       
  2966     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2967     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2968     TEST (T, PVoid (   ~0L),  0, 0, 0, ' ', "\1\3", "%p");
       
  2969     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2970     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2971 
       
  2972     TEST (T, PVoid ( SHRT_MAX), 0, 0, 0, ' ', "", "%p");
       
  2973     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2974     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2975     TEST (T, PVoid ( SHRT_MIN), 0, 0, 0, ' ', "", "%p");
       
  2976     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2977     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2978     TEST (T, PVoid (USHRT_MAX), 0, 0, 0, ' ', "", "%p");
       
  2979     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2980     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2981     TEST (T, PVoid (  INT_MAX), 0, 0, 0, ' ', "", "%p");
       
  2982     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2983     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2984     TEST (T, PVoid (  INT_MIN), 0, 0, 0, ' ', "", "%p");
       
  2985     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2986     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2987     TEST (T, PVoid ( UINT_MAX), 0, 0, 0, ' ', "", "%p");
       
  2988     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2989     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2990     TEST (T, PVoid ( LONG_MAX), 0, 0, 0, ' ', "", "%p");
       
  2991     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2992     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2993     TEST (T, PVoid ( LONG_MIN), 0, 0, 0, ' ', "", "%p");
       
  2994     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2995     std_log(LOG_FILENAME_LINE,"Test start");    
       
  2996     TEST (T, PVoid (ULONG_MAX), 0, 0, 0, ' ', "", "%p");
       
  2997     std_log(LOG_FILENAME_LINE,"Test end");    
       
  2998 
       
  2999 
       
  3000 #if _RWSTD_LLONG_SIZE <= _RWSTD_PTR_SIZE
       
  3001 #ifndef __SYMBIAN32__
       
  3002 
       
  3003     std_log(LOG_FILENAME_LINE,"Test start");    
       
  3004     TEST (T, PVoid (_RWSTD_LLONG_MAX),  0, 0, 0, ' ', "", "%p");
       
  3005     std_log(LOG_FILENAME_LINE,"Test end");    
       
  3006     std_log(LOG_FILENAME_LINE,"Test start");    
       
  3007     TEST (T, PVoid (_RWSTD_ULLONG_MAX), 0, 0, 0, ' ', "", "%p");
       
  3008     std_log(LOG_FILENAME_LINE,"Test end");    
       
  3009 
       
  3010 #endif
       
  3011 #endif   // LLONG_MAX
       
  3012 
       
  3013 }
       
  3014 
       
  3015 
       
  3016 /**************************************************************************/
       
  3017 
       
  3018 template <class charT>
       
  3019 void errno_test (charT, const char *cname)
       
  3020 {
       
  3021     const char* const tname = "long";
       
  3022 
       
  3023     rw_info (0, 0, 0,
       
  3024              "std::num_put<%s>::put (..., %s) and errno", cname, tname);
       
  3025 
       
  3026     // verify that errno doesn't change after, or adversely affect
       
  3027     // successful insertion; and that the insertion doesn't change
       
  3028     // the value of errno
       
  3029 
       
  3030     errno = -1;
       
  3031 
       
  3032     std_log(LOG_FILENAME_LINE,"Test start");    
       
  3033 
       
  3034     TEST (T, 12345L,  0, 0, 0, ' ', "", "12345");
       
  3035     std_log(LOG_FILENAME_LINE,"Test end");    
       
  3036     std_log(LOG_FILENAME_LINE,"Test start");    
       
  3037   #ifndef __SYMBIAN32__
       
  3038     rw_assert (-1 == errno, 0, __LINE__,
       
  3039                "errno unexpectedly changed from %d to %{#m} (%m)", -1);
       
  3040 #else
       
  3041   if(-1 !=errno)
       
  3042   {
       
  3043    failures++;
       
  3044    std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3045    }
       
  3046  #endif  
       
  3047     errno = 0;
       
  3048 
       
  3049     std_log(LOG_FILENAME_LINE,"Test start");    
       
  3050 
       
  3051     TEST (T, 12346L,  0, 0, 0, ' ', "", "12346");
       
  3052     std_log(LOG_FILENAME_LINE,"Test end");    
       
  3053     std_log(LOG_FILENAME_LINE,"Test start");    
       
  3054    #ifndef __SYMBIAN32__
       
  3055     rw_assert (0 == errno, 0, __LINE__,
       
  3056                "errno unexpectedly changed from %d to %{#m} (%m)", -0);
       
  3057    #else
       
  3058   if(0!=errno)
       
  3059   {
       
  3060    failures++;
       
  3061    std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3062    }
       
  3063  #endif  
       
  3064     
       
  3065     errno = 1;
       
  3066     std_log(LOG_FILENAME_LINE,"Test start");    
       
  3067     TEST (T, 12347L,  0, 0, 0, ' ', "", "12347");
       
  3068     std_log(LOG_FILENAME_LINE,"Test end");    
       
  3069     #ifndef __SYMBIAN32__
       
  3070     rw_assert (1 == errno, 0, __LINE__,
       
  3071                "errno unexpectedly changed from %d to %{#m} (%m)", 1);
       
  3072     #else
       
  3073     if(1!= errno)
       
  3074     { 
       
  3075     failures++;
       
  3076     std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3077     }
       
  3078     #endif
       
  3079     errno = 2;
       
  3080     
       
  3081     std_log(LOG_FILENAME_LINE,"Test start");    
       
  3082     TEST (T, 12348L,  0, 0, 0, ' ', "", "12348");
       
  3083     std_log(LOG_FILENAME_LINE,"Test end");    
       
  3084     #ifndef __SYMBIAN32__
       
  3085     rw_assert (2 == errno, 0, __LINE__,
       
  3086                "errno unexpectedly changed from %d to %{#m} (%m)", 2);
       
  3087     #else
       
  3088     if(2!= errno)
       
  3089     { 
       
  3090     failures++;
       
  3091     std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3092     }
       
  3093     #endif
       
  3094     
       
  3095     errno = 3;
       
  3096     std_log(LOG_FILENAME_LINE,"Test start");    
       
  3097     TEST (T, 12349L,  0, 0, 0, ' ', "", "12349");
       
  3098     std_log(LOG_FILENAME_LINE,"Test end");    
       
  3099     #ifndef __SYMBIAN32__
       
  3100     rw_assert (3 == errno, 0, __LINE__,
       
  3101                "errno unexpectedly changed from %d to %{#m} (%m)", 3);
       
  3102     #else
       
  3103     if(3!= errno)
       
  3104     { 
       
  3105     failures++;
       
  3106     std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3107     }
       
  3108     #endif
       
  3109     
       
  3110     errno = 4;
       
  3111     std_log(LOG_FILENAME_LINE,"Test start");    
       
  3112     TEST (T, 12350L,  0, 0, 0, ' ', "", "12350");
       
  3113         std_log(LOG_FILENAME_LINE,"Test end");    
       
  3114     #ifndef __SYMBIAN32__
       
  3115     rw_assert (4 == errno, 0, __LINE__,
       
  3116                "errno unexpectedly changed from %d to %{#m} (%m)", 4);
       
  3117     #else
       
  3118     if(4!= errno)
       
  3119     { 
       
  3120     failures++;
       
  3121     std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3122     }
       
  3123     #endif
       
  3124     
       
  3125     errno = ERANGE;
       
  3126     std_log(LOG_FILENAME_LINE,"Test start");     
       
  3127     TEST (T, 12351L,  0, 0, 0, ' ', "", "12351");
       
  3128     std_log(LOG_FILENAME_LINE,"Test end");    
       
  3129     #ifndef __SYMBIAN32__ 
       
  3130     rw_assert (ERANGE == errno, 0, __LINE__,
       
  3131                "errno unexpectedly changed from %{#m} to %{#m} (%m)", ERANGE);
       
  3132     #else
       
  3133    if(ERANGE!= errno)
       
  3134     { 
       
  3135     failures++;
       
  3136     std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3137     }
       
  3138     #endif
       
  3139 
       
  3140     errno = Bad;
       
  3141       std_log(LOG_FILENAME_LINE,"Test start");    
       
  3142     TEST (T, 12352L,  0, 0, 0, ' ', "", "12352");
       
  3143       std_log(LOG_FILENAME_LINE,"Test end");    
       
  3144     #ifndef __SYMBIAN32__
       
  3145     rw_assert (Bad == errno, 0, __LINE__,
       
  3146                "errno unexpectedly changed from %d to %{#m} (%m)", Bad);
       
  3147     #else
       
  3148     if(Bad != errno)
       
  3149     { 
       
  3150     failures++;
       
  3151     std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3152     }
       
  3153     #endif
       
  3154     
       
  3155     errno = Eof;
       
  3156       std_log(LOG_FILENAME_LINE,"Test start");    
       
  3157     TEST (T, 12353L,  0, 0, 0, ' ', "", "12353");
       
  3158       std_log(LOG_FILENAME_LINE,"Test end");    
       
  3159     #ifndef __SYMBIAN32__
       
  3160     rw_assert (Eof == errno, 0, __LINE__,
       
  3161                "errno unexpectedly changed from %d to %{#m} (%m)", Eof);
       
  3162     #else
       
  3163     if(Eof!= errno)
       
  3164     { 
       
  3165     failures++;
       
  3166     std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3167     }
       
  3168     #endif
       
  3169     
       
  3170     errno = Fail;
       
  3171       std_log(LOG_FILENAME_LINE,"Test start");    
       
  3172     TEST (T, 12354L,  0, 0, 0, ' ', "", "12354");
       
  3173       std_log(LOG_FILENAME_LINE,"Test end");    
       
  3174     #ifndef __SYMBIAN32__
       
  3175     rw_assert (Fail == errno, 0, __LINE__,
       
  3176                "errno unexpectedly changed from %d to %{#m} (%m)", Fail);
       
  3177     #else
       
  3178     if(Fail!= errno)
       
  3179     { 
       
  3180     failures++;
       
  3181     std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3182     }
       
  3183     #endif
       
  3184 
       
  3185     errno = 0;
       
  3186 }
       
  3187 
       
  3188 
       
  3189 /**************************************************************************/
       
  3190 
       
  3191 // verify that std::ctype<>::widen() is called at least once
       
  3192 // for every distinct narow character (not for fill characters)
       
  3193 // note that an implementation is allowed to cache the results
       
  3194 // of facet virtual functions() called with the same arguments
       
  3195 // (including the implicit this pointer), so the numbers here
       
  3196 // are minimum required values but not exact or maximums
       
  3197 void widen_test ()
       
  3198 {
       
  3199     rw_info (0, 0, 0,
       
  3200              "std::num_put<char>::put (..., long) calls ctype<char>::widen()");
       
  3201 
       
  3202     static const struct {
       
  3203         long            val;
       
  3204         std::streamsize width;
       
  3205         int             flags;
       
  3206         int             n_widen;
       
  3207         const char     *str;
       
  3208     } data[] = {
       
  3209         {         0,  0, 0,                  1, "9"          },
       
  3210         {         1,  0, 0,                  1, "8"          },
       
  3211         {        11,  0, 0,                  1, "88"         },
       
  3212         {        12,  0, 0,                  2, "87"         },
       
  3213         {       123,  0, 0,                  3, "876"        },
       
  3214         {       111,  0, 0,                  1, "888"        },
       
  3215         {     -1234,  0, 0,                  5, "-8765"      },
       
  3216         {     12121,  0, 0,                  2, "87878"      },
       
  3217         {     12345,  0, showpos,            6, "+87654"     },
       
  3218         {   0123456,  0, oct | showbase,     7, "9876543"    },
       
  3219         {  0x234567,  0, hex | showbase,     8, "9x765432"   },
       
  3220         { 0x2345678, 10, hex | showbase,     9, " 9x7654321" },
       
  3221         {         9,  5, showpos | internal, 2, "+   0"  }
       
  3222     };
       
  3223 
       
  3224     for (unsigned i =  0; i != sizeof data / sizeof *data; ++i) {
       
  3225 
       
  3226         const Ctype<char> ctp;
       
  3227 
       
  3228         // construct and initialize a basic_ios-derived object
       
  3229         Ios<char> ios;
       
  3230 
       
  3231         // construct a num_put-derived facet to exercise
       
  3232         const NumPut<char> np;
       
  3233 
       
  3234         // imbue a stream object with a custom locale
       
  3235         // containing the replacement ctype facet
       
  3236         ios.imbue (std::locale (ios.getloc (), (const std::ctype<char>*)&ctp));
       
  3237 
       
  3238         ios.flags (std::ios_base::fmtflags (data [i].flags));
       
  3239         ios.width (data [i].width);
       
  3240 
       
  3241         char buf [40];
       
  3242 
       
  3243         // reset function call counter
       
  3244         Ctype<char>::n_widen_ = 0;
       
  3245 
       
  3246         *np.put (buf, ios, ' ', data [i].val) = '\0';
       
  3247 
       
  3248         #ifndef __SYMBIAN32__
       
  3249         rw_assert (data [i].n_widen <= Ctype<char>::n_widen_, 0, __LINE__,
       
  3250                    "%d. num_put<char>::do_put (..., %d) called "
       
  3251                    "ctype<char>::do_widen() %d times, %d expected; "
       
  3252                    "flags = %{If}, width = %d", i, data [i].val,
       
  3253                    Ctype<char>::n_widen_, data [i].n_widen,
       
  3254                    data [i].flags, data [i].width);
       
  3255 
       
  3256         rw_assert (0 == rw_strncmp (buf, data [i].str), 0, __LINE__,
       
  3257                    "%d. num_put<char>::do_put (..., %d) produced %s, "
       
  3258                    "expected \"%{#*s}\"; "
       
  3259                    "flags = %{If}, width = %d",
       
  3260                    i, data [i].val, buf,
       
  3261                    int (sizeof data [i].str [0]), data [i].str,
       
  3262                    data [i].flags, data [i].width);
       
  3263          #else
       
  3264          {
       
  3265             if(!(data [i].n_widen <= Ctype<char>::n_widen_))
       
  3266             {
       
  3267              failures++;
       
  3268              std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3269              }
       
  3270           if(0 != rw_strncmp (buf, data [i].str))
       
  3271             {
       
  3272              failures++;
       
  3273              std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3274              }
       
  3275             
       
  3276          }          
       
  3277          #endif //__SYMBIAN32__
       
  3278     }
       
  3279 }
       
  3280 
       
  3281 
       
  3282 /**************************************************************************/
       
  3283 
       
  3284 // verify that std::numpunct<>::grouping() is called and used correctly
       
  3285 void grouping_test ()
       
  3286 {
       
  3287     // construct a "replacement" numpunct-derived facet
       
  3288     const Punct<char> pun (1);
       
  3289 
       
  3290     // construct and initialize a basic_ios-derived object
       
  3291     Ios<char> ios;
       
  3292 
       
  3293     // construct a num_put-derived facet to exercise
       
  3294     const NumPut<char> np;
       
  3295 
       
  3296     // imbue a stream object with a custom locale
       
  3297     // containing the replacement punctuation facet
       
  3298     ios.imbue (std::locale (ios.getloc (), (const std::numpunct<char>*)&pun));
       
  3299   #ifndef __SYMBIAN32__
       
  3300     rw_assert (1 == Punct<char>::n_objs_, 0, __LINE__,
       
  3301                "%d facets exist, 1 expected", Punct<char>::n_objs_);
       
  3302   #else
       
  3303     if(1 != Punct<char>::n_objs_)
       
  3304     {
       
  3305      failures++;
       
  3306      std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3307      }
       
  3308   #endif
       
  3309      
       
  3310     // decimal output, no special formatting
       
  3311     ios.setf (std::ios::fmtflags ());
       
  3312 
       
  3313     char buf [40];
       
  3314 
       
  3315     // group after every digit
       
  3316     Punct<char>::grouping_ = "\1";
       
  3317 
       
  3318     // reset the do_thousands_sep()-call counter
       
  3319     Punct<char>::n_thousands_sep_ = 0;
       
  3320 
       
  3321     *np.put (buf, ios, '\0', 123456789L) = '\0';
       
  3322 
       
  3323     // verify that the number was formatted correctly
       
  3324    #ifdef __SYMBIAN32__
       
  3325    
       
  3326     if(0 != strcmp (buf, "1,2,3,4,5,6,7,8,9"))
       
  3327     {
       
  3328         failures++;
       
  3329         std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3330     }
       
  3331     
       
  3332     if(!(0 < Punct<char>::n_thousands_sep_))
       
  3333     {
       
  3334        failures++;
       
  3335        std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3336     }
       
  3337     #else
       
  3338     rw_assert (0 == std::strcmp (buf, "1,2,3,4,5,6,7,8,9"), 0, __LINE__,
       
  3339                "num_put<char>::do_put (..., 123456789) produced \"%s\", "
       
  3340                "expected \"%s\"", buf, "1,2,3,4,5,6,7,8,9");
       
  3341     rw_assert (0 < Punct<char>::n_thousands_sep_, 0, __LINE__,
       
  3342                "num_put<char>::do_put (..., 123456789) failed to call "
       
  3343                "numpunct<char>::do_thousands_sep()");
       
  3344   #endif
       
  3345     // verify that do_thousands_sep() was called at least once
       
  3346 
       
  3347     // repeat test to verify that distinct instances
       
  3348     // of the same facet do not cache each other's data
       
  3349     {
       
  3350         // nested scope works around a SunPro bug (PR #27543)
       
  3351         ios.imbue (std::locale (ios.getloc (),
       
  3352                        (const std::numpunct<char>*)new Punct<char>(0)));
       
  3353     }
       
  3354    #ifndef __SYMBIAN32__
       
  3355     rw_assert (2 == Punct<char>::n_objs_, 0, __LINE__,
       
  3356                "%d facets exist, 2 expected", Punct<char>::n_objs_);
       
  3357    #else
       
  3358     if(2 != Punct<char>::n_objs_)
       
  3359     {
       
  3360      failures++;
       
  3361      std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3362      }
       
  3363      
       
  3364    #endif //__SYMBIAN32__
       
  3365     // now group after every other digit
       
  3366     Punct<char>::grouping_ = "\2";
       
  3367 
       
  3368     // reset the do_thousands_sep()-call counter
       
  3369     Punct<char>::n_thousands_sep_ = 0;
       
  3370 
       
  3371     *np.put (buf, ios, '\0', 123456790L) = '\0';
       
  3372 
       
  3373     // again verify that the number was formatted correctly
       
  3374   #ifdef __SYMBIAN32__
       
  3375   if(0 != strcmp (buf, "1,23,45,67,90"))
       
  3376     { 
       
  3377       failures++;
       
  3378       std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3379        
       
  3380     }           
       
  3381   
       
  3382   if(!(0 < Punct<char>::n_thousands_sep_))
       
  3383   {
       
  3384    failures++;
       
  3385    std_log(LOG_FILENAME_LINE,"Reason:Failing")  ;
       
  3386    }
       
  3387   #else
       
  3388     rw_assert (0 == std::strcmp (buf, "1,23,45,67,90"), 0, __LINE__,
       
  3389                "num_put<char>::do_put (..., 123456790) produced \"%s\", "
       
  3390                "expected \"%s\"", buf, "1,23,45,67,90");
       
  3391     rw_assert (0 < Punct<char>::n_thousands_sep_, 0, __LINE__,
       
  3392                "num_put<char>::do_put (..., 123456790) failed to call "
       
  3393                "numpunct<char>::do_thousands_sep()");
       
  3394            
       
  3395   #endif 
       
  3396     // verify that do_thousands_sep() was called at least once
       
  3397     // (i.e., that there is no unwarranted caching going on)
       
  3398     
       
  3399     // replace imbued locale with a copy of the classic locale
       
  3400     // and remove the previously installed locale containing
       
  3401     // the user-defined facet; this must destroy the dynamically
       
  3402     // created facet leaving only the local facet on the stack
       
  3403     {
       
  3404         // nested scope works around a SunPro bug (PR #27543)
       
  3405         ios.imbue (std::locale::classic ());
       
  3406     }
       
  3407 #ifndef __SYMBIAN32__
       
  3408     rw_assert (1 == Punct<char>::n_objs_, 0, __LINE__,
       
  3409                "%d facets exist, 1 expected", Punct<char>::n_objs_);
       
  3410  #else
       
  3411    if(1 != Punct<char>::n_objs_)
       
  3412    {
       
  3413     failures++;
       
  3414     std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3415     
       
  3416    }
       
  3417  #endif              
       
  3418 }
       
  3419 
       
  3420 /**************************************************************************/
       
  3421 
       
  3422 template <class charT>
       
  3423 void numput_virtuals_test (charT, const char *cname)
       
  3424 {
       
  3425     const NumPut<charT> put (1);
       
  3426     const std::num_put<charT, charT*> &np = put;
       
  3427 
       
  3428     Ios<charT> ios;
       
  3429 
       
  3430     ios.flags (std::ios_base::fmtflags ());
       
  3431 
       
  3432 #define Abs(i)   ((i) < 0 ? (-i) : (i))
       
  3433 
       
  3434 #define ASSERT(T, N, T2, tname, t2name)                              \
       
  3435     do {                                                             \
       
  3436         /* number of expected calls to the do_put() member */        \
       
  3437         const int expect   =  N + put.ncalls_ [put.test_ ## T];      \
       
  3438         const int expect_2 = !N + put.ncalls_ [put.test_ ## T2];     \
       
  3439         charT buf [80];                                              \
       
  3440         const charT* const end  = np.put (buf, ios, charT (), (T)0); \
       
  3441         rw_assert (end == buf + 1, 0, __LINE__,                      \
       
  3442                    "line %d: num_put<%s>::put (..., %s = 0) "        \
       
  3443                    "return value", __LINE__, cname, tname);          \
       
  3444         const int ncalls   = put.ncalls_ [put.test_ ## T];           \
       
  3445         const int ncalls_2 = put.ncalls_ [put.test_ ## T2];          \
       
  3446         rw_assert (expect == ncalls, 0, __LINE__,                    \
       
  3447                    "line %d: num_put<%s>::put (..., %s) called "     \
       
  3448                    "do_put(..., %s) %d times, expected %d",          \
       
  3449                     __LINE__, cname, tname,                          \
       
  3450                    tname, Abs (ncalls - expect - N), N);             \
       
  3451         /* make sure extensions, if any, are implemented in */       \
       
  3452         /* terms of and call the standard virtual functions */       \
       
  3453         /* bogus addressof operator prevents warnings about */       \
       
  3454         /* unreachable code when T is the same as T2        */       \
       
  3455         if (put.test_ ## T != put.test_ ## T2)                       \
       
  3456             rw_assert (expect_2 == ncalls_2, 0, __LINE__,            \
       
  3457                        "line %d: num_put<%s>::put (..., %s) called " \
       
  3458                        "do_put(..., %s) %d times, expected %d",      \
       
  3459                        __LINE__, cname, tname,                       \
       
  3460                        t2name, Abs (expect_2 - ncalls_2 - !N), !N);  \
       
  3461     } while (0)
       
  3462 
       
  3463     typedef unsigned short ushort;
       
  3464     typedef unsigned int   uint;
       
  3465     typedef unsigned long  ulong;
       
  3466 
       
  3467     // verify that each public member function calls each corresponding
       
  3468     // implementation do_xxx() member functions exactly once
       
  3469 
       
  3470     // in the case of extensions, verify that each extended public member
       
  3471     // function calls the appropriate implementation standard do_xxx()
       
  3472     // member function
       
  3473 
       
  3474 #ifndef _RWSTD_NO_BOOL
       
  3475     ASSERT (bool, 1, bool, "bool", "bool");
       
  3476 #endif   // _RWSTD_NO_BOOL
       
  3477 
       
  3478     ASSERT (long,  1, long, "long", "long");
       
  3479     ASSERT (ulong, 1, ulong, "unsigned long", "unsigned long");
       
  3480 
       
  3481 #if defined (_RWSTD_LONG_LONG) && !defined (_RWSTD_NO_EXT_NUM_PUT)
       
  3482 
       
  3483     typedef          _RWSTD_LONG_LONG  llong;
       
  3484     typedef unsigned _RWSTD_LONG_LONG ullong;
       
  3485 
       
  3486     ASSERT (llong,  1, llong, "long long", "long long");
       
  3487     ASSERT (ullong, 1, ullong, "unsigned long long", "unsigned long long");
       
  3488 
       
  3489 #endif   // _RWSTD_LONG_LONG   && !_RWSTD_NO_EXT_NUM_PUT
       
  3490 
       
  3491     ASSERT (double, 1, double, "double", "double");
       
  3492 
       
  3493 #ifndef _RWSTD_NO_LONG_DOUBLE
       
  3494 
       
  3495     typedef long double ldouble;
       
  3496 #ifndef __SYMBIAN32__
       
  3497     ASSERT (ldouble, 1, ldouble, "long double", "long double");
       
  3498 #endif
       
  3499 #endif   // _RWSTD_NO_LONG_DOUBLE
       
  3500 
       
  3501     typedef const void* pvoid;
       
  3502     ASSERT (pvoid, 1, pvoid, "const void*", "const void*");
       
  3503 }
       
  3504 
       
  3505 /**************************************************************************/
       
  3506 
       
  3507 template <class charT>
       
  3508 void run_tests (charT, const char *cname)
       
  3509 {
       
  3510     numput_virtuals_test (charT (), cname);
       
  3511 #if 0 //FIX
       
  3512     direct_use_test (charT (), cname);
       
  3513 #endif //#if 0
       
  3514 
       
  3515 #undef TEST
       
  3516 #define TEST(T, tname)                                          \
       
  3517     if (rw_enabled (#T))                                        \
       
  3518         T ## _test (charT (), cname);                           \
       
  3519     else                                                        \
       
  3520         rw_note (0, __FILE__, __LINE__, "%s test disabled",     \
       
  3521                  tname && *tname ? tname : #T)
       
  3522 
       
  3523 #ifndef _RWSTD_NO_BOOL
       
  3524 
       
  3525    std_log(LOG_FILENAME_LINE,"Test start");
       
  3526     TEST (bool, "");
       
  3527 std_log(LOG_FILENAME_LINE,"Test end");
       
  3528 #endif   // _RWSTD_NO_BOOL
       
  3529 
       
  3530     
       
  3531     // NOTE: there is no num_put::put(..., short)
       
  3532     // TEST (shrt, "short");
       
  3533     // TEST (ushrt, "unsigned short");
       
  3534 
       
  3535     // NOTE: there is no num_put::put(..., int)
       
  3536     // TEST (int, "");
       
  3537     // TEST (uint, "unsigned int");
       
  3538 std_log(LOG_FILENAME_LINE,"Test start");
       
  3539     TEST (long, "");
       
  3540     std_log(LOG_FILENAME_LINE,"Test end");
       
  3541     std_log(LOG_FILENAME_LINE,"Test start");
       
  3542     TEST (ulong, "unsigned long");
       
  3543 std_log(LOG_FILENAME_LINE,"Test end");
       
  3544 #ifndef _RWSTD_NO_LONG_LONG
       
  3545     std_log(LOG_FILENAME_LINE,"Test start");
       
  3546     TEST (llong, "long long");
       
  3547     std_log(LOG_FILENAME_LINE,"Test end");
       
  3548     std_log(LOG_FILENAME_LINE,"Test start");
       
  3549     TEST (ullong, "unsigned long long");
       
  3550     std_log(LOG_FILENAME_LINE,"Test end");
       
  3551 #endif   // _RWSTD_NO_LONG_LONG
       
  3552 
       
  3553     // NOTE: there is no num_put::put(..., float)
       
  3554     // TEST (flt, "float");
       
  3555 std_log(LOG_FILENAME_LINE,"Test start");
       
  3556     TEST (dbl, "dbouble");
       
  3557 std_log(LOG_FILENAME_LINE,"Test end");
       
  3558 #if 0 // no long double support
       
  3559 #ifndef _RWSTD_NO_LONG_DOUBLE
       
  3560 
       
  3561     TEST (ldbl, "long double");
       
  3562 
       
  3563 #endif   // _RWSTD_NO_LONG_DOUBLE
       
  3564 #endif //#if 0
       
  3565 std_log(LOG_FILENAME_LINE,"Test start");
       
  3566     TEST (pvoid, "void*");
       
  3567 std_log(LOG_FILENAME_LINE,"Test end");
       
  3568     if (rw_opt_no_errno)
       
  3569         rw_note (0, __FILE__, __LINE__, "errno test disabled");
       
  3570     else
       
  3571         errno_test (charT (), cname);
       
  3572 }
       
  3573 
       
  3574 /**************************************************************************/
       
  3575 
       
  3576 static int
       
  3577 run_test (int, char*[])
       
  3578 {
       
  3579     if (rw_opt_no_widen) {
       
  3580         rw_note (0, 0, 0, "widen test disabled");
       
  3581     }
       
  3582     else {
       
  3583        // widen_test ();
       
  3584     }
       
  3585 
       
  3586     if (rw_opt_no_grouping) {
       
  3587         rw_note (0, 0, 0, "grouping test disabled");
       
  3588     }
       
  3589     else {
       
  3590         grouping_test ();
       
  3591     }
       
  3592 
       
  3593     if (rw_enabled ("char"))
       
  3594         run_tests (char (), "char");
       
  3595     else
       
  3596         rw_note (0, __FILE__, __LINE__, "char test disabled");
       
  3597 
       
  3598 #ifndef _RWSTD_NO_WCHAR_T
       
  3599 
       
  3600     if (rw_enabled ("wchar_t"))
       
  3601         run_tests (wchar_t (), "wchar_t");
       
  3602     else
       
  3603         rw_note (0, __FILE__, __LINE__, "wchar_t test disabled");
       
  3604 
       
  3605 #endif   // _RWSTD_NO_WCHAR_T
       
  3606 
       
  3607     return 0;
       
  3608 }
       
  3609 
       
  3610 /**************************************************************************/
       
  3611 //#endif // #if 0
       
  3612 int main (int argc, char *argv[])
       
  3613 {
       
  3614     #ifndef __SYMBIAN32__
       
  3615     return rw_test (argc, argv, __FILE__,"lib.locale.num.put",0 , run_test,"|-enable-num_get# ""|-no-errno# "
       
  3616 	    "|-no-grouping# ""|-no-widen# ",&rw_opt_enable_num_get,&rw_opt_no_errno,&rw_opt_no_grouping,&rw_opt_no_widen);
       
  3617     #else
       
  3618    rw_test (argc, argv, __FILE__,"lib.locale.num.put",0 , run_test,"|-enable-num_get# ""|-no-errno# "
       
  3619 	    "|-no-grouping# ""|-no-widen# ",&rw_opt_enable_num_get,&rw_opt_no_errno,&rw_opt_no_grouping,&rw_opt_no_widen);
       
  3620     
       
  3621     if(failures)  
       
  3622           {
       
  3623             assert_failed = true;
       
  3624        std_log(LOG_FILENAME_LINE,"Result: Failed");
       
  3625       }
       
  3626      else
       
  3627       {
       
  3628 
       
  3629        std_log(LOG_FILENAME_LINE,"Result: Passed");
       
  3630       }
       
  3631   
       
  3632    std_log(LOG_FILENAME_LINE,"[End Test Case]");  
       
  3633    
       
  3634    testResultXml("22_locale_num_put");
       
  3635     close_log_file();
       
  3636 
       
  3637     return 0;
       
  3638     #endif
       
  3639 }