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