stdcpp/tsrc/Stdcpp_test/stdcxx/tstapps/localization/src/22.locale.num.get.cpp
changeset 0 e4d67989cc36
child 22 ddc455616bd6
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 
       
     2 
       
     3 /***************************************************************************
       
     4  *
       
     5  * 22.locale.num.get.cpp - test exercising the std::num_get facet
       
     6  *
       
     7  * $Id: 22.locale.num.get.cpp 290831 2005-09-21 21:15:42Z 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 #include <cstdlib>
       
    25 
       
    26 // Usage:
       
    27 //   #define NO_GET_${T}, where ${T} is the name of the arithmetic
       
    28 //   type the num_get<charT>::get(..., ${T}&) overload, to disable
       
    29 //   the corresponding test
       
    30 //
       
    31 //   #define NO_GET_INTEGER to disable tests of all integer types
       
    32 //   #define NO_GET_FLOATING to disable testst of all floating types
       
    33 //   #define NO_GET_ERRNO to disable errno tests
       
    34 
       
    35 #define	SAME_AS_UNIX_COMMENT	
       
    36 #define	FLT_MIN_NOT_SAME		
       
    37 #define	FLT_MAX_NOT_SAME
       
    38 
       
    39 #ifdef NO_GET_INTEGER
       
    40 #  define NO_GET_BOOL
       
    41 // no NO_GET_USHRT
       
    42 #  define NO_GET_SHRT
       
    43 // no NO_GET_UINT
       
    44 #  define NO_GET_INT
       
    45 #  define NO_GET_ULONG
       
    46 #  define NO_GET_LONG
       
    47 #  define NO_GET_ULLONG
       
    48 #  define NO_GET_LLONG
       
    49 #endif   // NO_GET_INTEGER
       
    50 
       
    51 #ifdef NO_GET_FLOATING
       
    52 #  define NO_GET_FLT
       
    53 #  define NO_GET_DBL
       
    54 #  define NO_GET_LDBL
       
    55 #endif   // NO_GET_FLOATING
       
    56 #define	_RWSTD_DBL_MIN	DBL_MIN
       
    57 #define	_RWSTD_DBL_MAX	DBL_MAX
       
    58 #define	_RWSTD_ULONG_MAX ULONG_MAX
       
    59 
       
    60 #define	_RWSTD_LONG_MAX	LONG_MAX
       
    61 /**************************************************************************/
       
    62 
       
    63 #include <cfloat>
       
    64 #include <climits>   // XXX_MAX, XXX_MIN
       
    65 #include <clocale>   // for localeconv(), setlocale()
       
    66 #include <cstdio>    // for sprintf(), sscanf()
       
    67 #include <cstring>   // for memset(), strerror(), strlen()
       
    68 #include <cstddef>
       
    69 #include <cerrno>    // for ERANGE, errno
       
    70 
       
    71 #include <ios>
       
    72 #include <limits>
       
    73 #include <locale>
       
    74 
       
    75 #include <any.h>         // for rw_any_t
       
    76 #include <cmdopt.h>      // for rw_enabled()
       
    77 #include <driver.h>      // for rw_test(), ...
       
    78 #include <localedef.h>   // for rw_locales()
       
    79 #include <valcmp.h>      // for rw_equal()
       
    80 
       
    81 #include"std_log_result.h"
       
    82 #define LOG_FILENAME_LINE __FILE__, __LINE__
       
    83 int failures=0;
       
    84 
       
    85 #ifdef __SYMBIAN32__
       
    86 #include<assert.h>
       
    87 #endif //__SYMBIAN32__
       
    88 /**************************************************************************/
       
    89 //#if 0
       
    90 // set by the command line option handler in response to:
       
    91 static int rw_opt_no_errno       = 0;   // --no-errno
       
    92 static int rw_opt_no_grouping    = 0;   // --no-grouping
       
    93 static int rw_opt_no_widen       = 0;   // --no-widen
       
    94 static int rw_opt_no_uflow       = 0;   // --no-underflow
       
    95 
       
    96 /**************************************************************************/
       
    97 
       
    98 // replacement ctype facet
       
    99 
       
   100 template <class charT>
       
   101 struct Ctype: std::ctype<charT>
       
   102 {
       
   103     typedef std::ctype<charT> Base;
       
   104 
       
   105     typedef typename Base::char_type char_type;
       
   106 
       
   107     static int n_widen_;
       
   108 
       
   109     Ctype (): Base (0, 0, 1) { }
       
   110 
       
   111     virtual char_type do_widen (char c) const {
       
   112         ++n_widen_;
       
   113 
       
   114         switch (c) {
       
   115         case '0': c = '9'; break;
       
   116         case '1': c = '8'; break;
       
   117         case '2': c = '7'; break;
       
   118         case '3': c = '6'; break;
       
   119         case '4': c = '5'; break;
       
   120         case '5': c = '4'; break;
       
   121         case '6': c = '3'; break;
       
   122         case '7': c = '2'; break;
       
   123         case '8': c = '1'; break;
       
   124         case '9': c = '0'; break;
       
   125         default: break;
       
   126         }
       
   127 
       
   128         return char_type (c);
       
   129     }
       
   130 
       
   131     virtual const char_type*
       
   132     do_widen (const char *lo, const char *hi, char_type *dst) const {
       
   133         return Base::do_widen (lo, hi, dst);
       
   134     }
       
   135 };
       
   136 
       
   137 template <class charT>
       
   138 int Ctype<charT>::n_widen_;
       
   139 
       
   140 
       
   141 /**************************************************************************/
       
   142 
       
   143 // replacement numpunct facet
       
   144 
       
   145 template <class charT>
       
   146 struct Punct: std::numpunct<charT>
       
   147 {
       
   148     typedef typename std::numpunct<charT>::char_type   char_type;
       
   149     typedef typename std::numpunct<charT>::string_type string_type;
       
   150 
       
   151     static char_type        decimal_point_;
       
   152     static char_type        thousands_sep_;
       
   153     static const char      *grouping_;
       
   154     static const char_type *truename_;
       
   155     static const char_type *falsename_;
       
   156 
       
   157     static int n_objs_;            // number of facet objects in existence
       
   158     static int n_thousands_sep_;   // number of calls to do_thousands_sep()
       
   159 
       
   160     Punct (std::size_t ref = 0)
       
   161         : std::numpunct<charT>(ref) {
       
   162         ++n_objs_;
       
   163     }
       
   164 
       
   165     ~Punct () {
       
   166         --n_objs_;
       
   167     }
       
   168 
       
   169     virtual char_type do_decimal_point () const {
       
   170         return decimal_point_;
       
   171     }
       
   172 
       
   173     virtual std::string do_grouping () const {
       
   174         return grouping_;
       
   175     }
       
   176 
       
   177     virtual char_type do_thousands_sep () const {
       
   178         ++n_thousands_sep_;
       
   179         return thousands_sep_;
       
   180     }
       
   181 
       
   182     virtual string_type do_truename () const {
       
   183         return truename_ ? string_type (truename_) : string_type ();
       
   184     }
       
   185 
       
   186     virtual string_type do_falsename () const {
       
   187         return falsename_ ? string_type (falsename_) : string_type ();
       
   188     }
       
   189 };
       
   190 
       
   191 template <class charT>
       
   192 const char* Punct<charT>::grouping_ = "";
       
   193 
       
   194 template <class charT>
       
   195 typename Punct<charT>::char_type Punct<charT>::decimal_point_ = '.';
       
   196 
       
   197 template <class charT>
       
   198 typename Punct<charT>::char_type Punct<charT>::thousands_sep_ = ',';
       
   199 
       
   200 template <class charT>
       
   201 const typename Punct<charT>::char_type* Punct<charT>::truename_;
       
   202 
       
   203 template <class charT>
       
   204 const typename Punct<charT>::char_type* Punct<charT>::falsename_;
       
   205 
       
   206 template <class charT>
       
   207 int Punct<charT>::n_thousands_sep_;
       
   208 
       
   209 template <class charT>
       
   210 int Punct<charT>::n_objs_;
       
   211 
       
   212 /**************************************************************************/
       
   213 
       
   214 template <class charT>
       
   215 struct Ios: std::basic_ios<charT>
       
   216 {
       
   217     Ios () { this->init (0); }
       
   218 };
       
   219 
       
   220 
       
   221 template <class charT>
       
   222 struct NumGet: std::num_get<charT, const charT*>
       
   223 {
       
   224     NumGet () { /* working around a bug in older versions of EDG eccp */ }
       
   225 };
       
   226 
       
   227 
       
   228 /**************************************************************************/
       
   229 
       
   230 #define TEST   do_test
       
   231 #define T      __LINE__, charT ()
       
   232 
       
   233 // if non-zero expected to point to a maximum valid value
       
   234 // of type T that's being tested below (used for floating
       
   235 // point ranges)
       
   236 // on function return, the pointed to value is overwritten
       
   237 // with the actual extracted value
       
   238 void *pmax = 0;
       
   239 
       
   240 template <class nativeT>
       
   241 class rw_any_template_native_t
       
   242 {
       
   243 public:
       
   244 	rw_any_template_native_t(nativeT aNativeT) : iNativeT(aNativeT)
       
   245 	{
       
   246 	}
       
   247 	const char* const type_name ()
       
   248 	{
       
   249 	iNativeT.type_name();
       
   250 	}
       
   251 private:
       
   252 	nativeT iNativeT;
       
   253 };
       
   254 
       
   255 
       
   256 
       
   257 template <class charT, class nativeT>
       
   258 int do_test (int         lineno,          // line number
       
   259              charT       /* dummy */,
       
   260              nativeT     val,             // value expected to be extracted
       
   261              const char *str,             // input sequence
       
   262              int         consumed = -1,   // number of consumed characters
       
   263              int         flags = 0,       // initial set of flags
       
   264              int         err_expect = -1, // expected iostate
       
   265              const char *grouping = "")   // optional grouping string
       
   266 {
       
   267     if (!rw_enabled (lineno)) {
       
   268         rw_note (0, __FILE__, __LINE__, "test on line %d disabled", lineno);
       
   269         return 0;
       
   270     }
       
   271     static const char* const cname = rw_any_t (charT ()).type_name ();
       
   272     static const char* const tname =cname;//rw_any_template_native_t<nativeT>(nativeT ()).type_name (); //FIX
       
   273 
       
   274     // create a distinct punctuation facet for each iteration to make sure
       
   275     // any data cached in between successive calls to the facet's public
       
   276     // member functions are flushed
       
   277     const Punct<charT> pun (1);
       
   278 
       
   279     Ios<charT> io;
       
   280     NumGet<charT> ng;
       
   281 
       
   282     io.imbue (std::locale (io.getloc (),
       
   283                            (const std::numpunct<charT>*)&pun));
       
   284 
       
   285     io.flags (std::ios_base::fmtflags (flags));
       
   286     pun.grouping_ = grouping;
       
   287 
       
   288     // initialize x to a value other than the expected one except when
       
   289     // get() is expected to fail (in which case the value isn't supposed
       
   290     // to be modified, except when the failure is caused by an invalid
       
   291     // grouping)
       
   292     // doing so exercises the requirement that the get() functions not
       
   293     // modify their argument on failure (except when the failure is due
       
   294     // to bad grouping)
       
   295     nativeT x =
       
   296         err_expect & std::ios::failbit || *grouping ? val : nativeT (!val);
       
   297 
       
   298     charT wstr_buf [256];   // small buffer to widen `str' to
       
   299     charT *wstr = 0;        // points to wstr_buf if large enough
       
   300 
       
   301     const charT *next;    // iterator to the next character where to parse
       
   302 
       
   303     char nbuf [4096];    // narrow character buffer
       
   304 
       
   305     // if the string `str' starts with a '%', treat it as a printf()
       
   306     // format specifier and take the string produced by sprintf()
       
   307     // below as the expected result, otherwise treat it literally
       
   308     // as the expected result
       
   309 
       
   310 #ifdef __SYMBIAN32__
       
   311     if ('%' == *str && 0 < sprintf (nbuf, str, val))
       
   312         str = nbuf;
       
   313      const size_t str_len = strlen (str);   
       
   314 #else
       
   315     if ('%' == *str && 0 < std::sprintf (nbuf, str, val))
       
   316         str = nbuf;
       
   317    const std::size_t str_len = std::strlen (str);     
       
   318 #endif //__SYMBIAN32__
       
   319     // convert the narrow character string `str' to a wide character
       
   320     // string `wstr' if charT is wider than char
       
   321 
       
   322     
       
   323 
       
   324     if (sizeof (charT) > sizeof (char)) {
       
   325 
       
   326         // widen `str' to the wide character buffer if the latter
       
   327         // is large enough, or to a dynamically allocated buffer
       
   328         // otherwise
       
   329         wstr = str_len < sizeof wstr_buf / sizeof *wstr_buf ?
       
   330             wstr_buf : new charT [str_len + 1];
       
   331 
       
   332         typedef unsigned char UChar;
       
   333 
       
   334         for (std::size_t j = 0; j != str_len + 1; ++j)
       
   335             wstr [j] = charT (UChar (str [j]));
       
   336 
       
   337         next = wstr;
       
   338 
       
   339     }
       
   340     else {
       
   341 
       
   342         // charT == char, just point next at `str'
       
   343         next = (const charT*)str;
       
   344     }
       
   345 
       
   346     std::ios_base::iostate err = std::ios_base::goodbit;
       
   347 
       
   348     const charT *last = next + std::char_traits<charT>::length (next);
       
   349 
       
   350     last = ng.get (next, last, io, err, x);
       
   351 
       
   352     // do not test the number of extracted characters
       
   353     // if (consumed == -1) holds
       
   354     int success = -1 == consumed || last - next == consumed;
       
   355 
       
   356     int nfailures = !success;
       
   357 #ifndef __SYMBIAN32__
       
   358     rw_assert (success, 0, lineno,
       
   359                "line %d: num_get<%s>::get (%#s, ..., %s&); "
       
   360                "fmtflags = %{If}; "
       
   361                "%{?}grouping = %#s; %{;}"
       
   362                "ate %td, expected %d",
       
   363                __LINE__, cname, str, tname,
       
   364                flags,
       
   365                *grouping && '%' != *grouping, grouping,
       
   366                last - next, consumed);
       
   367 #else
       
   368  if(!success)
       
   369  {
       
   370   failures++;
       
   371   std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
   372   }
       
   373   #endif
       
   374     const nativeT val_max = pmax ? *(nativeT*)pmax : val;
       
   375     // if pmax is non-zero it points to the upper bound of the range
       
   376     // that the extracted value can be in
       
   377     success =
       
   378            err == err_expect
       
   379         && (rw_equal (x, val) || val <= x && x <= val_max);
       
   380 
       
   381     nfailures += !success;
       
   382    #ifndef __SYMBIAN32__
       
   383     rw_assert (success, 0, lineno,
       
   384                "line %d: num_get<%s>::get (%{*Ac}, ..., %s&); "
       
   385                "fmtflags = %{If}; "
       
   386                "%{?}grouping = %#s; %{;}"
       
   387                "got %s (%{Is}); "
       
   388                "expected %s%{?} <= %s %{;} "
       
   389                "(%{Is})",
       
   390                __LINE__, cname, sizeof *str, str, tname,
       
   391                flags,
       
   392                *grouping && '%' != *grouping, grouping,
       
   393                TOSTR (x), err,
       
   394                TOSTR (val), 0 != pmax, TOSTR (val_max),
       
   395                err_expect);
       
   396    #else
       
   397     if(!success)
       
   398     {
       
   399      failures++;
       
   400      std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
   401      }
       
   402     #endif //__SYMBIAN32__ 
       
   403     if (pmax) {
       
   404         // store the extracted value into the pointed to location
       
   405         *(nativeT*)pmax = x;
       
   406     }
       
   407 
       
   408     if (*grouping && '%' == *grouping) {
       
   409 
       
   410         // if the `grouping' string starts with a '%', treat it as
       
   411         // a scanf() format specifier and use sscanf() to parse the
       
   412         // tested string `str'; then compare for equality the number
       
   413         // parsed with sscanf() with that parsed with num_get::get()
       
   414         const char* const scanspec = grouping;
       
   415 
       
   416         nativeT y = nativeT ();
       
   417 
       
   418         #ifdef __SYMBIAN32__
       
   419         const int n = sscanf (str, scanspec, &y);
       
   420         #else
       
   421         const int n = std::sscanf (str, scanspec, &y);
       
   422         #endif //__SYMBIAN32__
       
   423 
       
   424         success =
       
   425             !(   err & std::ios::failbit    && n > 0
       
   426               || !(err & std::ios::failbit) && 1 != n
       
   427               || !rw_equal (x, y));
       
   428 
       
   429         nfailures += !success;
       
   430 
       
   431       #ifndef __SYMBIAN32__
       
   432         rw_assert (success, 0, lineno,
       
   433                    "line %d: num_get<%s>::get (%#s, ..., %s&); "
       
   434                    "got %s, but scanf (..., \"%s\", ...) extracted %s "
       
   435                    "and returned %d; fmtflags = %{If}, iostate = %{Is}",
       
   436                    __LINE__, cname, str, tname,
       
   437                    TOSTR (x), scanspec, TOSTR (y),
       
   438                    n, flags, err);
       
   439        #else
       
   440         if(!success)
       
   441         {
       
   442          failures++;
       
   443          std_log(LOG_FILENAME_LINE,"Reason:Failing") ;
       
   444          }  
       
   445          #endif//__SYMBIAN32__         
       
   446     }
       
   447 
       
   448     if (wstr != wstr_buf)
       
   449         delete[] wstr;
       
   450 
       
   451     return nfailures;
       
   452 }
       
   453 
       
   454 /**************************************************************************/
       
   455 
       
   456 // for convenience
       
   457 #define boolalpha   std::ios_base::boolalpha
       
   458 #define dec         std::ios_base::dec
       
   459 #define fixed       std::ios_base::fixed
       
   460 #define hex         std::ios_base::hex
       
   461 #define internal    std::ios_base::internal
       
   462 #define left        std::ios_base::left
       
   463 #define oct         std::ios_base::oct
       
   464 #define right       std::ios_base::right
       
   465 #define scientific  std::ios_base::scientific
       
   466 #define showbase    std::ios_base::showbase
       
   467 #define showpoint   std::ios_base::showpoint
       
   468 #define showpos     std::ios_base::showpos
       
   469 #define skipws      std::ios_base::skipws
       
   470 #define unitbuf     std::ios_base::unitbuf
       
   471 #define uppercase   std::ios_base::uppercase
       
   472 #define bin         std::ios_base::bin
       
   473 #define adjustfield std::ios_base::adjustfield
       
   474 #define basefield   std::ios_base::basefield
       
   475 #define floatfield  std::ios_base::floatfield
       
   476 #define nolock      std::ios_base::nolock
       
   477 #define nolockbuf   std::ios_base::nolockbuf
       
   478 
       
   479 #define Bad         std::ios_base::badbit
       
   480 #define Eof         std::ios_base::eofbit
       
   481 #define Fail        std::ios_base::failbit
       
   482 #define Good        std::ios_base::goodbit
       
   483 
       
   484 /*************************************************************************/
       
   485 template <class numT>
       
   486 class rw_any_template_t
       
   487 {
       
   488 public:
       
   489 	rw_any_template_t(numT aNumT) : iNumT(aNumT)
       
   490 	{
       
   491 	}
       
   492 	const char* const type_name ()
       
   493 	{
       
   494 	iNumT.type_name();
       
   495 	}
       
   496 private:
       
   497 	numT iNumT;
       
   498 };
       
   499 
       
   500 template <class charT, class numT>
       
   501 void test_errno (charT, numT)
       
   502 {
       
   503     // verify that errno doesn't change after, or affects
       
   504     // a successful extraction
       
   505 
       
   506     const char* const cname = rw_any_t (charT ()).type_name ();
       
   507     const char* const tname = cname;//rw_any_template_t <numT>(numT()).type_name (); //FIX
       
   508 
       
   509     rw_info (0, 0, 0, "std::num_get<%s>::get (..., %s&) and errno",
       
   510              cname, tname);
       
   511 
       
   512     const int errnos[] = {
       
   513         ERANGE, -4, -3, -2, -1, 0, 1, 2, 3, 4,
       
   514         Bad, Eof, Fail, Bad | Eof, Bad | Fail, Eof | Fail, Bad | Eof | Fail
       
   515     };
       
   516 
       
   517     int i;
       
   518 #define TEST_ERRNO(val)                                              \
       
   519     for (i = 0; i != sizeof errnos / sizeof *errnos; ++i) {          \
       
   520         errno = errnos [i];                                          \
       
   521         TEST (T, numT (val), _RWSTD_STR (val),                       \
       
   522               sizeof (_RWSTD_STR (val)) -1, 0, Eof);                 \
       
   523          if(errnos [i] != errno)                                     \
       
   524          {                                                           \
       
   525            failures++;                                               \
       
   526          std_log(LOG_FILENAME_LINE,"%d. errno unexpectedly changed from %d to %d",   \
       
   527                     i, errnos [i], errno);                           \
       
   528                     }                                                 \
       
   529     }
       
   530     
       
   531    /* 
       
   532   void test1(int val)  
       
   533   {
       
   534      int i;
       
   535        for (i = 0; i != sizeof errnos / sizeof *errnos; ++i) {       
       
   536                errno = errnos [i];                                          
       
   537         TEST (T, numT (val), _RWSTD_STR (val),                       
       
   538               sizeof (_RWSTD_STR (val)) -1, 0, Eof);                 
       
   539         if(errnos [i] != errno)
       
   540         {
       
   541          failures++;
       
   542          std_log(LOG_FILENAME_LINE,"%d. errno unexpectedly changed from %d to %d",   i, errnos [i], errno);                                        
       
   543         }
       
   544                  
       
   545     }
       
   546         
       
   547   };
       
   548   
       
   549   #define TEST_ERRNO (val)   test1(val) 
       
   550       
       
   551   */
       
   552     // prevent warnings when numT is unsigned
       
   553     numT zero      = numT ();
       
   554     numT minus_one = numT (~0);
       
   555 
       
   556    std_log(LOG_FILENAME_LINE,"Test start");
       
   557     TEST_ERRNO (0);
       
   558    std_log(LOG_FILENAME_LINE,"Test end");
       
   559    std_log(LOG_FILENAME_LINE,"Test start"); 
       
   560     TEST_ERRNO (1);
       
   561    std_log(LOG_FILENAME_LINE,"Test end");
       
   562     std_log(LOG_FILENAME_LINE,"Test start");
       
   563     TEST_ERRNO (12);
       
   564     std_log(LOG_FILENAME_LINE,"Test end");
       
   565     std_log(LOG_FILENAME_LINE,"Test start");
       
   566     TEST_ERRNO (123);
       
   567     std_log(LOG_FILENAME_LINE,"Test end");
       
   568     std_log(LOG_FILENAME_LINE,"Test start");
       
   569     TEST_ERRNO (1234);
       
   570     std_log(LOG_FILENAME_LINE,"Test end");
       
   571     std_log(LOG_FILENAME_LINE,"Test start");
       
   572     TEST_ERRNO (12345);
       
   573     std_log(LOG_FILENAME_LINE,"Test end");
       
   574     std_log(LOG_FILENAME_LINE,"Test start");
       
   575     TEST_ERRNO (12346);
       
   576     std_log(LOG_FILENAME_LINE,"Test end");
       
   577     std_log(LOG_FILENAME_LINE,"Test start");
       
   578     TEST_ERRNO (12347);
       
   579     std_log(LOG_FILENAME_LINE,"Test end");
       
   580     std_log(LOG_FILENAME_LINE,"Test start");
       
   581     TEST_ERRNO (12348);
       
   582     std_log(LOG_FILENAME_LINE,"Test end");
       
   583     std_log(LOG_FILENAME_LINE,"Test start");
       
   584     TEST_ERRNO (12349);
       
   585  std_log(LOG_FILENAME_LINE,"Test end");
       
   586     if (minus_one > zero)
       
   587         return;
       
   588 std_log(LOG_FILENAME_LINE,"Test start");
       
   589     TEST_ERRNO (-1);
       
   590     std_log(LOG_FILENAME_LINE,"Test end");
       
   591     std_log(LOG_FILENAME_LINE,"Test start");
       
   592     TEST_ERRNO (-12);
       
   593      std_log(LOG_FILENAME_LINE,"Test end");
       
   594     std_log(LOG_FILENAME_LINE,"Test start");
       
   595     TEST_ERRNO (-123);
       
   596     std_log(LOG_FILENAME_LINE,"Test end");
       
   597     std_log(LOG_FILENAME_LINE,"Test start");
       
   598     TEST_ERRNO (-1234);
       
   599      std_log(LOG_FILENAME_LINE,"Test end");
       
   600     std_log(LOG_FILENAME_LINE,"Test start");
       
   601     TEST_ERRNO (-12345);
       
   602     std_log(LOG_FILENAME_LINE,"Test end");
       
   603     std_log(LOG_FILENAME_LINE,"Test start");
       
   604      TEST_ERRNO (-12346);
       
   605     std_log(LOG_FILENAME_LINE,"Test end");
       
   606     std_log(LOG_FILENAME_LINE,"Test start");
       
   607     TEST_ERRNO (-12347);
       
   608      std_log(LOG_FILENAME_LINE,"Test end");
       
   609      std_log(LOG_FILENAME_LINE,"Test start");
       
   610     TEST_ERRNO (-12348);
       
   611      std_log(LOG_FILENAME_LINE,"Test end");
       
   612  std_log(LOG_FILENAME_LINE,"Test start");
       
   613     TEST_ERRNO (-12349);
       
   614   std_log(LOG_FILENAME_LINE,"Test end");
       
   615   std_log(LOG_FILENAME_LINE,"Test start");
       
   616 }
       
   617 
       
   618 /**************************************************************************/
       
   619 
       
   620 template <class charT>
       
   621 void test_bool (charT, const char *cname)
       
   622 {
       
   623 #ifndef NO_GET_BOOL
       
   624 
       
   625     const char* const tname = "bool";
       
   626 
       
   627     rw_info (0, 0, 0, "std::num_get<%s>::get (..., %s&)", cname, tname);
       
   628 
       
   629     Punct<charT>::decimal_point_ = '.';
       
   630     Punct<charT>::thousands_sep_ = ',';
       
   631 
       
   632     {
       
   633         static const charT names[][6] = {
       
   634             { 'f', 'a', 'l', 's', 'e', '\0' },
       
   635             { 't', 'r', 'u', 'e', '\0' }
       
   636         };
       
   637 
       
   638         Punct<charT>::falsename_ = names [0];
       
   639         Punct<charT>::truename_  = names [1];
       
   640     }
       
   641 
       
   642     // lwg issue 17: special treatment for bool:
       
   643 
       
   644     // The in iterator is always left pointing one position beyond
       
   645     // the last character successfully matched. If val is set, then
       
   646     // err is set to str.good; or to str.eof if, when seeking
       
   647     // another character to match, it is found that (in==end). If
       
   648     // val is not set, then err is set to str.fail; or to
       
   649     // (str.fail|str.eof) if the reason for the failure was
       
   650     // that (in==end). [Example: for targets true:"a" and false:"abb",
       
   651     // the input sequence "a" yields val==true and err==str.eof;
       
   652     // the input sequence "abc" yields err=str.fail, with in ending
       
   653     // at the 'c' element. For targets true:"1" and false:"0", the
       
   654     // input sequence "1" yields val==true and err=str.good. For
       
   655     // empty targets (""), any input sequence yields err==str.fail.
       
   656     // --end example]
       
   657 
       
   658     // arguments are passed in the following order:
       
   659     //
       
   660     // [v]   (out)      N/A   expected value
       
   661     // [s]   (in)       N/A   character string to parse or a printf
       
   662     //                        specifier to format [v] with
       
   663     // [n]   (out)       -1   number of characters consumed
       
   664     // [f]   (in)         0   iosflags
       
   665     // [e]   (in|out)    -1   expected iostate after parsing
       
   666     // [g]   (in)        ""   grouping string, or a scanf
       
   667     //                        specifier to parse [s] with
       
   668 
       
   669     // bool, numeric parsing
       
   670     std_log(LOG_FILENAME_LINE,"Test start");
       
   671     TEST (T, false, "0", 1, 0, Eof);
       
   672      std_log(LOG_FILENAME_LINE,"Test end");
       
   673      std_log(LOG_FILENAME_LINE,"Test start");
       
   674 
       
   675     TEST (T, true,  "1", 1, 0, Eof);
       
   676      std_log(LOG_FILENAME_LINE,"Test end");
       
   677      std_log(LOG_FILENAME_LINE,"Test start");
       
   678 
       
   679     TEST (T, false, "2", 1, 0, Fail | Eof);
       
   680      std_log(LOG_FILENAME_LINE,"Test end");
       
   681      std_log(LOG_FILENAME_LINE,"Test start");
       
   682 
       
   683     TEST (T, false, "0x0",  3, 0, Eof);
       
   684      std_log(LOG_FILENAME_LINE,"Test end");
       
   685      std_log(LOG_FILENAME_LINE,"Test start");
       
   686 
       
   687     TEST (T, true,  "0x1",  3, 0, Eof);
       
   688      std_log(LOG_FILENAME_LINE,"Test end");
       
   689      std_log(LOG_FILENAME_LINE,"Test start");
       
   690 
       
   691     TEST (T, true,  "0x01", 4, 0, Eof);
       
   692      std_log(LOG_FILENAME_LINE,"Test end");
       
   693      std_log(LOG_FILENAME_LINE,"Test start");
       
   694 
       
   695     TEST (T, false, "0x20", 4, 0, Fail | Eof);
       
   696      std_log(LOG_FILENAME_LINE,"Test end");
       
   697      std_log(LOG_FILENAME_LINE,"Test start");
       
   698 
       
   699     TEST (T, false, "",     0, 0, Fail | Eof);
       
   700      std_log(LOG_FILENAME_LINE,"Test end");
       
   701      std_log(LOG_FILENAME_LINE,"Test start");
       
   702 
       
   703     TEST (T, false, "0+", 1, 0, Good);
       
   704      std_log(LOG_FILENAME_LINE,"Test end");
       
   705      std_log(LOG_FILENAME_LINE,"Test start");
       
   706 
       
   707     TEST (T, true,  "1+", 1, 0, Good);
       
   708      std_log(LOG_FILENAME_LINE,"Test end");
       
   709      std_log(LOG_FILENAME_LINE,"Test start");
       
   710 
       
   711     TEST (T, false, "2+", 1, 0, Fail);
       
   712      std_log(LOG_FILENAME_LINE,"Test end");
       
   713      std_log(LOG_FILENAME_LINE,"Test start");
       
   714 
       
   715     TEST (T, false, "0-", 1, 0, Good);
       
   716      std_log(LOG_FILENAME_LINE,"Test end");
       
   717      std_log(LOG_FILENAME_LINE,"Test start");
       
   718 
       
   719     TEST (T, true,  "1-", 1, 0, Good);
       
   720      std_log(LOG_FILENAME_LINE,"Test end");
       
   721      std_log(LOG_FILENAME_LINE,"Test start");
       
   722 
       
   723     TEST (T, false, "2-", 1, 0, Fail);
       
   724      std_log(LOG_FILENAME_LINE,"Test end");
       
   725      std_log(LOG_FILENAME_LINE,"Test start");
       
   726 
       
   727     TEST (T, false, "00",  2, 0, Eof);
       
   728      std_log(LOG_FILENAME_LINE,"Test end");
       
   729      std_log(LOG_FILENAME_LINE,"Test start");
       
   730 
       
   731     TEST (T, true,  "01",  2, 0, Eof);
       
   732      std_log(LOG_FILENAME_LINE,"Test end");
       
   733      std_log(LOG_FILENAME_LINE,"Test start");
       
   734 
       
   735     TEST (T, false, "02",  2, 0, Fail | Eof);
       
   736      std_log(LOG_FILENAME_LINE,"Test end");
       
   737      std_log(LOG_FILENAME_LINE,"Test start");
       
   738 
       
   739     TEST (T, false, "012", 3, 0, Fail | Eof);
       
   740      std_log(LOG_FILENAME_LINE,"Test end");
       
   741      std_log(LOG_FILENAME_LINE,"Test start");
       
   742 
       
   743     TEST (T, false, "+0 ", 2, 0, Good);
       
   744      std_log(LOG_FILENAME_LINE,"Test end");
       
   745      std_log(LOG_FILENAME_LINE,"Test start");
       
   746 
       
   747     TEST (T, true,  "+1 ", 2, 0, Good);
       
   748      std_log(LOG_FILENAME_LINE,"Test end");
       
   749      std_log(LOG_FILENAME_LINE,"Test start");
       
   750 
       
   751     TEST (T, false, "+2 ", 2, 0, Fail);
       
   752      std_log(LOG_FILENAME_LINE,"Test end");
       
   753      std_log(LOG_FILENAME_LINE,"Test start");
       
   754 
       
   755     TEST (T, false, "-0 ", 2, 0, Good);
       
   756      std_log(LOG_FILENAME_LINE,"Test end");
       
   757      std_log(LOG_FILENAME_LINE,"Test start");
       
   758 
       
   759     TEST (T, false, "-1 ", 2, 0, Fail);
       
   760      std_log(LOG_FILENAME_LINE,"Test end");
       
   761      std_log(LOG_FILENAME_LINE,"Test start");
       
   762 
       
   763     TEST (T, false, "-2 ", 2, 0, Fail);
       
   764 
       
   765      std_log(LOG_FILENAME_LINE,"Test end");
       
   766      std_log(LOG_FILENAME_LINE,"Test start");
       
   767     TEST (T, false, "++1", 1, 0, Fail);
       
   768      std_log(LOG_FILENAME_LINE,"Test end");
       
   769      std_log(LOG_FILENAME_LINE,"Test start");
       
   770 
       
   771     TEST (T, false, "+-1", 1, 0, Fail);
       
   772      std_log(LOG_FILENAME_LINE,"Test end");
       
   773      std_log(LOG_FILENAME_LINE,"Test start");
       
   774     TEST (T, false, "-+1", 1, 0, Fail);
       
   775      std_log(LOG_FILENAME_LINE,"Test end");
       
   776      std_log(LOG_FILENAME_LINE,"Test start");
       
   777 
       
   778     TEST (T, false, "--1", 1, 0, Fail);
       
   779      std_log(LOG_FILENAME_LINE,"Test end");
       
   780      std_log(LOG_FILENAME_LINE,"Test start");
       
   781 
       
   782     TEST (T, false, "+000+",  4, 0, Good);
       
   783      std_log(LOG_FILENAME_LINE,"Test end");
       
   784      std_log(LOG_FILENAME_LINE,"Test start");
       
   785 
       
   786     TEST (T, false, "+000-",  4, 0, Good);
       
   787      std_log(LOG_FILENAME_LINE,"Test end");
       
   788      std_log(LOG_FILENAME_LINE,"Test start");
       
   789 
       
   790     TEST (T, true,  "+001-",  4, 0, Good);
       
   791      std_log(LOG_FILENAME_LINE,"Test end");
       
   792      std_log(LOG_FILENAME_LINE,"Test start");
       
   793 
       
   794     TEST (T, false, "+002",   4, 0, Eof | Fail);
       
   795      std_log(LOG_FILENAME_LINE,"Test end");
       
   796      std_log(LOG_FILENAME_LINE,"Test start");
       
   797 
       
   798     TEST (T, false, "-000-",  4, 0, Good);
       
   799 
       
   800      std_log(LOG_FILENAME_LINE,"Test end");
       
   801      std_log(LOG_FILENAME_LINE,"Test start");
       
   802     TEST (T, false, "-000+",  4, 0, Good);
       
   803 
       
   804      std_log(LOG_FILENAME_LINE,"Test end");
       
   805      std_log(LOG_FILENAME_LINE,"Test start");
       
   806     TEST (T, false, "-001- ", 4, 0, Fail);
       
   807      std_log(LOG_FILENAME_LINE,"Test end");
       
   808      std_log(LOG_FILENAME_LINE,"Test start");
       
   809 
       
   810     TEST (T, false, "-002- ", 4, 0, Fail);
       
   811      std_log(LOG_FILENAME_LINE,"Test end");
       
   812      std_log(LOG_FILENAME_LINE,"Test start");
       
   813 
       
   814     TEST (T, false, "-012- ", 4, 0, Fail);
       
   815      std_log(LOG_FILENAME_LINE,"Test end");
       
   816      std_log(LOG_FILENAME_LINE,"Test start");
       
   817 
       
   818     TEST (T, false, "0.0", 1, 0, Good);
       
   819      std_log(LOG_FILENAME_LINE,"Test end");
       
   820      std_log(LOG_FILENAME_LINE,"Test start");
       
   821 
       
   822     TEST (T, true,  "1.1", 1, 0, Good);
       
   823      std_log(LOG_FILENAME_LINE,"Test end");
       
   824      std_log(LOG_FILENAME_LINE,"Test start");
       
   825 
       
   826     TEST (T, false, "-0.00 ", 2, 0, Good);
       
   827      std_log(LOG_FILENAME_LINE,"Test end");
       
   828      std_log(LOG_FILENAME_LINE,"Test start");
       
   829 
       
   830     TEST (T, false, "+00.01", 3, 0, Good);
       
   831      std_log(LOG_FILENAME_LINE,"Test end");
       
   832      std_log(LOG_FILENAME_LINE,"Test start");
       
   833     TEST (T, true,  "+1.12.", 2, 0, Good);
       
   834      std_log(LOG_FILENAME_LINE,"Test end");
       
   835      std_log(LOG_FILENAME_LINE,"Test start");
       
   836 
       
   837     // bool, numeric parsing with grouping
       
   838 
       
   839     Punct<charT>::thousands_sep_ = ';';
       
   840 
       
   841     TEST (T, false,        "0;0",  3, 0, Eof, "\1");
       
   842 
       
   843      std_log(LOG_FILENAME_LINE,"Test end");
       
   844      std_log(LOG_FILENAME_LINE,"Test start");
       
   845     TEST (T, false,       "+0;0",  4, 0, Eof, "\1");
       
   846 
       
   847      std_log(LOG_FILENAME_LINE,"Test end");
       
   848      std_log(LOG_FILENAME_LINE,"Test start");
       
   849     TEST (T, false,       "-0;0",  4, 0, Eof, "\1");
       
   850      std_log(LOG_FILENAME_LINE,"Test end");
       
   851      std_log(LOG_FILENAME_LINE,"Test start");
       
   852     TEST (T, false,      "0;0;0",  5, 0, Eof, "\1");
       
   853      std_log(LOG_FILENAME_LINE,"Test end");
       
   854      std_log(LOG_FILENAME_LINE,"Test start");
       
   855 
       
   856     TEST (T, false,    "0;0;0;0",  7, 0, Eof, "\1");
       
   857      std_log(LOG_FILENAME_LINE,"Test end");
       
   858      std_log(LOG_FILENAME_LINE,"Test start");
       
   859     TEST (T, true,          "01",  2, 0, Eof, "\2");
       
   860      std_log(LOG_FILENAME_LINE,"Test end");
       
   861      std_log(LOG_FILENAME_LINE,"Test start");
       
   862 
       
   863     TEST (T, true,        "0;01",  4, 0, Eof, "\2");
       
   864      std_log(LOG_FILENAME_LINE,"Test end");
       
   865      std_log(LOG_FILENAME_LINE,"Test start");
       
   866 
       
   867     TEST (T, true,       "00;01",  5, 0, Eof, "\2");
       
   868         std_log(LOG_FILENAME_LINE,"Test end");
       
   869      std_log(LOG_FILENAME_LINE,"Test start");
       
   870 
       
   871     TEST (T, true,        "0;01",  4, 0, Eof, "\2");
       
   872      std_log(LOG_FILENAME_LINE,"Test end");
       
   873      std_log(LOG_FILENAME_LINE,"Test start");
       
   874 
       
   875     TEST (T, false,       "00;0",  4, 0, Eof, "\1\2");
       
   876      std_log(LOG_FILENAME_LINE,"Test end");
       
   877      std_log(LOG_FILENAME_LINE,"Test start");
       
   878 
       
   879     TEST (T, false,     "0;00;0",  6, 0, Eof, "\1\2\3");
       
   880      std_log(LOG_FILENAME_LINE,"Test end");
       
   881      std_log(LOG_FILENAME_LINE,"Test start");
       
   882 
       
   883     TEST (T, false,   "000;00;0",  8, 0, Eof, "\1\2\3");
       
   884      std_log(LOG_FILENAME_LINE,"Test end");
       
   885      std_log(LOG_FILENAME_LINE,"Test start");
       
   886 
       
   887     TEST (T, false, "0;000;00;0", 10, 0, Eof, "\1\2\3");
       
   888      std_log(LOG_FILENAME_LINE,"Test end");
       
   889      std_log(LOG_FILENAME_LINE,"Test start");
       
   890 
       
   891     TEST (T, true,        "00;1",  4, 0, Eof, "\1\2");
       
   892      std_log(LOG_FILENAME_LINE,"Test end");
       
   893      std_log(LOG_FILENAME_LINE,"Test start");
       
   894 
       
   895     TEST (T, true,      "0;00;1",  6, 0, Eof, "\1\2\3");
       
   896      std_log(LOG_FILENAME_LINE,"Test end");
       
   897      std_log(LOG_FILENAME_LINE,"Test start");
       
   898 
       
   899     TEST (T, true,    "000;00;1",  8, 0, Eof, "\1\2\3");
       
   900      std_log(LOG_FILENAME_LINE,"Test end");
       
   901      std_log(LOG_FILENAME_LINE,"Test start");
       
   902 
       
   903     TEST (T, true,  "0;000;00;1", 10, 0, Eof, "\1\2\3");
       
   904      std_log(LOG_FILENAME_LINE,"Test end");
       
   905      std_log(LOG_FILENAME_LINE,"Test start");
       
   906 
       
   907     TEST (T, true, "+0;000;00;1", 11, 0, Eof, "\1\2\3");
       
   908      std_log(LOG_FILENAME_LINE,"Test end");
       
   909      std_log(LOG_FILENAME_LINE,"Test start");
       
   910 
       
   911     // bad groups, invalid input: do not store value, set failbit
       
   912     // the format of integers in 22.2.3.1, p2 is:
       
   913     //
       
   914     //   integer   ::= [sign] units
       
   915     //   sign      ::= plusminus [whitespace]
       
   916     //   plusminus ::= '+' | '-'
       
   917     //   units     ::= digits [thousands-sep units]
       
   918     //   digits    ::= digit [digits]
       
   919     //
       
   920     // i.e., thousands-sep may only appear at most one at a time and
       
   921     // only when enclosed within a sequence of digits and not first
       
   922     // or last
       
   923 
       
   924     TEST (T, false,      ";0", 0, 0, Fail,       "\1");
       
   925      std_log(LOG_FILENAME_LINE,"Test end");
       
   926      std_log(LOG_FILENAME_LINE,"Test start");
       
   927 
       
   928     TEST (T, false,      "0;", 2, 0, Eof | Fail, "\1");
       
   929      std_log(LOG_FILENAME_LINE,"Test end");
       
   930      std_log(LOG_FILENAME_LINE,"Test start");
       
   931 
       
   932     TEST (T, false,     "0;;", 2, 0, Fail,       "\1");
       
   933      std_log(LOG_FILENAME_LINE,"Test end");
       
   934      std_log(LOG_FILENAME_LINE,"Test start");
       
   935 
       
   936     TEST (T, false,    ";0;0", 0, 0, Fail,       "\1");
       
   937      std_log(LOG_FILENAME_LINE,"Test end");
       
   938      std_log(LOG_FILENAME_LINE,"Test start");
       
   939 
       
   940     TEST (T, false,     ";01", 0, 0, Fail,       "\2");
       
   941      std_log(LOG_FILENAME_LINE,"Test end");
       
   942      std_log(LOG_FILENAME_LINE,"Test start");
       
   943 
       
   944     TEST (T, false,     "01;", 3, 0, Eof | Fail, "\2");
       
   945      std_log(LOG_FILENAME_LINE,"Test end");
       
   946      std_log(LOG_FILENAME_LINE,"Test start");
       
   947 
       
   948     TEST (T, false,    "01;;", 3, 0, Fail,       "\2");
       
   949      std_log(LOG_FILENAME_LINE,"Test end");
       
   950      std_log(LOG_FILENAME_LINE,"Test start");
       
   951 
       
   952     TEST (T, false,  ";;0;01", 0, 0, Fail,       "\2");
       
   953      std_log(LOG_FILENAME_LINE,"Test end");
       
   954      std_log(LOG_FILENAME_LINE,"Test start");
       
   955 
       
   956     TEST (T, false,  "00;;01", 3, 0, Fail,       "\2");
       
   957      std_log(LOG_FILENAME_LINE,"Test end");
       
   958      std_log(LOG_FILENAME_LINE,"Test start");
       
   959 
       
   960     TEST (T, false, "00;;;01", 3, 0, Fail,       "\2");
       
   961      std_log(LOG_FILENAME_LINE,"Test end");
       
   962      std_log(LOG_FILENAME_LINE,"Test start");
       
   963 
       
   964     TEST (T, false,    ";;11", 0, 0, Fail,       "\3");
       
   965      std_log(LOG_FILENAME_LINE,"Test end");
       
   966      std_log(LOG_FILENAME_LINE,"Test start");
       
   967 
       
   968     TEST (T, false,   "+;;12", 1, 0, Fail,       "\3");
       
   969      std_log(LOG_FILENAME_LINE,"Test end");
       
   970      std_log(LOG_FILENAME_LINE,"Test start");
       
   971 
       
   972     TEST (T, false,   "-;;13", 1, 0, Fail,       "\3");
       
   973      std_log(LOG_FILENAME_LINE,"Test end");
       
   974      std_log(LOG_FILENAME_LINE,"Test start");
       
   975 
       
   976     TEST (T, false,   "01;;4", 3, 0, Fail,       "\3");
       
   977      std_log(LOG_FILENAME_LINE,"Test end");
       
   978      std_log(LOG_FILENAME_LINE,"Test start");
       
   979 
       
   980     // bad groups, valid input: store value and set failbit
       
   981     // this is different from the above in that the integer grammar
       
   982     // is satisifed but the positions of the thousands_sep characters
       
   983     // in otherwise valid input do not match the specified grouping
       
   984 
       
   985     TEST (T, true, "00;0;1", 6, 0, Eof | Fail, "\1");
       
   986      std_log(LOG_FILENAME_LINE,"Test end");
       
   987 #ifndef	SAME_AS_UNIX_COMMENT     
       
   988      std_log(LOG_FILENAME_LINE,"Test start");
       
   989 
       
   990     // bool, boolalpha parsing
       
   991     TEST (T, false, "false", 5, boolalpha, Good);
       
   992      std_log(LOG_FILENAME_LINE,"Test end");
       
   993      std_log(LOG_FILENAME_LINE,"Test start");
       
   994 
       
   995     TEST (T, true,  "true",  4, boolalpha, Good);
       
   996      std_log(LOG_FILENAME_LINE,"Test end");
       
   997 #endif          
       
   998      std_log(LOG_FILENAME_LINE,"Test start");
       
   999 
       
  1000     TEST (T, false, "falsee", 5, boolalpha, Good);
       
  1001      std_log(LOG_FILENAME_LINE,"Test end");
       
  1002      std_log(LOG_FILENAME_LINE,"Test start");
       
  1003 
       
  1004     TEST (T, true,  "truee",  4, boolalpha, Good);
       
  1005      std_log(LOG_FILENAME_LINE,"Test end");
       
  1006      std_log(LOG_FILENAME_LINE,"Test start");
       
  1007 
       
  1008     TEST (T, false, "False", 0, boolalpha, Fail);
       
  1009      std_log(LOG_FILENAME_LINE,"Test end");
       
  1010      std_log(LOG_FILENAME_LINE,"Test start");
       
  1011 
       
  1012     TEST (T, false, "True",  0, boolalpha, Fail);
       
  1013      std_log(LOG_FILENAME_LINE,"Test end");
       
  1014      std_log(LOG_FILENAME_LINE,"Test start");
       
  1015 
       
  1016     TEST (T, false, "falsE", 4, boolalpha, Fail);
       
  1017      std_log(LOG_FILENAME_LINE,"Test end");
       
  1018      std_log(LOG_FILENAME_LINE,"Test start");
       
  1019 
       
  1020     TEST (T, false, "truE",  3, boolalpha, Fail);
       
  1021      std_log(LOG_FILENAME_LINE,"Test end");
       
  1022      std_log(LOG_FILENAME_LINE,"Test start");
       
  1023 
       
  1024     TEST (T, false, "fals", 4, boolalpha, Eof | Fail);
       
  1025      std_log(LOG_FILENAME_LINE,"Test end");
       
  1026      std_log(LOG_FILENAME_LINE,"Test start");
       
  1027 
       
  1028     TEST (T, false, "tru",  3, boolalpha, Eof | Fail);
       
  1029      std_log(LOG_FILENAME_LINE,"Test end");
       
  1030      std_log(LOG_FILENAME_LINE,"Test start");
       
  1031 
       
  1032     TEST (T, false, "fal", 3, boolalpha, Eof | Fail);
       
  1033      std_log(LOG_FILENAME_LINE,"Test end");
       
  1034      std_log(LOG_FILENAME_LINE,"Test start");
       
  1035 
       
  1036     TEST (T, false, "tr",  2, boolalpha, Eof | Fail);
       
  1037      std_log(LOG_FILENAME_LINE,"Test end");
       
  1038      std_log(LOG_FILENAME_LINE,"Test start");
       
  1039 
       
  1040     TEST (T, false, "fa", 2, boolalpha, Eof | Fail);
       
  1041      std_log(LOG_FILENAME_LINE,"Test end");
       
  1042      std_log(LOG_FILENAME_LINE,"Test start");
       
  1043 
       
  1044     TEST (T, false, "t",  1, boolalpha, Eof | Fail);
       
  1045      std_log(LOG_FILENAME_LINE,"Test end");
       
  1046      std_log(LOG_FILENAME_LINE,"Test start");
       
  1047 
       
  1048     TEST (T, false, "f", 1, boolalpha, Eof | Fail);
       
  1049      std_log(LOG_FILENAME_LINE,"Test end");
       
  1050      std_log(LOG_FILENAME_LINE,"Test start");
       
  1051 
       
  1052     TEST (T, false, "",  0, boolalpha, Eof | Fail);
       
  1053      std_log(LOG_FILENAME_LINE,"Test end");
       
  1054 
       
  1055 
       
  1056     {
       
  1057         static const charT names[][7] = {
       
  1058             { 'b', 'o', 'o', 'l', ':', '-', '\0' },
       
  1059             { 'b', 'o', 'o', 'l', ':', '+', '\0' }
       
  1060         };
       
  1061 
       
  1062         Punct<charT>::falsename_ = names [0];
       
  1063         Punct<charT>::truename_  = names [1];
       
  1064     }
       
  1065 
       
  1066      std_log(LOG_FILENAME_LINE,"Test start");
       
  1067 
       
  1068     TEST (T, false, "false", 0, boolalpha, Fail);
       
  1069      std_log(LOG_FILENAME_LINE,"Test end");
       
  1070      std_log(LOG_FILENAME_LINE,"Test start");
       
  1071 
       
  1072     TEST (T, false, "true",  0, boolalpha, Fail);
       
  1073      std_log(LOG_FILENAME_LINE,"Test end");
       
  1074      std_log(LOG_FILENAME_LINE,"Test start");
       
  1075 #ifndef	SAME_AS_UNIX_COMMENT 
       
  1076     TEST (T, false, "bool:-", 6, boolalpha, Good);
       
  1077      std_log(LOG_FILENAME_LINE,"Test end");
       
  1078      std_log(LOG_FILENAME_LINE,"Test start");
       
  1079 
       
  1080     TEST (T, true,  "bool:+", 6, boolalpha, Good);
       
  1081      std_log(LOG_FILENAME_LINE,"Test end");
       
  1082 #endif     
       
  1083      std_log(LOG_FILENAME_LINE,"Test start");
       
  1084 
       
  1085     TEST (T, false, "bool: ", 5, boolalpha, Fail);
       
  1086      std_log(LOG_FILENAME_LINE,"Test end");
       
  1087      std_log(LOG_FILENAME_LINE,"Test start");
       
  1088 
       
  1089     TEST (T, false, "bool: ", 5, boolalpha, Fail);
       
  1090      std_log(LOG_FILENAME_LINE,"Test end");
       
  1091 
       
  1092 
       
  1093 
       
  1094     {
       
  1095         static const charT names[][8] = {
       
  1096             { 'B', 'o', 'o', 'l', '\0' },
       
  1097             { 'B', 'o', 'o', 'l', 'e', 'a', 'n', '\0' }
       
  1098         };
       
  1099 
       
  1100         Punct<charT>::falsename_ = names [0];
       
  1101         Punct<charT>::truename_  = names [1];
       
  1102     }
       
  1103 
       
  1104      std_log(LOG_FILENAME_LINE,"Test start");
       
  1105 
       
  1106     TEST (T, false, "false", 0, boolalpha, Fail);
       
  1107      std_log(LOG_FILENAME_LINE,"Test end");
       
  1108      std_log(LOG_FILENAME_LINE,"Test start");
       
  1109 
       
  1110     TEST (T, false, "true",  0, boolalpha, Fail);
       
  1111      std_log(LOG_FILENAME_LINE,"Test end");
       
  1112      std_log(LOG_FILENAME_LINE,"Test start");
       
  1113 
       
  1114     TEST (T, false, "Bool",    4, boolalpha, Eof);
       
  1115      std_log(LOG_FILENAME_LINE,"Test end");
       
  1116 #ifndef	SAME_AS_UNIX_COMMENT 
       
  1117      std_log(LOG_FILENAME_LINE,"Test start");
       
  1118 
       
  1119     TEST (T, true,  "Boolean", 7, boolalpha, Good);
       
  1120      std_log(LOG_FILENAME_LINE,"Test end");
       
  1121      std_log(LOG_FILENAME_LINE,"Test start");
       
  1122 
       
  1123     TEST (T, false, "Boole",  5, boolalpha, Eof | Fail);
       
  1124      std_log(LOG_FILENAME_LINE,"Test end");
       
  1125      std_log(LOG_FILENAME_LINE,"Test start");
       
  1126 
       
  1127     TEST (T, false, "Boolea", 6, boolalpha, Eof | Fail);
       
  1128      std_log(LOG_FILENAME_LINE,"Test end");
       
  1129 #endif
       
  1130 
       
  1131 
       
  1132     {
       
  1133         static const charT names[][8] = {
       
  1134             { 'B', 'O', 'O', 'L', 'E', 'A', 'N', '\0' },
       
  1135             { 'B', 'O', 'O', 'L', '\0' }
       
  1136         };
       
  1137 
       
  1138         Punct<charT>::falsename_ = names [0];
       
  1139         Punct<charT>::truename_  = names [1];
       
  1140     }
       
  1141 
       
  1142      std_log(LOG_FILENAME_LINE,"Test start");
       
  1143 
       
  1144     TEST (T, false, "false", 0, boolalpha, Fail);
       
  1145      std_log(LOG_FILENAME_LINE,"Test end");
       
  1146      std_log(LOG_FILENAME_LINE,"Test start");
       
  1147 
       
  1148     TEST (T, false, "true",  0, boolalpha, Fail);
       
  1149      std_log(LOG_FILENAME_LINE,"Test end");
       
  1150 #ifndef	SAME_AS_UNIX_COMMENT 
       
  1151      std_log(LOG_FILENAME_LINE,"Test start");
       
  1152 
       
  1153     TEST (T, false, "BOOLEAN", 7, boolalpha, Good);
       
  1154      std_log(LOG_FILENAME_LINE,"Test end");
       
  1155 #endif     
       
  1156      std_log(LOG_FILENAME_LINE,"Test start");
       
  1157 
       
  1158     TEST (T, true,  "BOOL",    4, boolalpha, Eof);
       
  1159      std_log(LOG_FILENAME_LINE,"Test end");
       
  1160      std_log(LOG_FILENAME_LINE,"Test start");
       
  1161 
       
  1162     TEST (T, true,  "BOOL ",   4, boolalpha, Good);
       
  1163      std_log(LOG_FILENAME_LINE,"Test end");
       
  1164 #ifndef	SAME_AS_UNIX_COMMENT      
       
  1165      std_log(LOG_FILENAME_LINE,"Test start");
       
  1166 
       
  1167 
       
  1168     // the parsing algorithm is greedy, partial matches fail even
       
  1169     // if one keyword is a subset of the other and the shorter one
       
  1170     // is a subset of the characters matched so far
       
  1171     TEST (T, false, "BOOLEA", 6, boolalpha, Eof | Fail);
       
  1172      std_log(LOG_FILENAME_LINE,"Test end");
       
  1173      std_log(LOG_FILENAME_LINE,"Test start");
       
  1174 
       
  1175     TEST (T, false, "BOOLE",  5, boolalpha, Eof | Fail);
       
  1176      std_log(LOG_FILENAME_LINE,"Test end");
       
  1177 #endif
       
  1178 
       
  1179 
       
  1180     {
       
  1181         static const charT names[][8] = {
       
  1182             { '1', '\0' },
       
  1183             { '0', '\0' }
       
  1184         };
       
  1185 
       
  1186         Punct<charT>::falsename_ = names [0];
       
  1187         Punct<charT>::truename_  = names [1];
       
  1188     }
       
  1189 
       
  1190      std_log(LOG_FILENAME_LINE,"Test start");
       
  1191 
       
  1192     TEST (T, false, "false", 0, boolalpha, Fail);
       
  1193      std_log(LOG_FILENAME_LINE,"Test end");
       
  1194      std_log(LOG_FILENAME_LINE,"Test start");
       
  1195 
       
  1196     TEST (T, false, "true",  0, boolalpha, Fail);
       
  1197      std_log(LOG_FILENAME_LINE,"Test end");
       
  1198 #ifndef	SAME_AS_UNIX_COMMENT  
       
  1199      std_log(LOG_FILENAME_LINE,"Test start");
       
  1200 
       
  1201     TEST (T, false, "1", 1, boolalpha, Good);
       
  1202      std_log(LOG_FILENAME_LINE,"Test end");
       
  1203      std_log(LOG_FILENAME_LINE,"Test start");
       
  1204 
       
  1205     TEST (T, true,  "0", 1, boolalpha, Good);
       
  1206      std_log(LOG_FILENAME_LINE,"Test end");
       
  1207 #endif     
       
  1208      std_log(LOG_FILENAME_LINE,"Test start");
       
  1209 
       
  1210     // numeric parsing with "0" and "1" as keywords
       
  1211     TEST (T, false, "0", 1, 0, Eof);
       
  1212      std_log(LOG_FILENAME_LINE,"Test end");
       
  1213      std_log(LOG_FILENAME_LINE,"Test start");
       
  1214     TEST (T, true,  "1", 1, 0, Eof);
       
  1215      std_log(LOG_FILENAME_LINE,"Test end");
       
  1216      std_log(LOG_FILENAME_LINE,"Test start");
       
  1217 
       
  1218     TEST (T, false, "11", 1, boolalpha, Good);
       
  1219      std_log(LOG_FILENAME_LINE,"Test end");
       
  1220      std_log(LOG_FILENAME_LINE,"Test start");
       
  1221     TEST (T, true,  "00", 1, boolalpha, Good);
       
  1222      std_log(LOG_FILENAME_LINE,"Test end");
       
  1223      std_log(LOG_FILENAME_LINE,"Test start");
       
  1224 
       
  1225     TEST (T, false, "+1", 0, boolalpha, Fail);
       
  1226      std_log(LOG_FILENAME_LINE,"Test end");
       
  1227      std_log(LOG_FILENAME_LINE,"Test start");
       
  1228     TEST (T, false, "+0", 0, boolalpha, Fail);
       
  1229      std_log(LOG_FILENAME_LINE,"Test end");
       
  1230 
       
  1231 
       
  1232 #else   // if defined (NO_GET_BOOL)
       
  1233 
       
  1234     _RWSTD_UNUSED (t);
       
  1235 
       
  1236 #endif   // NO_GET_BOOL
       
  1237 
       
  1238 }
       
  1239 
       
  1240 /**************************************************************************/
       
  1241 //#ifndef __SYMBIAN32__   // Bug -> 481
       
  1242 
       
  1243 template <class charT>
       
  1244 void test_shrt (charT, const char *cname)
       
  1245 {
       
  1246 #ifndef _RWSTD_NO_EXT_NUM_GET
       
  1247 #  ifndef NO_GET_SHRT
       
  1248 
       
  1249     const char* const tname = "short";
       
  1250 
       
  1251     rw_info (0, 0, 0, "extension: std::num_get<%s>::get (..., %s&)",
       
  1252              cname, tname);
       
  1253 
       
  1254     // short parsing of 0, no base specified
       
  1255     std_log(LOG_FILENAME_LINE,"Test start");
       
  1256     TEST (T, short (0), "%hi",  1, 0, Eof, "%hi");
       
  1257      std_log(LOG_FILENAME_LINE,"Test end");     
       
  1258      std_log(LOG_FILENAME_LINE,"Test start");
       
  1259     TEST (T, short (0), "%ho",  1, 0, Eof, "%hi");
       
  1260      std_log(LOG_FILENAME_LINE,"Test end");     
       
  1261      std_log(LOG_FILENAME_LINE,"Test start");
       
  1262 
       
  1263     TEST (T, short (0), "%hx",  1, 0, Eof, "%hi");
       
  1264      std_log(LOG_FILENAME_LINE,"Test end");     
       
  1265      std_log(LOG_FILENAME_LINE,"Test start");
       
  1266 
       
  1267     TEST (T, short (0), "%#hx", 1, 0, Eof, "%hi");
       
  1268      std_log(LOG_FILENAME_LINE,"Test end");     
       
  1269      std_log(LOG_FILENAME_LINE,"Test start");
       
  1270 
       
  1271     TEST (T, short (1),        "%hi",  1, 0, Eof, "%hi");
       
  1272      std_log(LOG_FILENAME_LINE,"Test end");     
       
  1273      std_log(LOG_FILENAME_LINE,"Test start");
       
  1274 
       
  1275     TEST (T, short (SHRT_MAX), "%hi", -1, 0, Eof, "%hi");
       
  1276      std_log(LOG_FILENAME_LINE,"Test end");     
       
  1277      std_log(LOG_FILENAME_LINE,"Test start");
       
  1278 
       
  1279     TEST (T, short (SHRT_MIN), "%hi", -1, 0, Eof, "%hi");
       
  1280      std_log(LOG_FILENAME_LINE,"Test end");     
       
  1281 
       
  1282 
       
  1283     rw_info (0, 0, 0, "extension: base 1 (Roman)");
       
  1284 
       
  1285 #define BASE(n)   ((n)  << _RWSTD_IOS_BASEOFF)
       
  1286      std_log(LOG_FILENAME_LINE,"Test start");
       
  1287     TEST (T, short ( 0), "0",     1, BASE (1), Eof);
       
  1288     std_log(LOG_FILENAME_LINE,"Test end");
       
  1289 #ifndef	SAME_AS_UNIX_COMMENT  
       
  1290     std_log(LOG_FILENAME_LINE,"Test start");
       
  1291     TEST (T, short ( 1), "i",     1, BASE (1), Eof);
       
  1292     std_log(LOG_FILENAME_LINE,"Test end");
       
  1293     std_log(LOG_FILENAME_LINE,"Test start");
       
  1294 
       
  1295     TEST (T, short ( 2), "ii",    2, BASE (1), Eof);
       
  1296     std_log(LOG_FILENAME_LINE,"Test end");
       
  1297     std_log(LOG_FILENAME_LINE,"Test start");
       
  1298 
       
  1299     TEST (T, short ( 3), "iii",   3, BASE (1), Eof);
       
  1300     std_log(LOG_FILENAME_LINE,"Test end");
       
  1301     std_log(LOG_FILENAME_LINE,"Test start");
       
  1302 
       
  1303     TEST (T, short ( 4), "iiii",  4, BASE (1), Eof);
       
  1304     std_log(LOG_FILENAME_LINE,"Test end");
       
  1305     std_log(LOG_FILENAME_LINE,"Test start");
       
  1306 
       
  1307     TEST (T, short ( 4), "iv",    2, BASE (1), Eof);
       
  1308     std_log(LOG_FILENAME_LINE,"Test end");
       
  1309     std_log(LOG_FILENAME_LINE,"Test start");
       
  1310 
       
  1311     TEST (T, short ( 5), "v",     1, BASE (1), Eof);
       
  1312     std_log(LOG_FILENAME_LINE,"Test end");
       
  1313     std_log(LOG_FILENAME_LINE,"Test start");
       
  1314 
       
  1315     TEST (T, short ( 6), "vi",    2, BASE (1), Eof);
       
  1316     std_log(LOG_FILENAME_LINE,"Test end");
       
  1317     std_log(LOG_FILENAME_LINE,"Test start");
       
  1318 
       
  1319     TEST (T, short ( 7), "vii",   3, BASE (1), Eof);
       
  1320 
       
  1321     std_log(LOG_FILENAME_LINE,"Test end");
       
  1322     std_log(LOG_FILENAME_LINE,"Test start");
       
  1323     TEST (T, short ( 8), "viii",  4, BASE (1), Eof);
       
  1324     std_log(LOG_FILENAME_LINE,"Test end");
       
  1325     std_log(LOG_FILENAME_LINE,"Test start");
       
  1326 
       
  1327     TEST (T, short ( 9), "viiii", 5, BASE (1), Eof);
       
  1328     std_log(LOG_FILENAME_LINE,"Test end");
       
  1329     std_log(LOG_FILENAME_LINE,"Test start");
       
  1330 
       
  1331     TEST (T, short ( 9), "ix",    2, BASE (1), Eof);
       
  1332     std_log(LOG_FILENAME_LINE,"Test end");
       
  1333     std_log(LOG_FILENAME_LINE,"Test start");
       
  1334    TEST (T, short (10), "x",     1, BASE (1), Eof);
       
  1335     std_log(LOG_FILENAME_LINE,"Test end");
       
  1336     std_log(LOG_FILENAME_LINE,"Test start");
       
  1337 
       
  1338     TEST (T, short (  12), "XII",         3, BASE (1), Eof);
       
  1339     std_log(LOG_FILENAME_LINE,"Test end");
       
  1340     std_log(LOG_FILENAME_LINE,"Test start");
       
  1341 
       
  1342     TEST (T, short ( 123), "CXXIII",      6, BASE (1), Eof);
       
  1343     std_log(LOG_FILENAME_LINE,"Test end");
       
  1344     std_log(LOG_FILENAME_LINE,"Test start");
       
  1345 
       
  1346     TEST (T, short (1234), "MCCXXXIV",    8, BASE (1), Eof);
       
  1347     std_log(LOG_FILENAME_LINE,"Test end");
       
  1348     std_log(LOG_FILENAME_LINE,"Test start");
       
  1349 
       
  1350     TEST (T, short (2345), "MMCCCXLV",    8, BASE (1), Eof); 
       
  1351     std_log(LOG_FILENAME_LINE,"Test end");
       
  1352     std_log(LOG_FILENAME_LINE,"Test start");
       
  1353     TEST (T, short (3456), "MMMCDLVI",    8, BASE (1), Eof);
       
  1354     std_log(LOG_FILENAME_LINE,"Test end");
       
  1355     std_log(LOG_FILENAME_LINE,"Test start");
       
  1356     TEST (T, short (4567), "MMMMDLXVII", 10, BASE (1), Eof); 
       
  1357     std_log(LOG_FILENAME_LINE,"Test end");
       
  1358     std_log(LOG_FILENAME_LINE,"Test start");
       
  1359     TEST (T, short (4999), "MMMMCMXCIX", 10, BASE (1), Eof); 
       
  1360     std_log(LOG_FILENAME_LINE,"Test end");
       
  1361 #endif    
       
  1362     std_log(LOG_FILENAME_LINE,"Test start");
       
  1363     TEST (T, short (5000), "5000",        4, BASE (1), Eof); 
       
  1364     std_log(LOG_FILENAME_LINE,"Test end");
       
  1365     std_log(LOG_FILENAME_LINE,"Test start");
       
  1366     TEST (T, short (5678), "5678",        4, BASE (1), Eof); 
       
  1367     std_log(LOG_FILENAME_LINE,"Test end");
       
  1368     std_log(LOG_FILENAME_LINE,"Test start");
       
  1369 
       
  1370     TEST (T, short (5001), "5001i",       4, BASE (1), Good); 
       
  1371     std_log(LOG_FILENAME_LINE,"Test end");
       
  1372     std_log(LOG_FILENAME_LINE,"Test start");
       
  1373     TEST (T, short (5002), "5002v",       4, BASE (1), Good); 
       
  1374     std_log(LOG_FILENAME_LINE,"Test end");
       
  1375     std_log(LOG_FILENAME_LINE,"Test start");
       
  1376     TEST (T, short (5003), "5003x",       4, BASE (1), Good); 
       
  1377     std_log(LOG_FILENAME_LINE,"Test end");
       
  1378     std_log(LOG_FILENAME_LINE,"Test start");
       
  1379     TEST (T, short (5004), "5004l",       4, BASE (1), Good); 
       
  1380     std_log(LOG_FILENAME_LINE,"Test end");
       
  1381     std_log(LOG_FILENAME_LINE,"Test start");
       
  1382     TEST (T, short (5005), "5005d",       4, BASE (1), Good); 
       
  1383     std_log(LOG_FILENAME_LINE,"Test end");
       
  1384     std_log(LOG_FILENAME_LINE,"Test start");
       
  1385     TEST (T, short (5006), "5006m",       4, BASE (1), Good); 
       
  1386     std_log(LOG_FILENAME_LINE,"Test end");
       
  1387 
       
  1388 
       
  1389     rw_info (0, 0, 0, "extension: base 2 (ios_base::bin, binary)");
       
  1390 
       
  1391     std_log(LOG_FILENAME_LINE,"Test start");
       
  1392 
       
  1393     TEST (T, short (  0), "0",      1, BASE (2), Eof);
       
  1394     std_log(LOG_FILENAME_LINE,"Test end");
       
  1395     std_log(LOG_FILENAME_LINE,"Test start");
       
  1396 
       
  1397     TEST (T, short (  1), "1",      1, BASE (2), Eof);
       
  1398 
       
  1399     std_log(LOG_FILENAME_LINE,"Test end");
       
  1400 #ifndef	SAME_AS_UNIX_COMMENT      
       
  1401     std_log(LOG_FILENAME_LINE,"Test start");
       
  1402     TEST (T, short (  2), "10",     2, BASE (2), Eof);
       
  1403     std_log(LOG_FILENAME_LINE,"Test end");
       
  1404     std_log(LOG_FILENAME_LINE,"Test start");
       
  1405 
       
  1406     TEST (T, short (  3), "11",     2, BASE (2), Eof);
       
  1407     std_log(LOG_FILENAME_LINE,"Test end");
       
  1408     std_log(LOG_FILENAME_LINE,"Test start");
       
  1409     TEST (T, short (  4), "100",    3, BASE (2), Eof);
       
  1410     std_log(LOG_FILENAME_LINE,"Test end");
       
  1411     std_log(LOG_FILENAME_LINE,"Test start");
       
  1412 
       
  1413     TEST (T, short (  5), "101",    3, BASE (2), Eof);
       
  1414     std_log(LOG_FILENAME_LINE,"Test end");
       
  1415     std_log(LOG_FILENAME_LINE,"Test start");
       
  1416     TEST (T, short (  6), "110",    3, BASE (2), Eof);
       
  1417     std_log(LOG_FILENAME_LINE,"Test end");
       
  1418     std_log(LOG_FILENAME_LINE,"Test start");
       
  1419     TEST (T, short (  7), "111",    3, BASE (2), Eof);
       
  1420     std_log(LOG_FILENAME_LINE,"Test end");
       
  1421     std_log(LOG_FILENAME_LINE,"Test start");
       
  1422     TEST (T, short (  8), "1000",   4, BASE (2), Eof);
       
  1423     std_log(LOG_FILENAME_LINE,"Test end");
       
  1424     std_log(LOG_FILENAME_LINE,"Test start");
       
  1425     TEST (T, short (  9), "1001",   4, BASE (2), Eof);
       
  1426     std_log(LOG_FILENAME_LINE,"Test end");
       
  1427     std_log(LOG_FILENAME_LINE,"Test start");
       
  1428     TEST (T, short ( 10), "1010",   4, BASE (2), Eof);
       
  1429     std_log(LOG_FILENAME_LINE,"Test end");
       
  1430     std_log(LOG_FILENAME_LINE,"Test start");
       
  1431     TEST (T, short ( 11), "1011",   4, BASE (2), Eof);
       
  1432     std_log(LOG_FILENAME_LINE,"Test end");
       
  1433     std_log(LOG_FILENAME_LINE,"Test start");
       
  1434     TEST (T, short ( 12), "1100",   4, BASE (2), Eof);
       
  1435     std_log(LOG_FILENAME_LINE,"Test end");
       
  1436     std_log(LOG_FILENAME_LINE,"Test start");
       
  1437     TEST (T, short ( 13), "1101",   4, BASE (2), Eof);
       
  1438     std_log(LOG_FILENAME_LINE,"Test end");
       
  1439     std_log(LOG_FILENAME_LINE,"Test start");
       
  1440     TEST (T, short ( 14), "1110",   4, BASE (2), Eof);
       
  1441     std_log(LOG_FILENAME_LINE,"Test end");
       
  1442     std_log(LOG_FILENAME_LINE,"Test start");
       
  1443     TEST (T, short ( 15), "1111",   4, BASE (2), Eof);
       
  1444     std_log(LOG_FILENAME_LINE,"Test end");
       
  1445     std_log(LOG_FILENAME_LINE,"Test start");
       
  1446     TEST (T, short ( 16), "10000",  5, BASE (2), Eof);
       
  1447     std_log(LOG_FILENAME_LINE,"Test end");
       
  1448     std_log(LOG_FILENAME_LINE,"Test start");
       
  1449     TEST (T, short ( 17), "+10001", 6, BASE (2), Eof);
       
  1450     std_log(LOG_FILENAME_LINE,"Test end");
       
  1451     std_log(LOG_FILENAME_LINE,"Test start");
       
  1452     TEST (T, short (-18), "-10010", 6, BASE (2), Eof);
       
  1453     std_log(LOG_FILENAME_LINE,"Test end");
       
  1454     std_log(LOG_FILENAME_LINE,"Test start");
       
  1455 
       
  1456     TEST (T, short (17), "100012",  5, BASE (2), Good);
       
  1457     std_log(LOG_FILENAME_LINE,"Test end");
       
  1458     std_log(LOG_FILENAME_LINE,"Test start");
       
  1459     TEST (T, short (18), "100103",  5, BASE (2), Good);
       
  1460     std_log(LOG_FILENAME_LINE,"Test end");
       
  1461     std_log(LOG_FILENAME_LINE,"Test start");
       
  1462     TEST (T, short (19), "100114",  5, BASE (2), Good);
       
  1463     std_log(LOG_FILENAME_LINE,"Test end");
       
  1464 #endif    
       
  1465     std_log(LOG_FILENAME_LINE,"Test start");
       
  1466 
       
  1467     rw_info (0, 0, 0, "extension: base 3");
       
  1468 
       
  1469     TEST (T, short ( 0), "0",     1, BASE (3), Eof);
       
  1470     std_log(LOG_FILENAME_LINE,"Test end");
       
  1471     std_log(LOG_FILENAME_LINE,"Test start");
       
  1472     TEST (T, short ( 1), "1",     1, BASE (3), Eof);
       
  1473     std_log(LOG_FILENAME_LINE,"Test end");
       
  1474     std_log(LOG_FILENAME_LINE,"Test start");
       
  1475     TEST (T, short ( 2), "2",     1, BASE (3), Eof);
       
  1476     std_log(LOG_FILENAME_LINE,"Test end");
       
  1477 #ifndef	SAME_AS_UNIX_COMMENT      
       
  1478     std_log(LOG_FILENAME_LINE,"Test start");
       
  1479     TEST (T, short ( 3), "10",    2, BASE (3), Eof);
       
  1480     std_log(LOG_FILENAME_LINE,"Test end");
       
  1481     std_log(LOG_FILENAME_LINE,"Test start");
       
  1482     TEST (T, short ( 4), "11",    2, BASE (3), Eof);
       
  1483     std_log(LOG_FILENAME_LINE,"Test end");
       
  1484     std_log(LOG_FILENAME_LINE,"Test start");
       
  1485     TEST (T, short ( 5), "12",    2, BASE (3), Eof);
       
  1486     std_log(LOG_FILENAME_LINE,"Test end");
       
  1487     std_log(LOG_FILENAME_LINE,"Test start");
       
  1488     TEST (T, short ( 6), "20",    2, BASE (3), Eof);
       
  1489     std_log(LOG_FILENAME_LINE,"Test end");
       
  1490     std_log(LOG_FILENAME_LINE,"Test start");
       
  1491     TEST (T, short ( 7), "21",    2, BASE (3), Eof);
       
  1492     std_log(LOG_FILENAME_LINE,"Test end");
       
  1493     std_log(LOG_FILENAME_LINE,"Test start");
       
  1494     TEST (T, short ( 8), "22",    2, BASE (3), Eof);
       
  1495     std_log(LOG_FILENAME_LINE,"Test end");
       
  1496     std_log(LOG_FILENAME_LINE,"Test start");
       
  1497 
       
  1498     TEST (T, short ( 8), "223",   2, BASE (3), Good);
       
  1499     std_log(LOG_FILENAME_LINE,"Test end");
       
  1500 #endif
       
  1501 
       
  1502     if (rw_opt_no_errno) {
       
  1503         rw_note (0, 0, 0, "errno test disabled");
       
  1504     }
       
  1505     else {
       
  1506         test_errno (charT (), short ());
       
  1507     }
       
  1508 
       
  1509 #  else   // if defined (NO_GET_SHRT)
       
  1510 
       
  1511     _RWSTD_UNUSED (t);
       
  1512 
       
  1513 #  endif   // NO_GET_SHRT
       
  1514 #endif   // _RWSTD_NO_EXT_NUM_GET
       
  1515 
       
  1516 }
       
  1517 //#endif
       
  1518 /**************************************************************************/
       
  1519 //#ifndef __SYMBIAN32__ // Bug 481
       
  1520 
       
  1521 template <class charT>
       
  1522 void test_int (charT, const char *cname)
       
  1523 {
       
  1524 #ifndef _RWSTD_NO_EXT_NUM_GET
       
  1525 #  ifndef NO_GET_INT
       
  1526 
       
  1527     const char* const tname = "int";
       
  1528 
       
  1529     rw_info (0, 0, 0, "extension: std::num_get<%s>::get (..., %s&)",
       
  1530              cname, tname);
       
  1531 
       
  1532     std_log(LOG_FILENAME_LINE,"Test start");
       
  1533 
       
  1534     TEST (T, 0, "%i",  1, 0, Eof, "%i");
       
  1535     std_log(LOG_FILENAME_LINE,"Test end");
       
  1536     std_log(LOG_FILENAME_LINE,"Test start");
       
  1537     TEST (T, 0, "%o",  1, 0, Eof, "%i");
       
  1538     std_log(LOG_FILENAME_LINE,"Test end");
       
  1539     std_log(LOG_FILENAME_LINE,"Test start");
       
  1540     TEST (T, 0, "%x",  1, 0, Eof, "%i");
       
  1541     std_log(LOG_FILENAME_LINE,"Test end");
       
  1542     std_log(LOG_FILENAME_LINE,"Test start");
       
  1543     TEST (T, 0, "%#x", 1, 0, Eof, "%i");
       
  1544     std_log(LOG_FILENAME_LINE,"Test end");
       
  1545 
       
  1546 
       
  1547     if (rw_opt_no_errno) {
       
  1548         rw_note (0, 0, 0, "errno test disabled");
       
  1549     }
       
  1550     else {
       
  1551         test_errno (charT (), int ());
       
  1552     }
       
  1553 
       
  1554 #  else   // if defined (NO_GET_INT)
       
  1555 
       
  1556     _RWSTD_UNUSED (t);
       
  1557 
       
  1558 #  endif   // NO_GET_INT
       
  1559 #endif   // _RWSTD_NO_EXT_NUM_GET
       
  1560 
       
  1561 }
       
  1562 //#endif //__SYMBIAN32__
       
  1563 /**************************************************************************/
       
  1564 
       
  1565 
       
  1566 template <class charT>
       
  1567 void test_long (charT, const char *cname)
       
  1568 {
       
  1569 #ifndef NO_GET_LONG
       
  1570 
       
  1571     const char* const tname = "long";
       
  1572 
       
  1573     rw_info (0, 0, 0, "std::num_get<%s>::get (..., %s&)",
       
  1574              cname, tname);
       
  1575 
       
  1576     // 22.2.3.1, p2 -- integer grammar:
       
  1577     // 
       
  1578     // integer   ::= [sign] units
       
  1579     // sign      ::= plusminus [whitespace]
       
  1580     // plusminus ::= '+' | '-'
       
  1581     // units     ::= digits [thousands-sep units]
       
  1582     // digits    ::= digit [digits]
       
  1583     // digit     ::=   '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'
       
  1584     //               | '8' | '9' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F'
       
  1585     //               | 'a' | 'b' | 'c' | 'd' | 'e' | 'f'
       
  1586 
       
  1587 
       
  1588     // long parsing of 0, no base specified
       
  1589 
       
  1590     std_log(LOG_FILENAME_LINE,"Test start");
       
  1591 
       
  1592     TEST (T, 0L, "%li",  1, 0, Eof, "%li");
       
  1593     std_log(LOG_FILENAME_LINE,"Test end");
       
  1594     std_log(LOG_FILENAME_LINE,"Test start");
       
  1595     TEST (T, 0L, "%lo",  1, 0, Eof, "%li");
       
  1596     std_log(LOG_FILENAME_LINE,"Test end");
       
  1597     std_log(LOG_FILENAME_LINE,"Test start");
       
  1598     TEST (T, 0L, "%lx",  1, 0, Eof, "%li");
       
  1599     std_log(LOG_FILENAME_LINE,"Test end");
       
  1600     std_log(LOG_FILENAME_LINE,"Test start");
       
  1601     TEST (T, 0L, "%#lx", 1, 0, Eof, "%li");
       
  1602     std_log(LOG_FILENAME_LINE,"Test end");
       
  1603     std_log(LOG_FILENAME_LINE,"Test start");
       
  1604 
       
  1605     TEST (T, 0L, "",            0, 0, Eof | Fail);
       
  1606     std_log(LOG_FILENAME_LINE,"Test end");
       
  1607     std_log(LOG_FILENAME_LINE,"Test start");
       
  1608     TEST (T, 0L, "+",           1, 0, Eof | Fail);
       
  1609     std_log(LOG_FILENAME_LINE,"Test end");
       
  1610     std_log(LOG_FILENAME_LINE,"Test start");
       
  1611     TEST (T, 0L, "-",           1, 0, Eof | Fail);
       
  1612     std_log(LOG_FILENAME_LINE,"Test end");
       
  1613     std_log(LOG_FILENAME_LINE,"Test start");
       
  1614     TEST (T, 0L, "0",           1, 0, Eof);
       
  1615     std_log(LOG_FILENAME_LINE,"Test end");
       
  1616     std_log(LOG_FILENAME_LINE,"Test start");
       
  1617     TEST (T, 0L, "00",          2, 0, Eof);
       
  1618     std_log(LOG_FILENAME_LINE,"Test end");
       
  1619     std_log(LOG_FILENAME_LINE,"Test start");
       
  1620     TEST (T, 0L, "+0",          2, 0, Eof);
       
  1621     std_log(LOG_FILENAME_LINE,"Test end");
       
  1622     std_log(LOG_FILENAME_LINE,"Test start");
       
  1623     TEST (T, 0L, "-0",          2, 0, Eof);
       
  1624     std_log(LOG_FILENAME_LINE,"Test end");
       
  1625     std_log(LOG_FILENAME_LINE,"Test start");
       
  1626     TEST (T, 0L, "0x0",         3, 0, Eof);
       
  1627     std_log(LOG_FILENAME_LINE,"Test end");
       
  1628     std_log(LOG_FILENAME_LINE,"Test start");
       
  1629     TEST (T, 0L, "0X0",         3, 0, Eof);
       
  1630     std_log(LOG_FILENAME_LINE,"Test end");
       
  1631     std_log(LOG_FILENAME_LINE,"Test start");
       
  1632     TEST (T, 0L, "+0x0",        4, 0, Eof);
       
  1633     std_log(LOG_FILENAME_LINE,"Test end");
       
  1634     std_log(LOG_FILENAME_LINE,"Test start");
       
  1635     TEST (T, 0L, "-0x0",        4, 0, Eof);
       
  1636     std_log(LOG_FILENAME_LINE,"Test end");
       
  1637     std_log(LOG_FILENAME_LINE,"Test start");
       
  1638     TEST (T, 0L, "0x0x",        3, 0, Good);
       
  1639     std_log(LOG_FILENAME_LINE,"Test end");
       
  1640     std_log(LOG_FILENAME_LINE,"Test start");
       
  1641     TEST (T, 0L, "00000000",    8, 0, Eof);
       
  1642     std_log(LOG_FILENAME_LINE,"Test end");
       
  1643     std_log(LOG_FILENAME_LINE,"Test start");
       
  1644     TEST (T, 0L, "0x00000000", 10, 0, Eof);
       
  1645     std_log(LOG_FILENAME_LINE,"Test end");
       
  1646     std_log(LOG_FILENAME_LINE,"Test start");
       
  1647     TEST (T, 0L, "0-",          1, 0, Good);
       
  1648     std_log(LOG_FILENAME_LINE,"Test end");
       
  1649     std_log(LOG_FILENAME_LINE,"Test start");
       
  1650     TEST (T, 0L, "0+",          1, 0, Good);
       
  1651     std_log(LOG_FILENAME_LINE,"Test end");
       
  1652     std_log(LOG_FILENAME_LINE,"Test start");
       
  1653     TEST (T, 0L, "0.",          1, 0, Good);
       
  1654     std_log(LOG_FILENAME_LINE,"Test end");
       
  1655     std_log(LOG_FILENAME_LINE,"Test start");
       
  1656     
       
  1657     // long parsing of 0, base 10
       
  1658     TEST (T, 0L, "0",          1, dec, Eof);
       
  1659     std_log(LOG_FILENAME_LINE,"Test end");
       
  1660     std_log(LOG_FILENAME_LINE,"Test start");
       
  1661     TEST (T, 0L, "00",         2, dec, Eof);
       
  1662     std_log(LOG_FILENAME_LINE,"Test end");
       
  1663     std_log(LOG_FILENAME_LINE,"Test start");
       
  1664     TEST (T, 0L, "+0",         2, dec, Eof);
       
  1665     std_log(LOG_FILENAME_LINE,"Test end");
       
  1666     std_log(LOG_FILENAME_LINE,"Test start");
       
  1667     TEST (T, 0L, "-0",         2, dec, Eof);
       
  1668     std_log(LOG_FILENAME_LINE,"Test end");
       
  1669     std_log(LOG_FILENAME_LINE,"Test start");
       
  1670     TEST (T, 0L, "0x0",        1, dec, Good);
       
  1671     std_log(LOG_FILENAME_LINE,"Test end");
       
  1672     std_log(LOG_FILENAME_LINE,"Test start");
       
  1673     TEST (T, 0L, "+0x0",       2, dec, Good);
       
  1674     std_log(LOG_FILENAME_LINE,"Test end");
       
  1675     std_log(LOG_FILENAME_LINE,"Test start");
       
  1676     TEST (T, 0L, "-0x0",       2, dec, Good);
       
  1677     std_log(LOG_FILENAME_LINE,"Test end");
       
  1678     std_log(LOG_FILENAME_LINE,"Test start");
       
  1679     TEST (T, 0L, "00000000",   8, dec, Eof);
       
  1680     std_log(LOG_FILENAME_LINE,"Test end");
       
  1681     std_log(LOG_FILENAME_LINE,"Test start");
       
  1682     TEST (T, 0L, "0x00000000", 1, dec, Good);
       
  1683     std_log(LOG_FILENAME_LINE,"Test end");
       
  1684     std_log(LOG_FILENAME_LINE,"Test start");
       
  1685     TEST (T, 0L, "0-",         1, dec, Good);
       
  1686     std_log(LOG_FILENAME_LINE,"Test end");
       
  1687     std_log(LOG_FILENAME_LINE,"Test start");
       
  1688     TEST (T, 0L, "0+",         1, dec, Good);
       
  1689     std_log(LOG_FILENAME_LINE,"Test end");
       
  1690     std_log(LOG_FILENAME_LINE,"Test start");
       
  1691     TEST (T, 0L, "0.",         1, dec, Good);
       
  1692     std_log(LOG_FILENAME_LINE,"Test end");
       
  1693     std_log(LOG_FILENAME_LINE,"Test start");
       
  1694 
       
  1695     // long parsing of 0, base 8
       
  1696     TEST (T, 0L, "0",          1, oct, Eof);
       
  1697     std_log(LOG_FILENAME_LINE,"Test end");
       
  1698     std_log(LOG_FILENAME_LINE,"Test start");
       
  1699     TEST (T, 0L, "00",         2, oct, Eof);
       
  1700     std_log(LOG_FILENAME_LINE,"Test end");
       
  1701     std_log(LOG_FILENAME_LINE,"Test start");
       
  1702     TEST (T, 0L, "+0",         2, oct, Eof);
       
  1703     std_log(LOG_FILENAME_LINE,"Test end");
       
  1704     std_log(LOG_FILENAME_LINE,"Test start");
       
  1705     TEST (T, 0L, "-0",         2, oct, Eof);
       
  1706     std_log(LOG_FILENAME_LINE,"Test end");
       
  1707     std_log(LOG_FILENAME_LINE,"Test start");
       
  1708     TEST (T, 0L, "0x0",        1, oct, Good);
       
  1709     std_log(LOG_FILENAME_LINE,"Test end");
       
  1710     std_log(LOG_FILENAME_LINE,"Test start");
       
  1711     TEST (T, 0L, "+0x0",       2, oct, Good);
       
  1712     std_log(LOG_FILENAME_LINE,"Test end");
       
  1713     std_log(LOG_FILENAME_LINE,"Test start");
       
  1714     TEST (T, 0L, "-0x0",       2, oct, Good);
       
  1715     std_log(LOG_FILENAME_LINE,"Test end");
       
  1716     std_log(LOG_FILENAME_LINE,"Test start");
       
  1717     TEST (T, 0L, "00000000",   8, oct, Eof);
       
  1718     std_log(LOG_FILENAME_LINE,"Test end");
       
  1719     std_log(LOG_FILENAME_LINE,"Test start");
       
  1720     TEST (T, 0L, "0x00000000", 1, oct, Good);
       
  1721     std_log(LOG_FILENAME_LINE,"Test end");
       
  1722     std_log(LOG_FILENAME_LINE,"Test start");
       
  1723     TEST (T, 0L, "0-",         1, oct, Good);
       
  1724     std_log(LOG_FILENAME_LINE,"Test end");
       
  1725     std_log(LOG_FILENAME_LINE,"Test start");
       
  1726     TEST (T, 0L, "0+",         1, oct, Good);
       
  1727     std_log(LOG_FILENAME_LINE,"Test end");
       
  1728     std_log(LOG_FILENAME_LINE,"Test start");
       
  1729     TEST (T, 0L, "0.",         1, oct, Good);
       
  1730     std_log(LOG_FILENAME_LINE,"Test end");
       
  1731     std_log(LOG_FILENAME_LINE,"Test start");
       
  1732 
       
  1733     // long parsing of 0, base 16
       
  1734     TEST (T, 0L, "0",           1, hex, Eof);
       
  1735     std_log(LOG_FILENAME_LINE,"Test end");
       
  1736     std_log(LOG_FILENAME_LINE,"Test start");
       
  1737 
       
  1738     TEST (T, 0L, "00",          2, hex, Eof);
       
  1739     std_log(LOG_FILENAME_LINE,"Test end");
       
  1740     std_log(LOG_FILENAME_LINE,"Test start");
       
  1741     TEST (T, 0L, "+0",          2, hex, Eof);
       
  1742     std_log(LOG_FILENAME_LINE,"Test end");
       
  1743     std_log(LOG_FILENAME_LINE,"Test start");
       
  1744     TEST (T, 0L, "-0",          2, hex, Eof);
       
  1745     std_log(LOG_FILENAME_LINE,"Test end");
       
  1746     std_log(LOG_FILENAME_LINE,"Test start");
       
  1747     TEST (T, 0L, "0x0",         3, hex, Eof);
       
  1748     std_log(LOG_FILENAME_LINE,"Test end");
       
  1749     std_log(LOG_FILENAME_LINE,"Test start");
       
  1750     TEST (T, 0L, "0X00",        4, hex, Eof);
       
  1751     std_log(LOG_FILENAME_LINE,"Test end");
       
  1752     std_log(LOG_FILENAME_LINE,"Test start");
       
  1753     TEST (T, 0L, "+0x0",        4, hex, Eof);
       
  1754     std_log(LOG_FILENAME_LINE,"Test end");
       
  1755     std_log(LOG_FILENAME_LINE,"Test start");
       
  1756     TEST (T, 0L, "-0x0",        4, hex, Eof);
       
  1757     std_log(LOG_FILENAME_LINE,"Test end");
       
  1758     std_log(LOG_FILENAME_LINE,"Test start");
       
  1759     TEST (T, 0L, "00000000",    8, hex, Eof);
       
  1760     std_log(LOG_FILENAME_LINE,"Test end");
       
  1761     std_log(LOG_FILENAME_LINE,"Test start");
       
  1762     TEST (T, 0L, "0x00000000", 10, hex, Eof);
       
  1763     std_log(LOG_FILENAME_LINE,"Test end");
       
  1764     std_log(LOG_FILENAME_LINE,"Test start");
       
  1765     TEST (T, 0L, "0-",          1, hex, Good);
       
  1766     std_log(LOG_FILENAME_LINE,"Test end");
       
  1767     std_log(LOG_FILENAME_LINE,"Test start");
       
  1768     TEST (T, 0L, "0+",          1, hex, Good);
       
  1769     std_log(LOG_FILENAME_LINE,"Test end");
       
  1770     std_log(LOG_FILENAME_LINE,"Test start");
       
  1771     TEST (T, 0L, "0.",          1, hex, Good);
       
  1772     std_log(LOG_FILENAME_LINE,"Test end");
       
  1773     std_log(LOG_FILENAME_LINE,"Test start");
       
  1774 
       
  1775     // long parsing, no base specified
       
  1776     //     assumes sizeof(long) >= 4
       
  1777 
       
  1778     _RWSTD_ASSERT (sizeof (long) >= 4);
       
  1779 
       
  1780     TEST (T,         1L,         "1",  1, 0, Eof, "%li");
       
  1781 
       
  1782     std_log(LOG_FILENAME_LINE,"Test end");
       
  1783     std_log(LOG_FILENAME_LINE,"Test start");
       
  1784     TEST (T,        12L,        "12",  2, 0, Eof, "%li");
       
  1785     std_log(LOG_FILENAME_LINE,"Test end");
       
  1786     std_log(LOG_FILENAME_LINE,"Test start");
       
  1787     TEST (T,       123L,       "123",  3, 0, Eof, "%li");
       
  1788     std_log(LOG_FILENAME_LINE,"Test end");
       
  1789     std_log(LOG_FILENAME_LINE,"Test start");
       
  1790     TEST (T,      1234L,      "1234",  4, 0, Eof, "%li");
       
  1791     std_log(LOG_FILENAME_LINE,"Test end");
       
  1792     std_log(LOG_FILENAME_LINE,"Test start");
       
  1793     TEST (T,     12345L,     "12345",  5, 0, Eof, "%li");
       
  1794     std_log(LOG_FILENAME_LINE,"Test end");
       
  1795     std_log(LOG_FILENAME_LINE,"Test start");
       
  1796     TEST (T,    123456L,    "123456",  6, 0, Eof, "%li");
       
  1797     std_log(LOG_FILENAME_LINE,"Test end");
       
  1798     std_log(LOG_FILENAME_LINE,"Test start");
       
  1799     TEST (T,   1234567L,   "1234567",  7, 0, Eof, "%li");
       
  1800     std_log(LOG_FILENAME_LINE,"Test end");
       
  1801     std_log(LOG_FILENAME_LINE,"Test start");
       
  1802     TEST (T,  12345678L,  "12345678",  8, 0, Eof, "%li");
       
  1803     std_log(LOG_FILENAME_LINE,"Test end");
       
  1804     std_log(LOG_FILENAME_LINE,"Test start");
       
  1805     TEST (T, 134217728L, "134217728",  9, 0, Eof, "%li");
       
  1806     std_log(LOG_FILENAME_LINE,"Test end");
       
  1807     std_log(LOG_FILENAME_LINE,"Test start");
       
  1808     TEST (T, 134217728L, "%li",        9, 0, Eof, "%li");
       
  1809     std_log(LOG_FILENAME_LINE,"Test end");
       
  1810     std_log(LOG_FILENAME_LINE,"Test start");
       
  1811     TEST (T,        ~0L, "%li",       -1, 0, Eof, "%li");
       
  1812     std_log(LOG_FILENAME_LINE,"Test end");
       
  1813     std_log(LOG_FILENAME_LINE,"Test start");
       
  1814     TEST (T,        10L, "%li",       -1, 0, Eof, "%li");
       
  1815     std_log(LOG_FILENAME_LINE,"Test end");
       
  1816     std_log(LOG_FILENAME_LINE,"Test start");
       
  1817 
       
  1818     // autodetection of oct and hex format
       
  1819     TEST (T,   01234567L,   "01234567",  8, 0, Eof, "%li");
       
  1820     std_log(LOG_FILENAME_LINE,"Test end");
       
  1821     std_log(LOG_FILENAME_LINE,"Test start");
       
  1822     TEST (T,  0x1234567L,  "0x1234567",  9, 0, Eof, "%li");
       
  1823     std_log(LOG_FILENAME_LINE,"Test end");
       
  1824     std_log(LOG_FILENAME_LINE,"Test start");
       
  1825     TEST (T, 0X79aBcDeFL, "0X79aBcDeF", 10, 0, Eof, "%li");
       
  1826     std_log(LOG_FILENAME_LINE,"Test end");
       
  1827     std_log(LOG_FILENAME_LINE,"Test start");
       
  1828 
       
  1829     TEST (T,   01234567L,  "+01234567",  9, 0, Eof, "%li");
       
  1830     std_log(LOG_FILENAME_LINE,"Test end");
       
  1831     std_log(LOG_FILENAME_LINE,"Test start");
       
  1832     TEST (T,  0x1234567L, "+0x1234567", 10, 0, Eof, "%li");
       
  1833     std_log(LOG_FILENAME_LINE,"Test end");
       
  1834     std_log(LOG_FILENAME_LINE,"Test start");
       
  1835     TEST (T,  -01234567L,  "-01234567",  9, 0, Eof, "%li");
       
  1836     std_log(LOG_FILENAME_LINE,"Test end");
       
  1837     std_log(LOG_FILENAME_LINE,"Test start");
       
  1838     TEST (T, -0x1234567L, "-0x1234567", 10, 0, Eof, "%li");
       
  1839     std_log(LOG_FILENAME_LINE,"Test end");
       
  1840     std_log(LOG_FILENAME_LINE,"Test start");
       
  1841 
       
  1842     TEST (T, 0xaL, "0x00000000000000a", 17, 0, Eof, "%li");
       
  1843     std_log(LOG_FILENAME_LINE,"Test end");
       
  1844     std_log(LOG_FILENAME_LINE,"Test start");
       
  1845     TEST (T, 0xabL, "0x000000000000ab", 16, 0, Eof, "%li");
       
  1846     std_log(LOG_FILENAME_LINE,"Test end");
       
  1847     std_log(LOG_FILENAME_LINE,"Test start");
       
  1848     TEST (T, 0xabcL, "0x0000000000abc", 15, 0, Eof, "%li");
       
  1849     std_log(LOG_FILENAME_LINE,"Test end");
       
  1850     std_log(LOG_FILENAME_LINE,"Test start");
       
  1851     TEST (T, 0xabcdL, "0x00000000abcd", 14, 0, Eof, "%li");
       
  1852     std_log(LOG_FILENAME_LINE,"Test end");
       
  1853     std_log(LOG_FILENAME_LINE,"Test start");
       
  1854     TEST (T, 0xabcdeL, "0x000000abcde", 13, 0, Eof, "%li");
       
  1855     std_log(LOG_FILENAME_LINE,"Test end");
       
  1856     std_log(LOG_FILENAME_LINE,"Test start");
       
  1857     TEST (T, 0xabcdefL, "0x0000abcdef", 12, 0, Eof, "%li");
       
  1858     std_log(LOG_FILENAME_LINE,"Test end");
       
  1859     std_log(LOG_FILENAME_LINE,"Test start");
       
  1860     TEST (T, 0xabcdef0L, "0x00abcdef0", 11, 0, Eof, "%li");
       
  1861     std_log(LOG_FILENAME_LINE,"Test end");
       
  1862     std_log(LOG_FILENAME_LINE,"Test start");
       
  1863     TEST (T, 0xabcdef1L,   "0xabcdef1",  9, 0, Eof, "%li");
       
  1864     std_log(LOG_FILENAME_LINE,"Test end");
       
  1865     std_log(LOG_FILENAME_LINE,"Test start");
       
  1866 
       
  1867     TEST (T, 0L, "00x", 2, 0, Good, "%li");
       
  1868     std_log(LOG_FILENAME_LINE,"Test end");
       
  1869     std_log(LOG_FILENAME_LINE,"Test start");
       
  1870     TEST (T, 1L, "01x", 2, 0, Good, "%li");
       
  1871     std_log(LOG_FILENAME_LINE,"Test end");
       
  1872     std_log(LOG_FILENAME_LINE,"Test start");
       
  1873     TEST (T, 0L, "0x",  2, 0, Eof | Fail);
       
  1874     std_log(LOG_FILENAME_LINE,"Test end");
       
  1875     std_log(LOG_FILENAME_LINE,"Test start");
       
  1876     TEST (T, 0L, "x",   0, 0, Fail, "%li");
       
  1877     std_log(LOG_FILENAME_LINE,"Test end");
       
  1878     std_log(LOG_FILENAME_LINE,"Test start");
       
  1879 
       
  1880     // long parsing, dec base
       
  1881     TEST (T,           2L,           "2",   1, dec, Eof,  "%ld");
       
  1882     std_log(LOG_FILENAME_LINE,"Test end");
       
  1883     std_log(LOG_FILENAME_LINE,"Test start");
       
  1884     TEST (T,          23L,          "23",   2, dec, Eof,  "%ld");
       
  1885     std_log(LOG_FILENAME_LINE,"Test end");
       
  1886     std_log(LOG_FILENAME_LINE,"Test start");
       
  1887     TEST (T,         234L,         "234",   3, dec, Eof,  "%ld");
       
  1888     std_log(LOG_FILENAME_LINE,"Test end");
       
  1889     std_log(LOG_FILENAME_LINE,"Test start");
       
  1890     TEST (T,        2345L,        "2345",   4, dec, Eof,  "%ld");
       
  1891     std_log(LOG_FILENAME_LINE,"Test end");
       
  1892     std_log(LOG_FILENAME_LINE,"Test start");
       
  1893     TEST (T,       23456L,       "23456",   5, dec, Eof,  "%ld");
       
  1894     std_log(LOG_FILENAME_LINE,"Test end");
       
  1895     std_log(LOG_FILENAME_LINE,"Test start");
       
  1896     TEST (T,      234567L,      "234567",   6, dec, Eof,  "%ld");
       
  1897     std_log(LOG_FILENAME_LINE,"Test end");
       
  1898     std_log(LOG_FILENAME_LINE,"Test start");
       
  1899     TEST (T,     2345678L,     "2345678",   7, dec, Eof,  "%ld");
       
  1900     std_log(LOG_FILENAME_LINE,"Test end");
       
  1901     std_log(LOG_FILENAME_LINE,"Test start");
       
  1902     TEST (T,    23456789L,    "23456789",   8, dec, Eof,  "%ld");
       
  1903     std_log(LOG_FILENAME_LINE,"Test end");
       
  1904     std_log(LOG_FILENAME_LINE,"Test start");
       
  1905     TEST (T,   134217728L,   "134217728",   9, dec, Eof,  "%ld");
       
  1906     std_log(LOG_FILENAME_LINE,"Test end");
       
  1907     std_log(LOG_FILENAME_LINE,"Test start");
       
  1908     TEST (T,   134217728L,         "%ld",   9, dec, Eof,  "%ld");
       
  1909     std_log(LOG_FILENAME_LINE,"Test end");
       
  1910     std_log(LOG_FILENAME_LINE,"Test start");
       
  1911     TEST (T,          ~0L,         "%ld",  -1, dec, Eof,  "%ld");
       
  1912     std_log(LOG_FILENAME_LINE,"Test end");
       
  1913     std_log(LOG_FILENAME_LINE,"Test start");
       
  1914     TEST (T,     LONG_MAX,         "%ld",  -1, dec, Eof,  "%ld");
       
  1915     std_log(LOG_FILENAME_LINE,"Test end");
       
  1916     std_log(LOG_FILENAME_LINE,"Test start");
       
  1917     TEST (T,     LONG_MIN,         "%ld",  -1, dec, Eof,  "%ld");
       
  1918     std_log(LOG_FILENAME_LINE,"Test end");
       
  1919     std_log(LOG_FILENAME_LINE,"Test start");
       
  1920     TEST (T,          -3L,         "%ld",   2, dec, Eof,  "%ld");
       
  1921     std_log(LOG_FILENAME_LINE,"Test end");
       
  1922     std_log(LOG_FILENAME_LINE,"Test start");
       
  1923     TEST (T,         -34L,         "%ld",   3, dec, Eof,  "%ld");
       
  1924     std_log(LOG_FILENAME_LINE,"Test end");
       
  1925     std_log(LOG_FILENAME_LINE,"Test start");
       
  1926     TEST (T,        -345L,         "%ld",   4, dec, Eof,  "%ld");
       
  1927     std_log(LOG_FILENAME_LINE,"Test end");
       
  1928     std_log(LOG_FILENAME_LINE,"Test start");
       
  1929     TEST (T,       -3456L,       "-3456",   5, dec, Eof,  "%ld");
       
  1930     std_log(LOG_FILENAME_LINE,"Test end");
       
  1931     std_log(LOG_FILENAME_LINE,"Test start");
       
  1932     TEST (T,      -34567L,      "-34567",   6, dec, Eof,  "%ld");
       
  1933     std_log(LOG_FILENAME_LINE,"Test end");
       
  1934     std_log(LOG_FILENAME_LINE,"Test start");
       
  1935     TEST (T,     -345678L,   "-00345678",   9, dec, Eof,  "%ld");
       
  1936     std_log(LOG_FILENAME_LINE,"Test end");
       
  1937     std_log(LOG_FILENAME_LINE,"Test start");
       
  1938     TEST (T,     3456789L,   "+03456789",   9, dec, Eof,  "%ld");
       
  1939     std_log(LOG_FILENAME_LINE,"Test end");
       
  1940     std_log(LOG_FILENAME_LINE,"Test start");
       
  1941     TEST (T,     4567890L,   "4567890.1",   7, dec, Good, "%ld");
       
  1942     std_log(LOG_FILENAME_LINE,"Test end");
       
  1943     std_log(LOG_FILENAME_LINE,"Test start");
       
  1944     TEST (T,      567890L,   "567890e+1",   6, dec, Good, "%ld");
       
  1945 
       
  1946     Punct<charT>::thousands_sep_ = ';';
       
  1947 
       
  1948     // long parsing, dec base, with grouping (which is optional, empty
       
  1949     // grouping, "", causes extraction to terminate at the first occurrence
       
  1950     // of the thousands_sep character)
       
  1951     TEST (T, 2147483647L,         "2147483647;", 10, dec, Good, "\0");
       
  1952     std_log(LOG_FILENAME_LINE,"Test end");
       
  1953     std_log(LOG_FILENAME_LINE,"Test start");
       
  1954     TEST (T,  214748364L,         "214748364;7",  9, dec, Good, "\0");
       
  1955     std_log(LOG_FILENAME_LINE,"Test end");
       
  1956     std_log(LOG_FILENAME_LINE,"Test start");
       
  1957     TEST (T,   21474836L,         "21474836;47",  8, dec, Good, "\0");
       
  1958     std_log(LOG_FILENAME_LINE,"Test end");
       
  1959     std_log(LOG_FILENAME_LINE,"Test start");
       
  1960     TEST (T,    2147483L,         "2147483;647",  7, dec, Good, "\0");
       
  1961     std_log(LOG_FILENAME_LINE,"Test end");
       
  1962     std_log(LOG_FILENAME_LINE,"Test start");
       
  1963     TEST (T,     214748L,         "214748;3647",  6, dec, Good, "\0");
       
  1964     std_log(LOG_FILENAME_LINE,"Test end");
       
  1965     std_log(LOG_FILENAME_LINE,"Test start");
       
  1966     TEST (T,      21474L,         "21474;83647",  5, dec, Good, "\0");
       
  1967     std_log(LOG_FILENAME_LINE,"Test end");
       
  1968     std_log(LOG_FILENAME_LINE,"Test start");
       
  1969     TEST (T,       2147L,         "2147;483647",  4, dec, Good, "\0");
       
  1970     std_log(LOG_FILENAME_LINE,"Test end");
       
  1971     std_log(LOG_FILENAME_LINE,"Test start");
       
  1972     TEST (T,        214L,         "214;7483647",  3, dec, Good, "\0");
       
  1973     std_log(LOG_FILENAME_LINE,"Test end");
       
  1974     std_log(LOG_FILENAME_LINE,"Test start");
       
  1975     TEST (T,         21L,         "21;47483647",  2, dec, Good, "\0");
       
  1976     std_log(LOG_FILENAME_LINE,"Test end");
       
  1977     std_log(LOG_FILENAME_LINE,"Test start");
       
  1978     TEST (T,          2L,         "2;147483647",  1, dec, Good, "\0");
       
  1979     std_log(LOG_FILENAME_LINE,"Test end");
       
  1980     std_log(LOG_FILENAME_LINE,"Test start");
       
  1981     TEST (T,          0L,         ";2147483647",  0, dec, Fail, "\0");
       
  1982     std_log(LOG_FILENAME_LINE,"Test end");
       
  1983     std_log(LOG_FILENAME_LINE,"Test start");
       
  1984 
       
  1985     TEST (T, 2147483647L,          "2147483647", 10, dec, Eof, "\1");
       
  1986     std_log(LOG_FILENAME_LINE,"Test end");
       
  1987     std_log(LOG_FILENAME_LINE,"Test start");
       
  1988     TEST (T, 2147483647L, "2;1;4;7;4;8;3;6;4;7", 19, dec, Eof, "\1");
       
  1989     std_log(LOG_FILENAME_LINE,"Test end");
       
  1990     std_log(LOG_FILENAME_LINE,"Test start");
       
  1991     TEST (T, 2147483646L,      "21;47;48;36;46", 14, dec, Eof, "\2");
       
  1992     std_log(LOG_FILENAME_LINE,"Test end");
       
  1993     std_log(LOG_FILENAME_LINE,"Test start");
       
  1994     TEST (T, 2147483645L,       "2;147;483;645", 13, dec, Eof, "\3");
       
  1995     std_log(LOG_FILENAME_LINE,"Test end");
       
  1996     std_log(LOG_FILENAME_LINE,"Test start");
       
  1997     TEST (T, 2147483644L,        "21;4748;3644", 12, dec, Eof, "\4");
       
  1998     std_log(LOG_FILENAME_LINE,"Test end");
       
  1999     std_log(LOG_FILENAME_LINE,"Test start");
       
  2000     TEST (T, 2147483643L,         "21474;83643", 11, dec, Eof, "\5");
       
  2001     std_log(LOG_FILENAME_LINE,"Test end");
       
  2002     std_log(LOG_FILENAME_LINE,"Test start");
       
  2003     TEST (T, 2147483642L,         "2147;483642", 11, dec, Eof, "\6");
       
  2004     std_log(LOG_FILENAME_LINE,"Test end");
       
  2005     std_log(LOG_FILENAME_LINE,"Test start");
       
  2006     TEST (T, 2147483641L,         "214;7483641", 11, dec, Eof, "\7");
       
  2007     std_log(LOG_FILENAME_LINE,"Test end");
       
  2008     std_log(LOG_FILENAME_LINE,"Test start");
       
  2009     TEST (T, 2147483640L,         "21;47483640", 11, dec, Eof, "\10");
       
  2010     std_log(LOG_FILENAME_LINE,"Test end");
       
  2011     std_log(LOG_FILENAME_LINE,"Test start");
       
  2012     TEST (T, 2147483639L,         "2;147483639", 11, dec, Eof, "\11");
       
  2013     std_log(LOG_FILENAME_LINE,"Test end");
       
  2014     std_log(LOG_FILENAME_LINE,"Test start");
       
  2015     TEST (T, 2147483638L,          "2147483638", 10, dec, Eof, "\12");
       
  2016     std_log(LOG_FILENAME_LINE,"Test end");
       
  2017     std_log(LOG_FILENAME_LINE,"Test start");
       
  2018 
       
  2019     TEST (T, 2147483637L, "2;14;74;83;63;7", 15, dec, Eof, "\1\2");
       
  2020     std_log(LOG_FILENAME_LINE,"Test end");
       
  2021     std_log(LOG_FILENAME_LINE,"Test start");
       
  2022     TEST (T, 2147483636L,   "214;748;363;6", 13, dec, Eof, "\1\3");
       
  2023     std_log(LOG_FILENAME_LINE,"Test end");
       
  2024     std_log(LOG_FILENAME_LINE,"Test start");
       
  2025     TEST (T, 2147483635L,   "2;1474;8363;5", 13, dec, Eof, "\1\4");
       
  2026     std_log(LOG_FILENAME_LINE,"Test end");
       
  2027     std_log(LOG_FILENAME_LINE,"Test start");
       
  2028     TEST (T, 2147483634L,    "2147;48363;4", 12, dec, Eof, "\1\5");
       
  2029     std_log(LOG_FILENAME_LINE,"Test end");
       
  2030     std_log(LOG_FILENAME_LINE,"Test start");
       
  2031     TEST (T, 2147483633L,    "214;748363;3", 12, dec, Eof, "\1\6");
       
  2032     std_log(LOG_FILENAME_LINE,"Test end");
       
  2033     std_log(LOG_FILENAME_LINE,"Test start");
       
  2034     TEST (T, 2147483632L,    "21;4748363;2", 12, dec, Eof, "\1\7");
       
  2035     std_log(LOG_FILENAME_LINE,"Test end");
       
  2036     std_log(LOG_FILENAME_LINE,"Test start");
       
  2037     TEST (T, 2147483631L,    "2;14748363;1", 12, dec, Eof, "\1\10");
       
  2038     std_log(LOG_FILENAME_LINE,"Test end");
       
  2039     std_log(LOG_FILENAME_LINE,"Test start");
       
  2040     TEST (T, 2147483630L,     "214748363;0", 11, dec, Eof, "\1\11");
       
  2041     std_log(LOG_FILENAME_LINE,"Test end");
       
  2042     std_log(LOG_FILENAME_LINE,"Test start");
       
  2043 
       
  2044     TEST (T, 2147483629L,   "2;147;483;62;9", 14, dec, Eof, "\1\2\3");
       
  2045     std_log(LOG_FILENAME_LINE,"Test end");
       
  2046     std_log(LOG_FILENAME_LINE,"Test start");
       
  2047     TEST (T, 2147483628L, "2;1;4;7;4;83;628", 16, dec, Eof, "\3\2\1");
       
  2048     std_log(LOG_FILENAME_LINE,"Test end");
       
  2049     std_log(LOG_FILENAME_LINE,"Test start");
       
  2050     TEST (T, 2147483627L,    "2;147;483;627", 13, dec, Eof, "\3\3\3");
       
  2051     std_log(LOG_FILENAME_LINE,"Test end");
       
  2052     std_log(LOG_FILENAME_LINE,"Test start");
       
  2053     TEST (T, 2147483626L,    "+2147;483;626", 13, dec, Eof, "\3\3\4");
       
  2054     std_log(LOG_FILENAME_LINE,"Test end");
       
  2055 
       
  2056 
       
  2057     for (int i = 256; i >= 0; i -= 32) {
       
  2058 
       
  2059         // exercise parsing of input with excessively many groups
       
  2060         static const char many_groups[] = {
       
  2061             // each row below consists of 32 thousands_sep's (numbered 0-31)
       
  2062             // and 32 zeros for a total of 64 characters
       
  2063             //  . . . . : . . . . 1 . . . . : . . . . 2 . . . . : . . . . 3 .
       
  2064             "0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;"
       
  2065             "0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;"
       
  2066             "0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;"
       
  2067             "0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;"
       
  2068             "0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;"
       
  2069             "0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;"
       
  2070             "0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;"
       
  2071             "0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;"
       
  2072             "1"
       
  2073         };
       
  2074 
       
  2075         static const std::size_t NC = sizeof many_groups - 1;
       
  2076 
       
  2077         const int nfail = TEST (T, 1L, many_groups + i, NC - i, dec, Eof, "\1");
       
  2078 
       
  2079         // increase input length and break out after the first failure
       
  2080         if (nfail)
       
  2081             break;
       
  2082     }
       
  2083 
       
  2084     // long parsing, hex base, with grouping
       
  2085     std_log(LOG_FILENAME_LINE,"Test end");
       
  2086     std_log(LOG_FILENAME_LINE,"Test start");
       
  2087 
       
  2088     TEST (T,        0x0L, "0",        1, hex, Eof, "\1");
       
  2089         std_log(LOG_FILENAME_LINE,"Test end");
       
  2090     std_log(LOG_FILENAME_LINE,"Test start");
       
  2091 TEST (T,        0x0L, "00",       2, hex, Eof, "\1");
       
  2092     std_log(LOG_FILENAME_LINE,"Test end");
       
  2093     std_log(LOG_FILENAME_LINE,"Test start");
       
  2094     TEST (T,        0x0L, "000",      3, hex, Eof, "\1");
       
  2095     std_log(LOG_FILENAME_LINE,"Test end");
       
  2096     std_log(LOG_FILENAME_LINE,"Test start");
       
  2097     TEST (T,        0x0L, "0;0;0",    5, hex, Eof, "\1");
       
  2098     std_log(LOG_FILENAME_LINE,"Test end");
       
  2099     std_log(LOG_FILENAME_LINE,"Test start");
       
  2100     TEST (T,        0x0L, "0x0;0;0",  7, hex, Eof, "\1");
       
  2101     std_log(LOG_FILENAME_LINE,"Test end");
       
  2102     std_log(LOG_FILENAME_LINE,"Test start");
       
  2103     TEST (T,        0x0L, "0X0;0;0",  7, hex, Eof, "\1");
       
  2104     std_log(LOG_FILENAME_LINE,"Test end");
       
  2105     std_log(LOG_FILENAME_LINE,"Test start");
       
  2106     TEST (T,        0x0L, "+0;0;0",   6, hex, Eof, "\1");
       
  2107     std_log(LOG_FILENAME_LINE,"Test end");
       
  2108     std_log(LOG_FILENAME_LINE,"Test start");
       
  2109     TEST (T,        0x0L, "-0;0;0",   6, hex, Eof, "\1");
       
  2110     std_log(LOG_FILENAME_LINE,"Test end");
       
  2111     std_log(LOG_FILENAME_LINE,"Test start");
       
  2112     TEST (T,        0x0L, "+0x0;0;0", 8, hex, Eof, "\1");
       
  2113     std_log(LOG_FILENAME_LINE,"Test end");
       
  2114     std_log(LOG_FILENAME_LINE,"Test start");
       
  2115     TEST (T,        0x0L, "+0X0;0;0", 8, hex, Eof, "\1");
       
  2116     std_log(LOG_FILENAME_LINE,"Test end");
       
  2117     std_log(LOG_FILENAME_LINE,"Test start");
       
  2118     TEST (T,        0x0L, "-0x0;0;0", 8, hex, Eof, "\1");
       
  2119     std_log(LOG_FILENAME_LINE,"Test end");
       
  2120     std_log(LOG_FILENAME_LINE,"Test start");
       
  2121     TEST (T,        0x0L, "-0X0;0;0", 8, hex, Eof, "\1");
       
  2122     std_log(LOG_FILENAME_LINE,"Test end");
       
  2123     std_log(LOG_FILENAME_LINE,"Test start");
       
  2124 
       
  2125     TEST (T,        0xAL, "A",               1, hex, Eof, "\1");
       
  2126     std_log(LOG_FILENAME_LINE,"Test end");
       
  2127     std_log(LOG_FILENAME_LINE,"Test start");
       
  2128     TEST (T,       0xABL, "AB",              2, hex, Eof, "\1");
       
  2129     std_log(LOG_FILENAME_LINE,"Test end");
       
  2130     std_log(LOG_FILENAME_LINE,"Test start");
       
  2131     TEST (T,       0xABL, "A;B",             3, hex, Eof, "\1");
       
  2132     std_log(LOG_FILENAME_LINE,"Test end");
       
  2133     std_log(LOG_FILENAME_LINE,"Test start");
       
  2134     TEST (T,       0xABL, "A;b",             3, hex, Eof, "\1");
       
  2135     std_log(LOG_FILENAME_LINE,"Test end");
       
  2136     std_log(LOG_FILENAME_LINE,"Test start");
       
  2137     TEST (T,       0xABL, "a;B",             3, hex, Eof, "\1");
       
  2138     std_log(LOG_FILENAME_LINE,"Test end");
       
  2139     std_log(LOG_FILENAME_LINE,"Test start");
       
  2140     TEST (T,      0xABCL, "ABC",             3, hex, Eof, "\1");
       
  2141     std_log(LOG_FILENAME_LINE,"Test end");
       
  2142     std_log(LOG_FILENAME_LINE,"Test start");
       
  2143     TEST (T,      0xABCL, "A;B;C",           5, hex, Eof, "\1");
       
  2144     std_log(LOG_FILENAME_LINE,"Test end");
       
  2145     std_log(LOG_FILENAME_LINE,"Test start");
       
  2146     TEST (T,     0xABCDL, "ABCD",            4, hex, Eof, "\1");
       
  2147     std_log(LOG_FILENAME_LINE,"Test end");
       
  2148     std_log(LOG_FILENAME_LINE,"Test start");
       
  2149     TEST (T,     0xABCDL, "A;B;C;D",         7, hex, Eof, "\1");
       
  2150     std_log(LOG_FILENAME_LINE,"Test end");
       
  2151     std_log(LOG_FILENAME_LINE,"Test start");
       
  2152     TEST (T,    0xABCDEL, "ABCDE",           5, hex, Eof, "\1");
       
  2153     std_log(LOG_FILENAME_LINE,"Test end");
       
  2154     std_log(LOG_FILENAME_LINE,"Test start");
       
  2155     TEST (T,    0xABCDEL, "A;B;C;D;E",       9, hex, Eof, "\1");
       
  2156     std_log(LOG_FILENAME_LINE,"Test end");
       
  2157     std_log(LOG_FILENAME_LINE,"Test start");
       
  2158     TEST (T,   0xABCDEFL, "ABCDEF",          6, hex, Eof, "\1");
       
  2159     std_log(LOG_FILENAME_LINE,"Test end");
       
  2160     std_log(LOG_FILENAME_LINE,"Test start");
       
  2161     TEST (T,   0xABCDEFL, "A;B;C;D;E;F",    11, hex, Eof, "\1");
       
  2162     std_log(LOG_FILENAME_LINE,"Test end");
       
  2163     std_log(LOG_FILENAME_LINE,"Test start");
       
  2164     TEST (T,   0xABCDEFL, "a;B;c;D;e;F",    11, hex, Eof, "\1");
       
  2165     std_log(LOG_FILENAME_LINE,"Test end");
       
  2166     std_log(LOG_FILENAME_LINE,"Test start");
       
  2167     std_log(LOG_FILENAME_LINE,"Test end");
       
  2168     std_log(LOG_FILENAME_LINE,"Test start");
       
  2169     TEST (T,   0xABCDEFL, "+A;B;C;D;E;F",   12, hex, Eof, "\1");
       
  2170     std_log(LOG_FILENAME_LINE,"Test end");
       
  2171     std_log(LOG_FILENAME_LINE,"Test start");
       
  2172     TEST (T,  -0xABCDEFL, "-A;B;C;D;E;F",   12, hex, Eof, "\1");
       
  2173     std_log(LOG_FILENAME_LINE,"Test end");
       
  2174     std_log(LOG_FILENAME_LINE,"Test start");
       
  2175     TEST (T,   0xABCDEFL, "0xA;B;C;D;E;F",  13, hex, Eof, "\1");
       
  2176     std_log(LOG_FILENAME_LINE,"Test end");
       
  2177     std_log(LOG_FILENAME_LINE,"Test start");
       
  2178     TEST (T,   0xABCDEFL, "+0xA;B;C;D;E;F", 14, hex, Eof, "\1");
       
  2179     std_log(LOG_FILENAME_LINE,"Test end");
       
  2180     std_log(LOG_FILENAME_LINE,"Test start");
       
  2181     TEST (T,  -0xABCDEFL, "-0xA;B;C;D;E;F", 14, hex, Eof, "\1");
       
  2182     std_log(LOG_FILENAME_LINE,"Test end");
       
  2183     std_log(LOG_FILENAME_LINE,"Test start");
       
  2184 
       
  2185     // long parsing, dec base, with bad groups: store value, set failbit
       
  2186     TEST (T, 2147483624L,   "21;474;83624; ", 13, dec, Fail, "\5\3");
       
  2187     std_log(LOG_FILENAME_LINE,"Test end");
       
  2188     std_log(LOG_FILENAME_LINE,"Test start");
       
  2189     TEST (T, 2147483623L,    "21;47;483623 ", 12, dec, Fail, "\6\3");
       
  2190     std_log(LOG_FILENAME_LINE,"Test end");
       
  2191     std_log(LOG_FILENAME_LINE,"Test start");
       
  2192     TEST (T, 2147483622L,     "21;47483622 ", 11, dec, Fail, "\7\3");
       
  2193     std_log(LOG_FILENAME_LINE,"Test end");
       
  2194     std_log(LOG_FILENAME_LINE,"Test start");
       
  2195     TEST (T, 2147483621L,    "214;748362;1 ", 12, dec, Fail, "\7\3");
       
  2196     std_log(LOG_FILENAME_LINE,"Test end");
       
  2197     std_log(LOG_FILENAME_LINE,"Test start");
       
  2198     TEST (T, 2147483619L,   "2;147;483;619 ", 13, dec, Fail, "\1");
       
  2199     std_log(LOG_FILENAME_LINE,"Test end");
       
  2200     std_log(LOG_FILENAME_LINE,"Test start");
       
  2201     TEST (T, 2147483618L,   "2147;48;36;18 ", 13, dec, Fail, "\2");
       
  2202     std_log(LOG_FILENAME_LINE,"Test end");
       
  2203     std_log(LOG_FILENAME_LINE,"Test start");
       
  2204     TEST (T, 2147483617L,    "2147;483;617 ", 12, dec, Fail, "\3");
       
  2205     std_log(LOG_FILENAME_LINE,"Test end");
       
  2206     std_log(LOG_FILENAME_LINE,"Test start");
       
  2207     TEST (T, 2147483616L,     "21;47483616 ", 11, dec, Fail, "\4");
       
  2208     std_log(LOG_FILENAME_LINE,"Test end");
       
  2209     std_log(LOG_FILENAME_LINE,"Test start");
       
  2210     TEST (T, 2147483615L,   "21;47;4836;15 ", 13, dec, Fail, "\2\2");
       
  2211     std_log(LOG_FILENAME_LINE,"Test end");
       
  2212     std_log(LOG_FILENAME_LINE,"Test start");
       
  2213     TEST (T, 2147483614L,    "21474;836;14 ", 12, dec, Fail, "\2\3");
       
  2214     std_log(LOG_FILENAME_LINE,"Test end");
       
  2215     std_log(LOG_FILENAME_LINE,"Test start");
       
  2216 
       
  2217     // thousands_sep at illegal positions, do not store value, set failbit
       
  2218     TEST (T, 2147483625L,   ";214;748;3625 ",  0, dec, Fail, "\4\3");
       
  2219     std_log(LOG_FILENAME_LINE,"Test end");
       
  2220     std_log(LOG_FILENAME_LINE,"Test start");
       
  2221     TEST (T, 2147483620L,   "+214;;7483620 ",  5, dec, Fail, "\7\4");
       
  2222     std_log(LOG_FILENAME_LINE,"Test end");
       
  2223     
       
  2224     // unusual thousands_sep
       
  2225     Punct<charT>::thousands_sep_ = '.';
       
  2226 
       
  2227     std_log(LOG_FILENAME_LINE,"Test start");
       
  2228     TEST (T, 2147483618L, "214.74836.18", 12, dec, Eof, "\2\5");
       
  2229     std_log(LOG_FILENAME_LINE,"Test end");
       
  2230     Punct<charT>::thousands_sep_ = 'A';
       
  2231     std_log(LOG_FILENAME_LINE,"Test start");
       
  2232     TEST (T, 2147483617L, "2A14A7483A617", 13, dec, Eof, "\3\4\2");
       
  2233     std_log(LOG_FILENAME_LINE,"Test end");
       
  2234     // Stage 2 parsing algorithm in 22.2.2.1.2, p8 removes thousands_sep
       
  2235     // from the sequence before checking for sign and other valid chars
       
  2236     // but since, according to the grammar, a well-formed thousands_sep
       
  2237     // may not appear first, when the leading thousands_sep matches
       
  2238     // the sign character it is taken as the sign
       
  2239     // (these are totally anal-retentive tests)
       
  2240     Punct<charT>::thousands_sep_ = '-';
       
  2241 
       
  2242     std_log(LOG_FILENAME_LINE,"Test start");
       
  2243 
       
  2244     TEST (T,  2147483617L, "21-47-4-83-617", 14, dec, Eof, "\3\2\1\2");
       
  2245     TEST (T, -2147483616L, "-214-748-3616 ", 13, dec, Good, "\4\3\3");
       
  2246 
       
  2247     Punct<charT>::thousands_sep_ = '+';
       
  2248     TEST (T, 2147483615L, "2+147+48+3+615", 14, dec, Eof, "\3\1\2\3");
       
  2249     std_log(LOG_FILENAME_LINE,"Test end");
       
  2250     std_log(LOG_FILENAME_LINE,"Test start");
       
  2251 
       
  2252     // leading '+' taken as the plus sign and not a thousands_sep
       
  2253     TEST (T, 2147483614L, "+21+4748361+4 ", 13, dec, Good, "\1\7\2");
       
  2254     std_log(LOG_FILENAME_LINE,"Test end");
       
  2255     std_log(LOG_FILENAME_LINE,"Test start");
       
  2256 
       
  2257     // a digit as a thousands_sep is removed from the input sequence
       
  2258     Punct<charT>::thousands_sep_ = '0';
       
  2259     TEST (T, 2147483613L, "21047048306013", 14, dec, Eof, "\2\1\3\2");
       
  2260     std_log(LOG_FILENAME_LINE,"Test end");
       
  2261     std_log(LOG_FILENAME_LINE,"Test start");
       
  2262 
       
  2263     Punct<charT>::thousands_sep_ = '1';
       
  2264     TEST (T,   24748362L,     "2147483612", 10, dec, Eof, "\1\6");
       
  2265     std_log(LOG_FILENAME_LINE,"Test end");
       
  2266     std_log(LOG_FILENAME_LINE,"Test start");
       
  2267 
       
  2268     // exercise lwg issue 338 (whitespace after sign not allowed)
       
  2269     TEST (T, 0L, "+ 1", 1, 0, Fail);
       
  2270     std_log(LOG_FILENAME_LINE,"Test end");
       
  2271     std_log(LOG_FILENAME_LINE,"Test start");
       
  2272     TEST (T, 0L, "- 2", 1, 0, Fail);
       
  2273     std_log(LOG_FILENAME_LINE,"Test end");
       
  2274 
       
  2275 
       
  2276 
       
  2277     // exercise signed integer overflow
       
  2278 #if LONG_MAX == 0x7fffL
       
  2279     const char lmin[]         = "-32768";
       
  2280     const char lmin_minus_1[] = "-32769";
       
  2281     const char lmin_minus_2[] = "-32770";
       
  2282     const char lmin_minus_3[] = "-32771";
       
  2283 
       
  2284     const char lmax[]         = "32767";
       
  2285     const char lmax_plus_1[]  = "32768";
       
  2286     const char lmax_plus_2[]  = "32769";
       
  2287     const char lmax_plus_3[]  = "32770";
       
  2288     const char lmax_x_f[]     = "0x7ffff";
       
  2289 
       
  2290     const char vflow_1[]      = "";
       
  2291 #elif LONG_MAX == 0x7fffffffL
       
  2292     const char lmin[]         = "-2147483648";
       
  2293     const char lmin_minus_1[] = "-2147483649";
       
  2294     const char lmin_minus_2[] = "-2147483650";
       
  2295     const char lmin_minus_3[] = "-2147483651";
       
  2296 
       
  2297     const char lmax[]         = "2147483647";   // 0x7fffffffL
       
  2298     const char lmax_plus_1[]  = "2147483648";   // 0x7fffffffL + 1
       
  2299     const char lmax_plus_2[]  = "2147483649";   // 0x7fffffffL + 2
       
  2300     const char lmax_plus_3[]  = "2147483650";   // 0x7fffffffL + 3
       
  2301     const char lmax_x_f[]     = "0x7ffffffff";  // extra 'f' (times 0xf)
       
  2302     const char vflow_1[]      = "";
       
  2303 #elif LONG_MAX > 0x7fffffffL
       
  2304     const char lmin[]         = "-9223372036854775808";
       
  2305     const char lmin_minus_1[] = "-9223372036854775809";
       
  2306     const char lmin_minus_2[] = "-9223372036854775810";
       
  2307     const char lmin_minus_3[] = "-9223372036854775811";
       
  2308 
       
  2309     const char lmax[]         = "9223372036854775807";
       
  2310     const char lmax_plus_1[]  = "9223372036854775808";
       
  2311     const char lmax_plus_2[]  = "9223372036854775809";
       
  2312     const char lmax_plus_3[]  = "9223372036854775810";
       
  2313     const char lmax_x_f[]     = "0x7ffffffffffffffff";
       
  2314     const char vflow_1[]      = "";
       
  2315 #else
       
  2316     // working around a SunPro bug (PR #28279)
       
  2317 
       
  2318     const char lmin[]         = "-999999999999999999990";
       
  2319     const char lmin_minus_1[] = "-999999999999999999991";
       
  2320     const char lmin_minus_2[] = "-999999999999999999992";
       
  2321     const char lmin_minus_3[] = "-999999999999999999993";
       
  2322 
       
  2323     const char lmax[]         = "0";
       
  2324     const char lmax_plus_1[]  = "999999999999999999997";
       
  2325     const char lmax_plus_2[]  = "999999999999999999998";
       
  2326     const char lmax_plus_3[]  = "999999999999999999999";
       
  2327     const char lmax_x_f[]     = "0xfffffffffffffffff";
       
  2328     const char vflow_1[]      = "999999999999999999990";
       
  2329 #endif
       
  2330 
       
  2331     std_log(LOG_FILENAME_LINE,"Test start");
       
  2332 
       
  2333     TEST (T, LONG_MIN, lmin,         sizeof lmin - 1,         0, Eof);
       
  2334     std_log(LOG_FILENAME_LINE,"Test end");
       
  2335     std_log(LOG_FILENAME_LINE,"Test start");
       
  2336     TEST (T, LONG_MIN, lmin_minus_1, sizeof lmin_minus_1 - 1, 0, Eof | Fail);
       
  2337     std_log(LOG_FILENAME_LINE,"Test end");
       
  2338     std_log(LOG_FILENAME_LINE,"Test start");
       
  2339     TEST (T, LONG_MIN, lmin_minus_2, sizeof lmin_minus_2 - 1, 0, Eof | Fail);
       
  2340     std_log(LOG_FILENAME_LINE,"Test end");
       
  2341     std_log(LOG_FILENAME_LINE,"Test start");
       
  2342     TEST (T, LONG_MIN, lmin_minus_3, sizeof lmin_minus_3 - 1, 0, Eof | Fail);
       
  2343     std_log(LOG_FILENAME_LINE,"Test end");
       
  2344     std_log(LOG_FILENAME_LINE,"Test start");
       
  2345 
       
  2346     TEST (T, LONG_MAX, lmax,         sizeof lmax - 1,         0, Eof);
       
  2347     std_log(LOG_FILENAME_LINE,"Test end");
       
  2348     std_log(LOG_FILENAME_LINE,"Test start");
       
  2349     TEST (T, LONG_MAX, lmax_plus_1,  sizeof lmax_plus_1 - 1,  0, Eof | Fail);
       
  2350     std_log(LOG_FILENAME_LINE,"Test end");
       
  2351     std_log(LOG_FILENAME_LINE,"Test start");
       
  2352     TEST (T, LONG_MAX, lmax_plus_2,  sizeof lmax_plus_2 - 1,  0, Eof | Fail);
       
  2353     std_log(LOG_FILENAME_LINE,"Test end");
       
  2354     std_log(LOG_FILENAME_LINE,"Test start");
       
  2355     TEST (T, LONG_MAX, lmax_plus_3,  sizeof lmax_plus_3 - 1,  0, Eof | Fail);
       
  2356     std_log(LOG_FILENAME_LINE,"Test end");
       
  2357     std_log(LOG_FILENAME_LINE,"Test start");
       
  2358     TEST (T, LONG_MAX, lmax_x_f,     sizeof lmax_x_f - 1,     0, Eof | Fail);
       
  2359     std_log(LOG_FILENAME_LINE,"Test end");
       
  2360     std_log(LOG_FILENAME_LINE,"Test start");
       
  2361 
       
  2362     TEST (T, LONG_MAX, vflow_1,      sizeof vflow_1 - 1,      0, Eof | Fail);
       
  2363     std_log(LOG_FILENAME_LINE,"Test end");
       
  2364 #ifndef	SAME_AS_UNIX_COMMENT
       
  2365     std_log(LOG_FILENAME_LINE,"Test start");
       
  2366 
       
  2367 
       
  2368     // verify that the combination of ERANGE and LONG_MAX
       
  2369     // doesn't trip the facet up if it uses strtol()
       
  2370     errno = ERANGE;
       
  2371     TEST (T, _RWSTD_LONG_MAX, _RWSTD_STRSTR (_RWSTD_LONG_MAX), -1, 0, Good);
       
  2372     std_log(LOG_FILENAME_LINE,"Test end");
       
  2373 
       
  2374 #ifndef __SYMBIAN32__
       
  2375     rw_assert (ERANGE == errno, 0, __LINE__,
       
  2376                "errno unexpectedly changed from %d (%{#*m}) to %d (%{#m})",
       
  2377                ERANGE, ERANGE, errno);
       
  2378 #else
       
  2379  if(ERANGE != errno)
       
  2380  {
       
  2381    failures++;
       
  2382    std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  2383    }
       
  2384   #endif //__SYMBIAN32__
       
  2385 #endif  
       
  2386     rw_info (0, 0, 0, "extension: base 1 (Roman)");
       
  2387 
       
  2388 #define BASE(n)   ((n)  << _RWSTD_IOS_BASEOFF)
       
  2389 
       
  2390 
       
  2391     std_log(LOG_FILENAME_LINE,"Test start");
       
  2392     TEST (T,    0L, "0",           1, BASE (1), Eof);
       
  2393     std_log(LOG_FILENAME_LINE,"Test end");
       
  2394 #ifndef	SAME_AS_UNIX_COMMENT    
       
  2395     std_log(LOG_FILENAME_LINE,"Test start");
       
  2396     TEST (T,    1L, "i",           1, BASE (1), Eof);
       
  2397     std_log(LOG_FILENAME_LINE,"Test end");
       
  2398     std_log(LOG_FILENAME_LINE,"Test start");
       
  2399     TEST (T,    2L, "ii",          2, BASE (1), Eof);
       
  2400     std_log(LOG_FILENAME_LINE,"Test end");
       
  2401     std_log(LOG_FILENAME_LINE,"Test start");
       
  2402     TEST (T,    3L, "iii",         3, BASE (1), Eof);
       
  2403     std_log(LOG_FILENAME_LINE,"Test end");
       
  2404     std_log(LOG_FILENAME_LINE,"Test start");
       
  2405     TEST (T,    4L, "iiii",        4, BASE (1), Eof);
       
  2406     std_log(LOG_FILENAME_LINE,"Test end");
       
  2407     std_log(LOG_FILENAME_LINE,"Test start");
       
  2408     TEST (T,    4L, "iv",          2, BASE (1), Eof);
       
  2409     std_log(LOG_FILENAME_LINE,"Test end");
       
  2410     std_log(LOG_FILENAME_LINE,"Test start");
       
  2411     TEST (T,    5L, "v",           1, BASE (1), Eof);
       
  2412     std_log(LOG_FILENAME_LINE,"Test end");
       
  2413     std_log(LOG_FILENAME_LINE,"Test start");
       
  2414     TEST (T,    6L, "vi",          2, BASE (1), Eof);
       
  2415     std_log(LOG_FILENAME_LINE,"Test end");
       
  2416     std_log(LOG_FILENAME_LINE,"Test start");
       
  2417     TEST (T,    7L, "vii",         3, BASE (1), Eof);
       
  2418     std_log(LOG_FILENAME_LINE,"Test end");
       
  2419     std_log(LOG_FILENAME_LINE,"Test start");
       
  2420     TEST (T,    8L, "viii",        4, BASE (1), Eof);
       
  2421     std_log(LOG_FILENAME_LINE,"Test end");
       
  2422     std_log(LOG_FILENAME_LINE,"Test start");
       
  2423     TEST (T,    9L, "viiii",       5, BASE (1), Eof);
       
  2424     std_log(LOG_FILENAME_LINE,"Test end");
       
  2425     std_log(LOG_FILENAME_LINE,"Test start");
       
  2426     TEST (T,    9L, "ix",          2, BASE (1), Eof);
       
  2427     std_log(LOG_FILENAME_LINE,"Test end");
       
  2428     std_log(LOG_FILENAME_LINE,"Test start");
       
  2429     TEST (T,   10L, "x",           1, BASE (1), Eof);
       
  2430     std_log(LOG_FILENAME_LINE,"Test end");
       
  2431     std_log(LOG_FILENAME_LINE,"Test start");
       
  2432 
       
  2433     TEST (T,   12L, "XII",         3, BASE (1), Eof);
       
  2434     std_log(LOG_FILENAME_LINE,"Test end");
       
  2435     std_log(LOG_FILENAME_LINE,"Test start");
       
  2436     TEST (T,  123L, "CXXIII",      6, BASE (1), Eof);
       
  2437     std_log(LOG_FILENAME_LINE,"Test end");
       
  2438     std_log(LOG_FILENAME_LINE,"Test start");
       
  2439     TEST (T, 1234L, "MCCXXXIV",    8, BASE (1), Eof);
       
  2440     std_log(LOG_FILENAME_LINE,"Test end");
       
  2441     std_log(LOG_FILENAME_LINE,"Test start");
       
  2442     TEST (T, 2345L, "MMCCCXLV",    8, BASE (1), Eof); 
       
  2443     std_log(LOG_FILENAME_LINE,"Test end");
       
  2444     std_log(LOG_FILENAME_LINE,"Test start");
       
  2445     TEST (T, 3456L, "MMMCDLVI",    8, BASE (1), Eof);
       
  2446     std_log(LOG_FILENAME_LINE,"Test end");
       
  2447     std_log(LOG_FILENAME_LINE,"Test start");
       
  2448     TEST (T, 4567L, "MMMMDLXVII", 10, BASE (1), Eof); 
       
  2449     std_log(LOG_FILENAME_LINE,"Test end");
       
  2450     std_log(LOG_FILENAME_LINE,"Test start");
       
  2451     TEST (T, 4999L, "MMMMCMXCIX", 10, BASE (1), Eof); 
       
  2452     std_log(LOG_FILENAME_LINE,"Test end");
       
  2453 #endif    
       
  2454     std_log(LOG_FILENAME_LINE,"Test start");
       
  2455     TEST (T, 5000L, "5000",        4, BASE (1), Eof); 
       
  2456     std_log(LOG_FILENAME_LINE,"Test end");
       
  2457     std_log(LOG_FILENAME_LINE,"Test start");
       
  2458     TEST (T, 5678L, "5678",        4, BASE (1), Eof); 
       
  2459     std_log(LOG_FILENAME_LINE,"Test end");
       
  2460     std_log(LOG_FILENAME_LINE,"Test start");
       
  2461 
       
  2462     TEST (T, 5001L, "5001i",       4, BASE (1), Good); 
       
  2463     std_log(LOG_FILENAME_LINE,"Test end");
       
  2464     std_log(LOG_FILENAME_LINE,"Test start");
       
  2465     TEST (T, 5002L, "5002v",       4, BASE (1), Good); 
       
  2466     std_log(LOG_FILENAME_LINE,"Test end");
       
  2467     std_log(LOG_FILENAME_LINE,"Test start");
       
  2468     TEST (T, 5003L, "5003x",       4, BASE (1), Good); 
       
  2469     std_log(LOG_FILENAME_LINE,"Test end");
       
  2470     std_log(LOG_FILENAME_LINE,"Test start");
       
  2471     TEST (T, 5004L, "5004l",       4, BASE (1), Good); 
       
  2472     std_log(LOG_FILENAME_LINE,"Test end");
       
  2473     std_log(LOG_FILENAME_LINE,"Test start");
       
  2474     TEST (T, 5005L, "5005d",       4, BASE (1), Good); 
       
  2475     std_log(LOG_FILENAME_LINE,"Test end");
       
  2476     std_log(LOG_FILENAME_LINE,"Test start");
       
  2477     TEST (T, 5006L, "5006m",       4, BASE (1), Good); 
       
  2478 
       
  2479     std_log(LOG_FILENAME_LINE,"Test end");
       
  2480     std_log(LOG_FILENAME_LINE,"Test start");
       
  2481     rw_info (0, 0, 0, "extension: base 2 (ios_base::bin, binary)");
       
  2482 
       
  2483     TEST (T,    0L, "0",           1, BASE (2), Eof);
       
  2484     std_log(LOG_FILENAME_LINE,"Test end");
       
  2485     std_log(LOG_FILENAME_LINE,"Test start");
       
  2486     TEST (T,    1L, "1",           1, BASE (2), Eof);
       
  2487     std_log(LOG_FILENAME_LINE,"Test end");
       
  2488 #ifndef	SAME_AS_UNIX_COMMENT    
       
  2489     std_log(LOG_FILENAME_LINE,"Test start");
       
  2490     TEST (T,    2L, "10",          2, BASE (2), Eof);
       
  2491     std_log(LOG_FILENAME_LINE,"Test end");
       
  2492     std_log(LOG_FILENAME_LINE,"Test start");
       
  2493     TEST (T,    3L, "11",          2, BASE (2), Eof);
       
  2494     std_log(LOG_FILENAME_LINE,"Test end");
       
  2495     std_log(LOG_FILENAME_LINE,"Test start");
       
  2496     TEST (T,    4L, "100",         3, BASE (2), Eof);
       
  2497     std_log(LOG_FILENAME_LINE,"Test end");
       
  2498     std_log(LOG_FILENAME_LINE,"Test start");
       
  2499     TEST (T,    5L, "101",         3, BASE (2), Eof);
       
  2500     std_log(LOG_FILENAME_LINE,"Test end");
       
  2501     std_log(LOG_FILENAME_LINE,"Test start");
       
  2502     TEST (T,    6L, "110",         3, BASE (2), Eof);
       
  2503     std_log(LOG_FILENAME_LINE,"Test end");
       
  2504     std_log(LOG_FILENAME_LINE,"Test start");
       
  2505     TEST (T,    7L, "111",         3, BASE (2), Eof);
       
  2506     std_log(LOG_FILENAME_LINE,"Test end");
       
  2507     std_log(LOG_FILENAME_LINE,"Test start");
       
  2508     TEST (T,    8L, "1000",        4, BASE (2), Eof);
       
  2509     std_log(LOG_FILENAME_LINE,"Test end");
       
  2510     std_log(LOG_FILENAME_LINE,"Test start");
       
  2511     TEST (T,    9L, "1001",        4, BASE (2), Eof);
       
  2512     std_log(LOG_FILENAME_LINE,"Test end");
       
  2513     std_log(LOG_FILENAME_LINE,"Test start");
       
  2514     TEST (T,   10L, "1010",        4, BASE (2), Eof);
       
  2515     std_log(LOG_FILENAME_LINE,"Test end");
       
  2516     std_log(LOG_FILENAME_LINE,"Test start");
       
  2517     TEST (T,   11L, "1011",        4, BASE (2), Eof);
       
  2518     std_log(LOG_FILENAME_LINE,"Test end");
       
  2519     std_log(LOG_FILENAME_LINE,"Test start");
       
  2520     TEST (T,   12L, "1100",        4, BASE (2), Eof);
       
  2521     std_log(LOG_FILENAME_LINE,"Test end");
       
  2522     std_log(LOG_FILENAME_LINE,"Test start");
       
  2523     TEST (T,   13L, "1101",        4, BASE (2), Eof);
       
  2524     std_log(LOG_FILENAME_LINE,"Test end");
       
  2525     std_log(LOG_FILENAME_LINE,"Test start");
       
  2526     TEST (T,   14L, "1110",        4, BASE (2), Eof);
       
  2527     TEST (T,   15L, "1111",        4, BASE (2), Eof);
       
  2528     std_log(LOG_FILENAME_LINE,"Test end");
       
  2529     std_log(LOG_FILENAME_LINE,"Test start");
       
  2530     TEST (T,   16L, "10000",       5, BASE (2), Eof);
       
  2531     std_log(LOG_FILENAME_LINE,"Test end");
       
  2532     std_log(LOG_FILENAME_LINE,"Test start");
       
  2533     TEST (T,   17L, "+10001",      6, BASE (2), Eof);
       
  2534     std_log(LOG_FILENAME_LINE,"Test end");
       
  2535     std_log(LOG_FILENAME_LINE,"Test start");
       
  2536     TEST (T,  -18L, "-10010",      6, BASE (2), Eof);
       
  2537     std_log(LOG_FILENAME_LINE,"Test end");
       
  2538     std_log(LOG_FILENAME_LINE,"Test start");
       
  2539 
       
  2540     TEST (T,   17L, "100012",      5, BASE (2), Good);
       
  2541     std_log(LOG_FILENAME_LINE,"Test end");
       
  2542     std_log(LOG_FILENAME_LINE,"Test start");
       
  2543     TEST (T,   18L, "100103",      5, BASE (2), Good);
       
  2544     std_log(LOG_FILENAME_LINE,"Test end");
       
  2545     std_log(LOG_FILENAME_LINE,"Test start");
       
  2546     TEST (T,   19L, "100114",      5, BASE (2), Good);
       
  2547 
       
  2548     std_log(LOG_FILENAME_LINE,"Test end");
       
  2549 #endif    
       
  2550     std_log(LOG_FILENAME_LINE,"Test start");
       
  2551     rw_info (0, 0, 0, "extension: base 3");
       
  2552 
       
  2553     TEST (T,    0L, "0",           1, BASE (3), Eof);
       
  2554     std_log(LOG_FILENAME_LINE,"Test end");
       
  2555     std_log(LOG_FILENAME_LINE,"Test start");
       
  2556     TEST (T,    1L, "1",           1, BASE (3), Eof);
       
  2557     std_log(LOG_FILENAME_LINE,"Test end");
       
  2558     std_log(LOG_FILENAME_LINE,"Test start");
       
  2559     TEST (T,    2L, "2",           1, BASE (3), Eof);
       
  2560     std_log(LOG_FILENAME_LINE,"Test end");
       
  2561 #ifndef	SAME_AS_UNIX_COMMENT    
       
  2562     std_log(LOG_FILENAME_LINE,"Test start");
       
  2563     TEST (T,    3L, "10",          2, BASE (3), Eof);
       
  2564     std_log(LOG_FILENAME_LINE,"Test end");
       
  2565     std_log(LOG_FILENAME_LINE,"Test start");
       
  2566     TEST (T,    4L, "11",          2, BASE (3), Eof);
       
  2567     std_log(LOG_FILENAME_LINE,"Test end");
       
  2568     std_log(LOG_FILENAME_LINE,"Test start");
       
  2569     TEST (T,    5L, "12",          2, BASE (3), Eof);
       
  2570     std_log(LOG_FILENAME_LINE,"Test end");
       
  2571     std_log(LOG_FILENAME_LINE,"Test start");
       
  2572     TEST (T,    6L, "20",          2, BASE (3), Eof);
       
  2573     std_log(LOG_FILENAME_LINE,"Test end");
       
  2574     std_log(LOG_FILENAME_LINE,"Test start");
       
  2575     TEST (T,    7L, "21",          2, BASE (3), Eof);
       
  2576     std_log(LOG_FILENAME_LINE,"Test end");
       
  2577     std_log(LOG_FILENAME_LINE,"Test start");
       
  2578     TEST (T,    8L, "22",          2, BASE (3), Eof);
       
  2579 
       
  2580     std_log(LOG_FILENAME_LINE,"Test end");
       
  2581     std_log(LOG_FILENAME_LINE,"Test start");
       
  2582     TEST (T,    8L, "223",         2, BASE (3), Good);
       
  2583 
       
  2584     std_log(LOG_FILENAME_LINE,"Test end");
       
  2585 #endif    
       
  2586     std_log(LOG_FILENAME_LINE,"Test start");
       
  2587     rw_info (0, 0, 0, "extension: base 4");
       
  2588 
       
  2589     TEST (T,    0L, "0",           1, BASE (4), Eof);
       
  2590     std_log(LOG_FILENAME_LINE,"Test end");
       
  2591     std_log(LOG_FILENAME_LINE,"Test start");
       
  2592     TEST (T,    1L, "1",           1, BASE (4), Eof);
       
  2593     std_log(LOG_FILENAME_LINE,"Test end");
       
  2594     std_log(LOG_FILENAME_LINE,"Test start");
       
  2595     TEST (T,    2L, "2",           1, BASE (4), Eof);
       
  2596     std_log(LOG_FILENAME_LINE,"Test end");
       
  2597     std_log(LOG_FILENAME_LINE,"Test start");
       
  2598     TEST (T,    3L, "3",           1, BASE (4), Eof);
       
  2599     std_log(LOG_FILENAME_LINE,"Test end");
       
  2600 #ifndef	SAME_AS_UNIX_COMMENT    
       
  2601     std_log(LOG_FILENAME_LINE,"Test start");
       
  2602     TEST (T,    4L, "10",          2, BASE (4), Eof);
       
  2603     std_log(LOG_FILENAME_LINE,"Test end");
       
  2604     std_log(LOG_FILENAME_LINE,"Test start");
       
  2605     TEST (T,    5L, "11",          2, BASE (4), Eof);
       
  2606     std_log(LOG_FILENAME_LINE,"Test end");
       
  2607     std_log(LOG_FILENAME_LINE,"Test start");
       
  2608     TEST (T,    6L, "12",          2, BASE (4), Eof);
       
  2609     std_log(LOG_FILENAME_LINE,"Test end");
       
  2610     std_log(LOG_FILENAME_LINE,"Test start");
       
  2611     TEST (T,    7L, "13",          2, BASE (4), Eof);
       
  2612     std_log(LOG_FILENAME_LINE,"Test end");
       
  2613     std_log(LOG_FILENAME_LINE,"Test start");
       
  2614     TEST (T,    8L, "20",          2, BASE (4), Eof);
       
  2615     std_log(LOG_FILENAME_LINE,"Test end");
       
  2616     std_log(LOG_FILENAME_LINE,"Test start");
       
  2617     TEST (T,    9L, "21",          2, BASE (4), Eof);
       
  2618     std_log(LOG_FILENAME_LINE,"Test end");
       
  2619     std_log(LOG_FILENAME_LINE,"Test start");
       
  2620     TEST (T,   10L, "22",          2, BASE (4), Eof);
       
  2621     std_log(LOG_FILENAME_LINE,"Test end");
       
  2622     std_log(LOG_FILENAME_LINE,"Test start");
       
  2623     TEST (T,   11L, "23",          2, BASE (4), Eof);
       
  2624     std_log(LOG_FILENAME_LINE,"Test end");
       
  2625     std_log(LOG_FILENAME_LINE,"Test start");
       
  2626 
       
  2627     TEST (T,   11L, "234",         2, BASE (4), Good);
       
  2628     std_log(LOG_FILENAME_LINE,"Test end");
       
  2629 #endif    
       
  2630     std_log(LOG_FILENAME_LINE,"Test start");
       
  2631 
       
  2632     rw_info (0, 0, 0, "extension: base 5");
       
  2633 
       
  2634     TEST (T,    0L, "0",           1, BASE (5), Eof);
       
  2635     std_log(LOG_FILENAME_LINE,"Test end");
       
  2636     std_log(LOG_FILENAME_LINE,"Test start");
       
  2637     TEST (T,    1L, "1",           1, BASE (5), Eof);
       
  2638     std_log(LOG_FILENAME_LINE,"Test end");
       
  2639     std_log(LOG_FILENAME_LINE,"Test start");
       
  2640     TEST (T,    2L, "2",           1, BASE (5), Eof);
       
  2641     std_log(LOG_FILENAME_LINE,"Test end");
       
  2642     std_log(LOG_FILENAME_LINE,"Test start");
       
  2643     TEST (T,    3L, "3",           1, BASE (5), Eof);
       
  2644     std_log(LOG_FILENAME_LINE,"Test end");
       
  2645     std_log(LOG_FILENAME_LINE,"Test start");
       
  2646     TEST (T,    4L, "4",           1, BASE (5), Eof);
       
  2647     std_log(LOG_FILENAME_LINE,"Test end");
       
  2648 #ifndef	SAME_AS_UNIX_COMMENT
       
  2649     std_log(LOG_FILENAME_LINE,"Test start");
       
  2650     TEST (T,    5L, "10",          2, BASE (5), Eof);
       
  2651     std_log(LOG_FILENAME_LINE,"Test end");
       
  2652     std_log(LOG_FILENAME_LINE,"Test start");
       
  2653     TEST (T,    6L, "11",          2, BASE (5), Eof);
       
  2654     std_log(LOG_FILENAME_LINE,"Test end");
       
  2655     std_log(LOG_FILENAME_LINE,"Test start");
       
  2656     TEST (T,    7L, "12",          2, BASE (5), Eof);
       
  2657     std_log(LOG_FILENAME_LINE,"Test end");
       
  2658     std_log(LOG_FILENAME_LINE,"Test start");
       
  2659     TEST (T,    8L, "13",          2, BASE (5), Eof);
       
  2660     std_log(LOG_FILENAME_LINE,"Test end");
       
  2661     std_log(LOG_FILENAME_LINE,"Test start");
       
  2662     TEST (T,    9L, "14",          2, BASE (5), Eof);
       
  2663     std_log(LOG_FILENAME_LINE,"Test end");
       
  2664     std_log(LOG_FILENAME_LINE,"Test start");
       
  2665     TEST (T,   10L, "20",          2, BASE (5), Eof);
       
  2666     std_log(LOG_FILENAME_LINE,"Test end");
       
  2667     std_log(LOG_FILENAME_LINE,"Test start");
       
  2668     TEST (T,   11L, "21",          2, BASE (5), Eof);
       
  2669     std_log(LOG_FILENAME_LINE,"Test end");
       
  2670     std_log(LOG_FILENAME_LINE,"Test start");
       
  2671     TEST (T,   12L, "22",          2, BASE (5), Eof);
       
  2672     std_log(LOG_FILENAME_LINE,"Test end");
       
  2673     std_log(LOG_FILENAME_LINE,"Test start");
       
  2674     TEST (T,   13L, "23",          2, BASE (5), Eof);
       
  2675     std_log(LOG_FILENAME_LINE,"Test end");
       
  2676     std_log(LOG_FILENAME_LINE,"Test start");
       
  2677     TEST (T,   14L, "24",          2, BASE (5), Eof);
       
  2678     std_log(LOG_FILENAME_LINE,"Test end");
       
  2679     std_log(LOG_FILENAME_LINE,"Test start");
       
  2680 
       
  2681     TEST (T,   14L, "245",         2, BASE (5), Good);
       
  2682     std_log(LOG_FILENAME_LINE,"Test end");
       
  2683 #endif
       
  2684 
       
  2685     if (rw_opt_no_errno) {
       
  2686         rw_note (0, 0, 0, "errno test disabled");
       
  2687     }
       
  2688     else {
       
  2689         test_errno (charT (), long ());
       
  2690     }
       
  2691 
       
  2692 #endif   // NO_GET_LONG
       
  2693 
       
  2694 }
       
  2695 
       
  2696 /**************************************************************************/
       
  2697 
       
  2698 
       
  2699 template <class charT>
       
  2700 void test_ulong (charT, const char *cname)
       
  2701 {
       
  2702 #ifndef NO_GET_ULONG
       
  2703 
       
  2704     const char* const tname = "unsigned long";
       
  2705 
       
  2706     rw_info (0, 0, 0, "std::num_get<%s>::get (..., %s&)",
       
  2707              cname, tname);
       
  2708 
       
  2709     // negative numbers are conventionally parsed and interpreted
       
  2710     // according to the following algorithm:
       
  2711 
       
  2712     //   1.  extract sign S
       
  2713     //   2.  extract unsigned number N
       
  2714     //   3.  if (S == '-' && N <= ULONG_MAX) X = ULONG_MAX - N + 1
       
  2715     //   4.  if (S != '-' && N <= ULONG_MAX) X = N
       
  2716     //   5.  if (N > ULONG_MAX) X = ULONG_MAX, set failbit
       
  2717     //   6.  return X
       
  2718 
       
  2719     std_log(LOG_FILENAME_LINE,"Test start");
       
  2720 
       
  2721     TEST (T,       0UL,   "0",  1, 0, Eof);
       
  2722     std_log(LOG_FILENAME_LINE,"Test end");
       
  2723     std_log(LOG_FILENAME_LINE,"Test start");
       
  2724     TEST (T,       0UL,   "+0", 2, 0, Eof);
       
  2725     std_log(LOG_FILENAME_LINE,"Test end");
       
  2726     std_log(LOG_FILENAME_LINE,"Test start");
       
  2727     TEST (T,       0UL,   "-0", 2, 0, Eof);
       
  2728     std_log(LOG_FILENAME_LINE,"Test end");
       
  2729     std_log(LOG_FILENAME_LINE,"Test start");
       
  2730     TEST (T,       1UL,   "+1", 2, 0, Eof);
       
  2731     std_log(LOG_FILENAME_LINE,"Test end");
       
  2732     std_log(LOG_FILENAME_LINE,"Test start");
       
  2733     TEST (T,    1078UL, "1078", 4, 0, Eof);
       
  2734     std_log(LOG_FILENAME_LINE,"Test end");
       
  2735     std_log(LOG_FILENAME_LINE,"Test start");
       
  2736     TEST (T, ULONG_MAX,   "-1", 2, 0, Eof);
       
  2737     std_log(LOG_FILENAME_LINE,"Test end");
       
  2738     std_log(LOG_FILENAME_LINE,"Test start");
       
  2739 
       
  2740     TEST (T,             65535UL,       "65535",  5, 0, Eof);
       
  2741     std_log(LOG_FILENAME_LINE,"Test end");
       
  2742     std_log(LOG_FILENAME_LINE,"Test start");
       
  2743     TEST (T, ULONG_MAX - 65535UL + 1UL, "-65535", 6, 0, Eof);
       
  2744     std_log(LOG_FILENAME_LINE,"Test end");
       
  2745 
       
  2746 
       
  2747     // exercise integer overflow
       
  2748 #if ULONG_MAX == 0xffffUL
       
  2749     const char ulmax[]        = "65535";
       
  2750     const char ulmax_plus_1[] = "65536";
       
  2751     const char ulmax_plus_2[] = "65537";
       
  2752     const char ulmax_plus_3[] = "65538";
       
  2753     const char ulmax_x_f[]    = "0xfffff";
       
  2754     const char vflow_1[]      = "131061";
       
  2755 #elif ULONG_MAX == 0xffffffffUL
       
  2756     const char ulmax[]        = "4294967295";   // 0xffffffffUL
       
  2757     const char ulmax_plus_1[] = "4294967296";   // 0xffffffffUL + 1
       
  2758     const char ulmax_plus_2[] = "4294967297";   // 0xffffffffUL + 2
       
  2759     const char ulmax_plus_3[] = "4294967298";   // 0xffffffffUL + 3
       
  2760     const char ulmax_x_f[]    = "0xfffffffff";  // extra 'f' (times 0xf)
       
  2761     const char vflow_1[]      = "8589934581";
       
  2762 #elif ULONG_MAX > 0xffffffffUL
       
  2763     const char ulmax[]        = "18446744073709551615";
       
  2764     const char ulmax_plus_1[] = "18446744073709551616";
       
  2765     const char ulmax_plus_2[] = "18446744073709551617";
       
  2766     const char ulmax_plus_3[] = "18446744073709551618";
       
  2767     const char ulmax_x_f[]    = "0xfffffffffffffffff";
       
  2768     const char vflow_1[]      = "36893488147419103221";
       
  2769 #else
       
  2770     // working around a SunPro bug (PR #28279)
       
  2771     const char ulmax[]        = "0";
       
  2772     const char ulmax_plus_1[] = "999999999999999999997";
       
  2773     const char ulmax_plus_2[] = "999999999999999999998";
       
  2774     const char ulmax_plus_3[] = "999999999999999999999";
       
  2775     const char ulmax_x_f[]    = "0xfffffffffffffffff";
       
  2776     const char vflow_1[]      = "999999999999999999990";
       
  2777 #endif
       
  2778     std_log(LOG_FILENAME_LINE,"Test start");
       
  2779     TEST (T, ULONG_MAX, ulmax,        sizeof ulmax - 1,        0, Eof);
       
  2780     std_log(LOG_FILENAME_LINE,"Test end");
       
  2781     std_log(LOG_FILENAME_LINE,"Test start");
       
  2782     TEST (T, ULONG_MAX, ulmax_plus_1, sizeof ulmax_plus_1 - 1, 0, Eof | Fail);
       
  2783     std_log(LOG_FILENAME_LINE,"Test end");
       
  2784     std_log(LOG_FILENAME_LINE,"Test start");
       
  2785     TEST (T, ULONG_MAX, ulmax_plus_2, sizeof ulmax_plus_2 - 1, 0, Eof | Fail);
       
  2786     std_log(LOG_FILENAME_LINE,"Test end");
       
  2787     std_log(LOG_FILENAME_LINE,"Test start");
       
  2788     TEST (T, ULONG_MAX, ulmax_plus_3, sizeof ulmax_plus_3 - 1, 0, Eof | Fail);
       
  2789     std_log(LOG_FILENAME_LINE,"Test end");
       
  2790     std_log(LOG_FILENAME_LINE,"Test start");
       
  2791     TEST (T, ULONG_MAX, ulmax_x_f,    sizeof ulmax_x_f - 1,    0, Eof | Fail);
       
  2792     std_log(LOG_FILENAME_LINE,"Test end");
       
  2793     std_log(LOG_FILENAME_LINE,"Test start");
       
  2794 
       
  2795     TEST (T, ULONG_MAX, vflow_1,      sizeof vflow_1 - 1,      0, Eof | Fail);
       
  2796     std_log(LOG_FILENAME_LINE,"Test end");
       
  2797 
       
  2798 #ifndef	SAME_AS_UNIX_COMMENT 
       
  2799     // verify that the combination of ERANGE and ULONG_MAX
       
  2800     // doesn't trip the facet up if it uses strtoul()
       
  2801     errno = ERANGE;
       
  2802     TEST (T, ULONG_MAX, _RWSTD_STRSTR (_RWSTD_ULONG_MAX), -1, 0, Good);
       
  2803 #ifndef __SYMBIAN32__
       
  2804     rw_assert (ERANGE == errno, 0, __LINE__,
       
  2805                "errno unexpectedly changed from %d (%{#*m}) to %d (%{#m})",
       
  2806                ERANGE, ERANGE, errno);
       
  2807 #else
       
  2808   if(ERANGE != errno)
       
  2809   {
       
  2810    failures++;
       
  2811    std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  2812    }
       
  2813  #endif//__SYMBIAN32__
       
  2814    
       
  2815  #endif
       
  2816 
       
  2817     if (rw_opt_no_errno) {
       
  2818         rw_note (0, 0, 0, "errno test disabled");
       
  2819     }
       
  2820     else {
       
  2821         test_errno (charT (), (unsigned long)0);
       
  2822     }
       
  2823 
       
  2824 #endif   // NO_GET_ULONG
       
  2825 }
       
  2826 
       
  2827 /**************************************************************************/
       
  2828 
       
  2829 template <class charT>
       
  2830 void test_llong (charT, const char *cname)
       
  2831 {
       
  2832 #ifndef NO_GET_LLONG
       
  2833 
       
  2834     const char* const tname = "long long";
       
  2835 
       
  2836     rw_info (0, 0, 0, "extension: std::num_get<%s>::get (..., %s&)",
       
  2837              cname, tname);
       
  2838 
       
  2839 #  ifndef _MSC_VER
       
  2840 #    define LL(number)   number ## LL
       
  2841 #  else   // if defined (_MSC_VER)
       
  2842      // MSVC 7.0 doesn't recognize the LL suffix
       
  2843 #    define LL(number)   number ## I64
       
  2844 #  endif   // _MSC_VER
       
  2845 
       
  2846     std_log(LOG_FILENAME_LINE,"Test start");
       
  2847 
       
  2848     TEST (T, LL (                   0),                    "0",  1, 0, Eof);
       
  2849     std_log(LOG_FILENAME_LINE,"Test end");
       
  2850     std_log(LOG_FILENAME_LINE,"Test start");
       
  2851     TEST (T, LL (                   0),                   "+0",  2, 0, Eof);
       
  2852     std_log(LOG_FILENAME_LINE,"Test end");
       
  2853     std_log(LOG_FILENAME_LINE,"Test start");
       
  2854 
       
  2855     TEST (T, LL (                   0),                   "-0",  2, 0, Eof);
       
  2856     std_log(LOG_FILENAME_LINE,"Test end");
       
  2857     std_log(LOG_FILENAME_LINE,"Test start");
       
  2858     TEST (T, LL (                   1),                   "+1",  2, 0, Eof);
       
  2859     std_log(LOG_FILENAME_LINE,"Test end");
       
  2860     std_log(LOG_FILENAME_LINE,"Test start");
       
  2861     TEST (T, LL (                  -1),                   "-1",  2, 0, Eof);
       
  2862     std_log(LOG_FILENAME_LINE,"Test end");
       
  2863     std_log(LOG_FILENAME_LINE,"Test start");
       
  2864     TEST (T, LL (                1079),                 "1079",  4, 0, Eof);
       
  2865 
       
  2866     std_log(LOG_FILENAME_LINE,"Test end");
       
  2867     std_log(LOG_FILENAME_LINE,"Test start");
       
  2868     // LLONG_MAX for a 64-bit long long
       
  2869     TEST (T, LL (+9223372036854775807), "+9223372036854775807", 20, 0, Eof);
       
  2870     std_log(LOG_FILENAME_LINE,"Test end");
       
  2871     std_log(LOG_FILENAME_LINE,"Test start");
       
  2872 
       
  2873     // compute LLONG_MIN for a 64-bit long long using integer arithmetic
       
  2874     // to avoid warnings due to 9223372036854775808 being too large for
       
  2875     // long long
       
  2876     // e.g., gcc 4.0 issues the following:
       
  2877     // warning: integer constant is so large that it is unsigned
       
  2878     // warning: this decimal constant is unsigned only in ISO C90
       
  2879     TEST (T, LL (-9223372036854775807) - 1, "-9223372036854775808", 20, 0, Eof);
       
  2880     std_log(LOG_FILENAME_LINE,"Test end");
       
  2881 
       
  2882 
       
  2883     if (rw_opt_no_errno) {
       
  2884         rw_note (0, 0, 0, "errno test disabled");
       
  2885     }
       
  2886     else {
       
  2887         test_errno (charT (), (long long)0);
       
  2888     }
       
  2889 
       
  2890 #endif   // NO_GET_LLONG
       
  2891 
       
  2892 }
       
  2893 
       
  2894 /**************************************************************************/
       
  2895 
       
  2896 template <class charT>
       
  2897 void test_ullong (charT, const char *cname)
       
  2898 {
       
  2899 #ifndef NO_GET_ULLONG
       
  2900 
       
  2901     const char* const tname = "unsigned long long";
       
  2902 
       
  2903     rw_info (0, 0, 0, "extension: std::num_get<%s>::get (..., %s&)",
       
  2904              cname, tname);
       
  2905 
       
  2906 #  ifndef _MSC_VER
       
  2907 #    define ULL(number)   number ## ULL
       
  2908 #  else   // if defined (_MSC_VER)
       
  2909      // MSVC 7.0 doesn't recognize the LL suffix
       
  2910 #    define LL(number)   number ## UI64
       
  2911 #  endif   // _MSC_VER
       
  2912 
       
  2913     std_log(LOG_FILENAME_LINE,"Test start");
       
  2914 
       
  2915     TEST (T, ULL (                  0),                     "0",  1, 0, Eof);
       
  2916     std_log(LOG_FILENAME_LINE,"Test end");
       
  2917     std_log(LOG_FILENAME_LINE,"Test start");
       
  2918     TEST (T, ULL (                  0),                    "+0",  2, 0, Eof);
       
  2919     std_log(LOG_FILENAME_LINE,"Test end");
       
  2920     std_log(LOG_FILENAME_LINE,"Test start");
       
  2921     TEST (T, ULL (                  0),                    "-0",  2, 0, Eof);
       
  2922     std_log(LOG_FILENAME_LINE,"Test end");
       
  2923     std_log(LOG_FILENAME_LINE,"Test start");
       
  2924     TEST (T, ULL (                  1),                    "+1",  2, 0, Eof);
       
  2925     std_log(LOG_FILENAME_LINE,"Test end");
       
  2926     std_log(LOG_FILENAME_LINE,"Test start");
       
  2927     TEST (T, ULL (                1080),                 "1080",  4, 0, Eof);
       
  2928     std_log(LOG_FILENAME_LINE,"Test end");
       
  2929     std_log(LOG_FILENAME_LINE,"Test start");
       
  2930     TEST (T, ULL (18446744073709551615), "18446744073709551615", 20, 0, Eof);
       
  2931     std_log(LOG_FILENAME_LINE,"Test end");
       
  2932     
       
  2933 
       
  2934     if (rw_opt_no_errno) {
       
  2935         rw_note (0, 0, 0, "errno test disabled");
       
  2936     }
       
  2937     else {
       
  2938         test_errno (charT (), (unsigned long long)0);
       
  2939     }
       
  2940 
       
  2941 #endif   // NO_GET_ULLONG
       
  2942 
       
  2943 }
       
  2944 
       
  2945 /**************************************************************************/
       
  2946 
       
  2947 template <class charT>
       
  2948 void test_pvoid (charT, const char *cname)
       
  2949 {
       
  2950 #ifndef NO_GET_PVOID
       
  2951 
       
  2952     const char* const tname = "void*";
       
  2953 
       
  2954     rw_info (0, 0, 0, "std::num_get<%s>::get (..., %s&)",
       
  2955              cname, tname);
       
  2956 
       
  2957     typedef void* PVoid;
       
  2958 
       
  2959     std_log(LOG_FILENAME_LINE,"Test start");
       
  2960 
       
  2961     TEST (T, PVoid (         0),    "0", 1, 0, Eof);
       
  2962     std_log(LOG_FILENAME_LINE,"Test end");
       
  2963     std_log(LOG_FILENAME_LINE,"Test start");
       
  2964     TEST (T, PVoid (         1),    "1", 1, 0, Eof);
       
  2965     std_log(LOG_FILENAME_LINE,"Test end");
       
  2966     std_log(LOG_FILENAME_LINE,"Test start");
       
  2967     TEST (T, PVoid (         2),    "2", 1, 0, Eof);
       
  2968     std_log(LOG_FILENAME_LINE,"Test end");
       
  2969     std_log(LOG_FILENAME_LINE,"Test start");
       
  2970     TEST (T, PVoid (         3),   "03", 2, 0, Eof);
       
  2971     std_log(LOG_FILENAME_LINE,"Test end");
       
  2972     std_log(LOG_FILENAME_LINE,"Test start");
       
  2973     TEST (T, PVoid (0x000000ff),   "ff", 2, 0, Eof);
       
  2974     std_log(LOG_FILENAME_LINE,"Test end");
       
  2975     std_log(LOG_FILENAME_LINE,"Test start");
       
  2976     TEST (T, PVoid (0x00000fff),  "FFF", 3, 0, Eof);
       
  2977     std_log(LOG_FILENAME_LINE,"Test end");
       
  2978     std_log(LOG_FILENAME_LINE,"Test start");
       
  2979     TEST (T, PVoid (0x0000ffff), "FfFf", 4, 0, Eof);
       
  2980     std_log(LOG_FILENAME_LINE,"Test end");
       
  2981 
       
  2982 
       
  2983     // exercise overflow conditions
       
  2984 #if ULONG_MAX == 0xffffUL
       
  2985     const char pvmax[]        = "0xffff";
       
  2986     const char pvmax_plus_1[] = "0x10000";
       
  2987 #elif ULONG_MAX == 0xffffffffUL
       
  2988     const char pvmax[]        = "0xffffffff";
       
  2989     const char pvmax_plus_1[] = "0x100000000";
       
  2990 #elif ULONG_MAX > 0xffffffffUL
       
  2991     const char pvmax[]        = "0xffffffffffffffff";
       
  2992     const char pvmax_plus_1[] = "0x10000000000000000";
       
  2993 #else
       
  2994     // working around a SunPro bug (PR #28279)
       
  2995     const char pvmax[]        = "0";
       
  2996     const char pvmax_plus_1[] = "0xffffffffffffffffffffffffffffffff";
       
  2997 #endif 
       
  2998 
       
  2999 #define PVOIDSTR(name)   name, sizeof name - 1
       
  3000 
       
  3001     std_log(LOG_FILENAME_LINE,"Test start");
       
  3002 
       
  3003     std_log(LOG_FILENAME_LINE,"Test end");
       
  3004     std_log(LOG_FILENAME_LINE,"Test start");
       
  3005     TEST (T, PVoid (~0), PVOIDSTR (pvmax),        0, Eof);
       
  3006     TEST (T, PVoid (~0), PVOIDSTR (pvmax_plus_1), 0, Eof | Fail);
       
  3007     std_log(LOG_FILENAME_LINE,"Test end");
       
  3008 
       
  3009 
       
  3010 #undef PVOIDSTR
       
  3011 
       
  3012     // exercise error conditions
       
  3013     std_log(LOG_FILENAME_LINE,"Test start");
       
  3014     TEST (T, PVoid (0),  "", 0, 0, Eof | Fail);
       
  3015     std_log(LOG_FILENAME_LINE,"Test end");
       
  3016     std_log(LOG_FILENAME_LINE,"Test start");
       
  3017     TEST (T, PVoid (0), "-", 1, 0, Eof | Fail);
       
  3018     std_log(LOG_FILENAME_LINE,"Test end");
       
  3019     std_log(LOG_FILENAME_LINE,"Test start");
       
  3020     TEST (T, PVoid (0), "+", 1, 0, Eof | Fail);
       
  3021     std_log(LOG_FILENAME_LINE,"Test end");
       
  3022     std_log(LOG_FILENAME_LINE,"Test start");
       
  3023     TEST (T, PVoid (0), "x", 0, 0, Fail);
       
  3024     std_log(LOG_FILENAME_LINE,"Test end");
       
  3025 
       
  3026 
       
  3027 #endif   // NO_GET_PVOID
       
  3028 }
       
  3029 
       
  3030 /**************************************************************************/
       
  3031 
       
  3032 
       
  3033 template <class charT, class floatT>
       
  3034 void test_floating_point (charT, floatT, bool test_locale)
       
  3035 {
       
  3036     const char* const cname = rw_any_t (charT ()).type_name ();
       
  3037     const char* const tname = rw_any_t (floatT ()).type_name ();
       
  3038 
       
  3039     Punct<charT>::thousands_sep_ = ';';
       
  3040 
       
  3041     typedef floatT F;
       
  3042 
       
  3043     std_log(LOG_FILENAME_LINE,"Test start");
       
  3044 
       
  3045     TEST (T, F (0.0),  "0",     1, 0, Eof);
       
  3046     std_log(LOG_FILENAME_LINE,"Test end");
       
  3047     std_log(LOG_FILENAME_LINE,"Test start");
       
  3048     TEST (T, F (0.0),  "0.",    2, 0, Eof);
       
  3049     std_log(LOG_FILENAME_LINE,"Test end");
       
  3050     std_log(LOG_FILENAME_LINE,"Test start");
       
  3051     TEST (T, F (0.0),  ".0",    2, 0, Eof);
       
  3052     std_log(LOG_FILENAME_LINE,"Test end");
       
  3053     std_log(LOG_FILENAME_LINE,"Test start");
       
  3054     TEST (T, F (0.0),  "0.0",   3, 0, Eof);
       
  3055     std_log(LOG_FILENAME_LINE,"Test end");
       
  3056     std_log(LOG_FILENAME_LINE,"Test start");
       
  3057     TEST (T, F (1.0),  "1",     1, 0, Eof);
       
  3058     std_log(LOG_FILENAME_LINE,"Test end");
       
  3059     std_log(LOG_FILENAME_LINE,"Test start");
       
  3060     TEST (T, F (2.0),  "2",     1, 0, Eof);
       
  3061     std_log(LOG_FILENAME_LINE,"Test end");
       
  3062     std_log(LOG_FILENAME_LINE,"Test start");
       
  3063     TEST (T, F (3.0),  "3",     1, 0, Eof);
       
  3064     std_log(LOG_FILENAME_LINE,"Test end");
       
  3065     std_log(LOG_FILENAME_LINE,"Test start");
       
  3066     TEST (T, F (4.0),  "4 ",    1, 0, Good);   // trailing ' ' not extracted
       
  3067     std_log(LOG_FILENAME_LINE,"Test end");
       
  3068     std_log(LOG_FILENAME_LINE,"Test start");
       
  3069     TEST (T, F (5.0),  "5.",    2, 0, Eof);    // trailing '.' extracted
       
  3070     std_log(LOG_FILENAME_LINE,"Test end");
       
  3071     std_log(LOG_FILENAME_LINE,"Test start");
       
  3072     TEST (T, F (5.0),  "5.0",   3, 0, Eof);
       
  3073     std_log(LOG_FILENAME_LINE,"Test end");
       
  3074     std_log(LOG_FILENAME_LINE,"Test start");
       
  3075     TEST (T, F (5.1),  "5.1",   3, 0, Eof);
       
  3076     std_log(LOG_FILENAME_LINE,"Test end");
       
  3077     std_log(LOG_FILENAME_LINE,"Test start");
       
  3078     TEST (T, F (5.2),  "5.2 ",  3, 0, Good);   // trailing ' ' not extracted
       
  3079     std_log(LOG_FILENAME_LINE,"Test end");
       
  3080     std_log(LOG_FILENAME_LINE,"Test start");
       
  3081     TEST (T, F (5.3),  "5.3;",  3, 0, Good);   // trailing ';' not extracted
       
  3082     std_log(LOG_FILENAME_LINE,"Test end");
       
  3083     std_log(LOG_FILENAME_LINE,"Test start");
       
  3084     TEST (T, F (5.4),  "5.4; ", 3, 0, Good);
       
  3085     std_log(LOG_FILENAME_LINE,"Test end");
       
  3086     std_log(LOG_FILENAME_LINE,"Test start");
       
  3087     TEST (T, F (5.41), "5.41",  4, 0, Eof);
       
  3088     std_log(LOG_FILENAME_LINE,"Test end");
       
  3089     std_log(LOG_FILENAME_LINE,"Test start");
       
  3090     TEST (T, F (5.42), "5.42.", 4, 0, Good);   // trailing '.' not extracted
       
  3091     std_log(LOG_FILENAME_LINE,"Test end");
       
  3092     std_log(LOG_FILENAME_LINE,"Test start");
       
  3093     TEST (T, F (5.43), "5.43+", 4, 0, Good);   // trailing '+' not extracted
       
  3094     std_log(LOG_FILENAME_LINE,"Test end");
       
  3095     std_log(LOG_FILENAME_LINE,"Test start");
       
  3096     TEST (T, F (5.44), "5.44-", 4, 0, Good);   // trailing '-' not extracted
       
  3097     std_log(LOG_FILENAME_LINE,"Test end");
       
  3098     std_log(LOG_FILENAME_LINE,"Test start");
       
  3099 
       
  3100     TEST (T, F (1.0e+00), "1",                               1, 0, Eof);
       
  3101     std_log(LOG_FILENAME_LINE,"Test end");
       
  3102     std_log(LOG_FILENAME_LINE,"Test start");
       
  3103     TEST (T, F (1.0e+01), "10",                              2, 0, Eof);
       
  3104     std_log(LOG_FILENAME_LINE,"Test end");
       
  3105     std_log(LOG_FILENAME_LINE,"Test start");
       
  3106     TEST (T, F (1.0e+02), "100",                             3, 0, Eof);
       
  3107     std_log(LOG_FILENAME_LINE,"Test end");
       
  3108     std_log(LOG_FILENAME_LINE,"Test start");
       
  3109     TEST (T, F (1.0e+03), "1000",                            4, 0, Eof);
       
  3110     std_log(LOG_FILENAME_LINE,"Test end");
       
  3111     std_log(LOG_FILENAME_LINE,"Test start");
       
  3112     TEST (T, F (1.0e+04), "10000",                           5, 0, Eof);
       
  3113     std_log(LOG_FILENAME_LINE,"Test end");
       
  3114     std_log(LOG_FILENAME_LINE,"Test start");
       
  3115     TEST (T, F (1.0e+05), "100000",                          6, 0, Eof);
       
  3116     std_log(LOG_FILENAME_LINE,"Test end");
       
  3117     std_log(LOG_FILENAME_LINE,"Test start");
       
  3118     TEST (T, F (1.0e+06), "1000000",                         7, 0, Eof);
       
  3119     std_log(LOG_FILENAME_LINE,"Test end");
       
  3120     std_log(LOG_FILENAME_LINE,"Test start");
       
  3121     TEST (T, F (1.0e+07), "10000000",                        8, 0, Eof);
       
  3122     std_log(LOG_FILENAME_LINE,"Test end");
       
  3123     std_log(LOG_FILENAME_LINE,"Test start");
       
  3124     TEST (T, F (1.0e+08), "100000000",                       9, 0, Eof);
       
  3125     std_log(LOG_FILENAME_LINE,"Test end");
       
  3126     std_log(LOG_FILENAME_LINE,"Test start");
       
  3127     TEST (T, F (1.0e+09), "1000000000",                     10, 0, Eof);
       
  3128     std_log(LOG_FILENAME_LINE,"Test end");
       
  3129     std_log(LOG_FILENAME_LINE,"Test start");
       
  3130     TEST (T, F (1.0e+10), "10000000000",                    11, 0, Eof);
       
  3131     std_log(LOG_FILENAME_LINE,"Test end");
       
  3132     std_log(LOG_FILENAME_LINE,"Test start");
       
  3133     TEST (T, F (1.0e+11), "100000000000",                   12, 0, Eof);
       
  3134     std_log(LOG_FILENAME_LINE,"Test end");
       
  3135     std_log(LOG_FILENAME_LINE,"Test start");
       
  3136     TEST (T, F (1.0e+12), "1000000000000",                  13, 0, Eof);
       
  3137     std_log(LOG_FILENAME_LINE,"Test end");
       
  3138     std_log(LOG_FILENAME_LINE,"Test start");
       
  3139     TEST (T, F (1.0e+13), "10000000000000",                 14, 0, Eof);
       
  3140     std_log(LOG_FILENAME_LINE,"Test end");
       
  3141     std_log(LOG_FILENAME_LINE,"Test start");
       
  3142     TEST (T, F (1.0e+14), "100000000000000",                15, 0, Eof);
       
  3143     std_log(LOG_FILENAME_LINE,"Test end");
       
  3144     std_log(LOG_FILENAME_LINE,"Test start");
       
  3145     TEST (T, F (1.0e+15), "1000000000000000",               16, 0, Eof);
       
  3146     std_log(LOG_FILENAME_LINE,"Test end");
       
  3147     std_log(LOG_FILENAME_LINE,"Test start");
       
  3148     TEST (T, F (1.0e+16), "10000000000000000",              17, 0, Eof);
       
  3149     std_log(LOG_FILENAME_LINE,"Test end");
       
  3150     std_log(LOG_FILENAME_LINE,"Test start");
       
  3151     TEST (T, F (1.0e+17), "100000000000000000",             18, 0, Eof);
       
  3152     std_log(LOG_FILENAME_LINE,"Test end");
       
  3153     std_log(LOG_FILENAME_LINE,"Test start");
       
  3154     TEST (T, F (1.0e+18), "1000000000000000000",            19, 0, Eof);
       
  3155     std_log(LOG_FILENAME_LINE,"Test end");
       
  3156     std_log(LOG_FILENAME_LINE,"Test start");
       
  3157     TEST (T, F (1.0e+19), "10000000000000000000",           20, 0, Eof);
       
  3158     std_log(LOG_FILENAME_LINE,"Test end");
       
  3159     std_log(LOG_FILENAME_LINE,"Test start");
       
  3160     TEST (T, F (1.0e+20), "100000000000000000000",          21, 0, Eof);
       
  3161     std_log(LOG_FILENAME_LINE,"Test end");
       
  3162     std_log(LOG_FILENAME_LINE,"Test start");
       
  3163     TEST (T, F (1.0e+21), "1000000000000000000000",         22, 0, Eof);
       
  3164     std_log(LOG_FILENAME_LINE,"Test end");
       
  3165     std_log(LOG_FILENAME_LINE,"Test start");
       
  3166     TEST (T, F (1.0e+22), "10000000000000000000000",        23, 0, Eof);
       
  3167     std_log(LOG_FILENAME_LINE,"Test end");
       
  3168     std_log(LOG_FILENAME_LINE,"Test start");
       
  3169     TEST (T, F (1.0e+23), "100000000000000000000000",       24, 0, Eof);
       
  3170     std_log(LOG_FILENAME_LINE,"Test end");
       
  3171     std_log(LOG_FILENAME_LINE,"Test start");
       
  3172     TEST (T, F (1.0e+24), "1000000000000000000000000",      25, 0, Eof);
       
  3173     std_log(LOG_FILENAME_LINE,"Test end");
       
  3174     std_log(LOG_FILENAME_LINE,"Test start");
       
  3175     TEST (T, F (1.0e+25), "10000000000000000000000000",     26, 0, Eof);
       
  3176     std_log(LOG_FILENAME_LINE,"Test end");
       
  3177     std_log(LOG_FILENAME_LINE,"Test start");
       
  3178     TEST (T, F (1.0e+26), "100000000000000000000000000",    27, 0, Eof);
       
  3179     std_log(LOG_FILENAME_LINE,"Test end");
       
  3180     std_log(LOG_FILENAME_LINE,"Test start");
       
  3181     TEST (T, F (1.0e+27), "1000000000000000000000000000",   28, 0, Eof);
       
  3182     std_log(LOG_FILENAME_LINE,"Test end");
       
  3183     std_log(LOG_FILENAME_LINE,"Test start");
       
  3184     TEST (T, F (1.0e+28), "10000000000000000000000000000",  29, 0, Eof);
       
  3185     std_log(LOG_FILENAME_LINE,"Test end");
       
  3186     std_log(LOG_FILENAME_LINE,"Test start");
       
  3187     TEST (T, F (1.0e+29), "100000000000000000000000000000", 30, 0, Eof);
       
  3188 
       
  3189     std_log(LOG_FILENAME_LINE,"Test end");
       
  3190 
       
  3191 #ifdef __SYMBIAN32__
       
  3192  #define VALSTR(x)   floatT (x), #x, strlen (#x)
       
  3193 #else 
       
  3194 #define VALSTR(x)   floatT (x), #x, std::strlen (#x)
       
  3195 #endif //__SYMBIAN32__
       
  3196 
       
  3197     // exercise various forms of floating point 0
       
  3198 
       
  3199     std_log(LOG_FILENAME_LINE,"Test start");
       
  3200 
       
  3201     TEST (T, VALSTR ( 0.),      0, Eof);
       
  3202     std_log(LOG_FILENAME_LINE,"Test end");
       
  3203     std_log(LOG_FILENAME_LINE,"Test start");
       
  3204     TEST (T, VALSTR (+0.),      0, Eof);
       
  3205     std_log(LOG_FILENAME_LINE,"Test end");
       
  3206     std_log(LOG_FILENAME_LINE,"Test start");
       
  3207     TEST (T, VALSTR (-0.),      0, Eof);
       
  3208     std_log(LOG_FILENAME_LINE,"Test end");
       
  3209     std_log(LOG_FILENAME_LINE,"Test start");
       
  3210 
       
  3211     TEST (T, VALSTR ( .0),      0, Eof);
       
  3212     std_log(LOG_FILENAME_LINE,"Test end");
       
  3213     std_log(LOG_FILENAME_LINE,"Test start");
       
  3214     TEST (T, VALSTR (+.0),      0, Eof);
       
  3215     std_log(LOG_FILENAME_LINE,"Test end");
       
  3216     std_log(LOG_FILENAME_LINE,"Test start");
       
  3217     TEST (T, VALSTR (-.0),      0, Eof);
       
  3218     std_log(LOG_FILENAME_LINE,"Test end");
       
  3219     std_log(LOG_FILENAME_LINE,"Test start");
       
  3220 
       
  3221     TEST (T, VALSTR ( 0e0),     0, Eof);
       
  3222     std_log(LOG_FILENAME_LINE,"Test end");
       
  3223     std_log(LOG_FILENAME_LINE,"Test start");
       
  3224     TEST (T, VALSTR (+0e0),     0, Eof);
       
  3225     std_log(LOG_FILENAME_LINE,"Test end");
       
  3226     std_log(LOG_FILENAME_LINE,"Test start");
       
  3227     TEST (T, VALSTR (-0e0),     0, Eof);
       
  3228     std_log(LOG_FILENAME_LINE,"Test end");
       
  3229     std_log(LOG_FILENAME_LINE,"Test start");
       
  3230 
       
  3231     TEST (T, VALSTR ( 0E+0),    0, Eof);
       
  3232     std_log(LOG_FILENAME_LINE,"Test end");
       
  3233     std_log(LOG_FILENAME_LINE,"Test start");
       
  3234     TEST (T, VALSTR (+0E-0),    0, Eof);
       
  3235     std_log(LOG_FILENAME_LINE,"Test end");
       
  3236     std_log(LOG_FILENAME_LINE,"Test start");
       
  3237     TEST (T, VALSTR (-0E+0),    0, Eof);
       
  3238     std_log(LOG_FILENAME_LINE,"Test end");
       
  3239     std_log(LOG_FILENAME_LINE,"Test start");
       
  3240 
       
  3241     TEST (T, VALSTR ( 0.0e+0),  0, Eof);
       
  3242     std_log(LOG_FILENAME_LINE,"Test end");
       
  3243     std_log(LOG_FILENAME_LINE,"Test start");
       
  3244     TEST (T, VALSTR (+0.0e+0),  0, Eof);
       
  3245     std_log(LOG_FILENAME_LINE,"Test end");
       
  3246     std_log(LOG_FILENAME_LINE,"Test start");
       
  3247     TEST (T, VALSTR (-0.0e+0),  0, Eof);
       
  3248     std_log(LOG_FILENAME_LINE,"Test end");
       
  3249     std_log(LOG_FILENAME_LINE,"Test start");
       
  3250 
       
  3251     TEST (T, VALSTR ( 0.0E+0),  0, Eof);
       
  3252     std_log(LOG_FILENAME_LINE,"Test end");
       
  3253     std_log(LOG_FILENAME_LINE,"Test start");
       
  3254     TEST (T, VALSTR (+0.0E+0),  0, Eof);
       
  3255     std_log(LOG_FILENAME_LINE,"Test end");
       
  3256     std_log(LOG_FILENAME_LINE,"Test start");
       
  3257     TEST (T, VALSTR (-0.0E+0),  0, Eof);
       
  3258     std_log(LOG_FILENAME_LINE,"Test end");
       
  3259     std_log(LOG_FILENAME_LINE,"Test start");
       
  3260 
       
  3261     // exercise 'e' immediately following decimal_point
       
  3262     TEST (T, VALSTR ( 0.e+0),   0, Eof);
       
  3263     std_log(LOG_FILENAME_LINE,"Test end");
       
  3264     std_log(LOG_FILENAME_LINE,"Test start");
       
  3265     TEST (T, VALSTR (+0.e+0),   0, Eof);
       
  3266     std_log(LOG_FILENAME_LINE,"Test end");
       
  3267     std_log(LOG_FILENAME_LINE,"Test start");
       
  3268     TEST (T, VALSTR (-0.e+0),   0, Eof);
       
  3269     std_log(LOG_FILENAME_LINE,"Test end");
       
  3270     std_log(LOG_FILENAME_LINE,"Test start");
       
  3271 
       
  3272     // same as above but with an 'E'
       
  3273     TEST (T, VALSTR ( 0.E+0),   0, Eof);
       
  3274     std_log(LOG_FILENAME_LINE,"Test end");
       
  3275     std_log(LOG_FILENAME_LINE,"Test start");
       
  3276     TEST (T, VALSTR (+0.E+0),   0, Eof);
       
  3277     std_log(LOG_FILENAME_LINE,"Test end");
       
  3278     std_log(LOG_FILENAME_LINE,"Test start");
       
  3279     TEST (T, VALSTR (-0.E+0),   0, Eof);
       
  3280     std_log(LOG_FILENAME_LINE,"Test end");
       
  3281     std_log(LOG_FILENAME_LINE,"Test start");
       
  3282 
       
  3283     // exercise 0 with a non-zero exponent
       
  3284     TEST (T, VALSTR ( 0.0e+1),  0, Eof);
       
  3285     std_log(LOG_FILENAME_LINE,"Test end");
       
  3286     std_log(LOG_FILENAME_LINE,"Test start");
       
  3287     TEST (T, VALSTR ( 0.0e2),   0, Eof);
       
  3288     std_log(LOG_FILENAME_LINE,"Test end");
       
  3289     std_log(LOG_FILENAME_LINE,"Test start");
       
  3290     TEST (T, VALSTR (+0.0e+3),  0, Eof);
       
  3291     std_log(LOG_FILENAME_LINE,"Test end");
       
  3292     std_log(LOG_FILENAME_LINE,"Test start");
       
  3293     TEST (T, VALSTR (+0.0e4),   0, Eof);
       
  3294     std_log(LOG_FILENAME_LINE,"Test end");
       
  3295     std_log(LOG_FILENAME_LINE,"Test start");
       
  3296     TEST (T, VALSTR (-0.0e+5),  0, Eof);
       
  3297     std_log(LOG_FILENAME_LINE,"Test end");
       
  3298     std_log(LOG_FILENAME_LINE,"Test start");
       
  3299     TEST (T, VALSTR (-0.0e+6),  0, Eof);
       
  3300     std_log(LOG_FILENAME_LINE,"Test end");
       
  3301     std_log(LOG_FILENAME_LINE,"Test start");
       
  3302 
       
  3303     TEST (T, VALSTR ( 0.0E+7),  0, Eof);
       
  3304     std_log(LOG_FILENAME_LINE,"Test end");
       
  3305     std_log(LOG_FILENAME_LINE,"Test start");
       
  3306     TEST (T, VALSTR ( 0.0E8),   0, Eof);
       
  3307     std_log(LOG_FILENAME_LINE,"Test end");
       
  3308     std_log(LOG_FILENAME_LINE,"Test start");
       
  3309     TEST (T, VALSTR (+0.0E+9),  0, Eof);
       
  3310     std_log(LOG_FILENAME_LINE,"Test end");
       
  3311     std_log(LOG_FILENAME_LINE,"Test start");
       
  3312     TEST (T, VALSTR (+0.0E10),  0, Eof);
       
  3313     std_log(LOG_FILENAME_LINE,"Test end");
       
  3314     std_log(LOG_FILENAME_LINE,"Test start");
       
  3315     TEST (T, VALSTR (-0.0E+11), 0, Eof);
       
  3316     std_log(LOG_FILENAME_LINE,"Test end");
       
  3317     std_log(LOG_FILENAME_LINE,"Test start");
       
  3318     TEST (T, VALSTR (-0.0E+12), 0, Eof);
       
  3319     std_log(LOG_FILENAME_LINE,"Test end");
       
  3320     std_log(LOG_FILENAME_LINE,"Test start");
       
  3321 
       
  3322     // exercise 0 with a negative exponent
       
  3323     TEST (T, VALSTR ( 0.0e-1),  0, Eof);
       
  3324     std_log(LOG_FILENAME_LINE,"Test end");
       
  3325     std_log(LOG_FILENAME_LINE,"Test start");
       
  3326     TEST (T, VALSTR (+0.0e-2),  0, Eof);
       
  3327     std_log(LOG_FILENAME_LINE,"Test end");
       
  3328     std_log(LOG_FILENAME_LINE,"Test start");
       
  3329     TEST (T, VALSTR (-0.0e-3),  0, Eof);
       
  3330     std_log(LOG_FILENAME_LINE,"Test end");
       
  3331     std_log(LOG_FILENAME_LINE,"Test start");
       
  3332 
       
  3333     // exercise formats with no digits before decimal_point
       
  3334     TEST (T, VALSTR ( .0e1),    0, Eof);
       
  3335     std_log(LOG_FILENAME_LINE,"Test end");
       
  3336     std_log(LOG_FILENAME_LINE,"Test start");
       
  3337     TEST (T, VALSTR ( .0e+2),   0, Eof);
       
  3338     std_log(LOG_FILENAME_LINE,"Test end");
       
  3339     std_log(LOG_FILENAME_LINE,"Test start");
       
  3340     TEST (T, VALSTR (+.0e+3),   0, Eof);
       
  3341     std_log(LOG_FILENAME_LINE,"Test end");
       
  3342     std_log(LOG_FILENAME_LINE,"Test start");
       
  3343     TEST (T, VALSTR (-.0e+4),   0, Eof);
       
  3344     std_log(LOG_FILENAME_LINE,"Test end");
       
  3345     std_log(LOG_FILENAME_LINE,"Test start");
       
  3346 
       
  3347     TEST (T, VALSTR (1.0e+0),   0, Eof);
       
  3348     std_log(LOG_FILENAME_LINE,"Test end");
       
  3349     std_log(LOG_FILENAME_LINE,"Test start");
       
  3350     TEST (T, VALSTR (1.0e+2),   0, Eof);
       
  3351     std_log(LOG_FILENAME_LINE,"Test end");
       
  3352     std_log(LOG_FILENAME_LINE,"Test start");
       
  3353     TEST (T, VALSTR (1.2e+3),   0, Eof);
       
  3354     std_log(LOG_FILENAME_LINE,"Test end");
       
  3355     std_log(LOG_FILENAME_LINE,"Test start");
       
  3356     TEST (T, VALSTR (1.3e-4),   0, Eof);
       
  3357     std_log(LOG_FILENAME_LINE,"Test end");
       
  3358     std_log(LOG_FILENAME_LINE,"Test start");
       
  3359     TEST (T, VALSTR (1.4e5),    0, Eof);
       
  3360     std_log(LOG_FILENAME_LINE,"Test end");
       
  3361     std_log(LOG_FILENAME_LINE,"Test start");
       
  3362     TEST (T, VALSTR (1.e+6),    0, Eof);
       
  3363     std_log(LOG_FILENAME_LINE,"Test end");
       
  3364     std_log(LOG_FILENAME_LINE,"Test start");
       
  3365     TEST (T, VALSTR (1.e-7),    0, Eof);
       
  3366     std_log(LOG_FILENAME_LINE,"Test end");
       
  3367     std_log(LOG_FILENAME_LINE,"Test start");
       
  3368     TEST (T, VALSTR (1e+8),     0, Eof);
       
  3369     std_log(LOG_FILENAME_LINE,"Test end");
       
  3370     std_log(LOG_FILENAME_LINE,"Test start");
       
  3371     TEST (T, VALSTR (1e-9),     0, Eof);
       
  3372     std_log(LOG_FILENAME_LINE,"Test end");
       
  3373     std_log(LOG_FILENAME_LINE,"Test start");
       
  3374     TEST (T, VALSTR (1e10),     0, Eof);
       
  3375     std_log(LOG_FILENAME_LINE,"Test end");
       
  3376     std_log(LOG_FILENAME_LINE,"Test start");
       
  3377 
       
  3378     TEST (T, VALSTR (+2.0e+0),  0, Eof);
       
  3379     std_log(LOG_FILENAME_LINE,"Test end");
       
  3380     std_log(LOG_FILENAME_LINE,"Test start");
       
  3381     TEST (T, VALSTR (+2.0e+2),  0, Eof);
       
  3382     std_log(LOG_FILENAME_LINE,"Test end");
       
  3383     std_log(LOG_FILENAME_LINE,"Test start");
       
  3384     TEST (T, VALSTR (+2.2e+3),  0, Eof);
       
  3385     std_log(LOG_FILENAME_LINE,"Test end");
       
  3386     std_log(LOG_FILENAME_LINE,"Test start");
       
  3387     TEST (T, VALSTR (+2.3e-4),  0, Eof);
       
  3388     std_log(LOG_FILENAME_LINE,"Test end");
       
  3389     std_log(LOG_FILENAME_LINE,"Test start");
       
  3390     TEST (T, VALSTR (+2.4e5),   0, Eof);
       
  3391     std_log(LOG_FILENAME_LINE,"Test end");
       
  3392     std_log(LOG_FILENAME_LINE,"Test start");
       
  3393     TEST (T, VALSTR (+2.e+6),   0, Eof);
       
  3394     std_log(LOG_FILENAME_LINE,"Test end");
       
  3395     std_log(LOG_FILENAME_LINE,"Test start");
       
  3396     TEST (T, VALSTR (+2.e-7),   0, Eof);
       
  3397     std_log(LOG_FILENAME_LINE,"Test end");
       
  3398     std_log(LOG_FILENAME_LINE,"Test start");
       
  3399     TEST (T, VALSTR (+2e+8),    0, Eof);
       
  3400     std_log(LOG_FILENAME_LINE,"Test end");
       
  3401     std_log(LOG_FILENAME_LINE,"Test start");
       
  3402     TEST (T, VALSTR (+2e-9),    0, Eof);
       
  3403     std_log(LOG_FILENAME_LINE,"Test end");
       
  3404     std_log(LOG_FILENAME_LINE,"Test start");
       
  3405     TEST (T, VALSTR (+2e10),    0, Eof);
       
  3406     std_log(LOG_FILENAME_LINE,"Test end");
       
  3407     std_log(LOG_FILENAME_LINE,"Test start");
       
  3408 
       
  3409     TEST (T, VALSTR (-3.0e+0),  0, Eof);
       
  3410     std_log(LOG_FILENAME_LINE,"Test end");
       
  3411     std_log(LOG_FILENAME_LINE,"Test start");
       
  3412     TEST (T, VALSTR (-3.0e+2),  0, Eof);
       
  3413     std_log(LOG_FILENAME_LINE,"Test end");
       
  3414     std_log(LOG_FILENAME_LINE,"Test start");
       
  3415     TEST (T, VALSTR (-3.2e+3),  0, Eof);
       
  3416     std_log(LOG_FILENAME_LINE,"Test end");
       
  3417     std_log(LOG_FILENAME_LINE,"Test start");
       
  3418     TEST (T, VALSTR (-3.3e-4),  0, Eof);
       
  3419     std_log(LOG_FILENAME_LINE,"Test end");
       
  3420     std_log(LOG_FILENAME_LINE,"Test start");
       
  3421     TEST (T, VALSTR (-3.4e5),   0, Eof);
       
  3422     std_log(LOG_FILENAME_LINE,"Test end");
       
  3423     std_log(LOG_FILENAME_LINE,"Test start");
       
  3424     TEST (T, VALSTR (-3.e+6),   0, Eof);
       
  3425     std_log(LOG_FILENAME_LINE,"Test end");
       
  3426     std_log(LOG_FILENAME_LINE,"Test start");
       
  3427     TEST (T, VALSTR (-3.e-7),   0, Eof);
       
  3428     std_log(LOG_FILENAME_LINE,"Test end");
       
  3429     std_log(LOG_FILENAME_LINE,"Test start");
       
  3430     TEST (T, VALSTR (-3e+8),    0, Eof);
       
  3431     std_log(LOG_FILENAME_LINE,"Test end");
       
  3432     std_log(LOG_FILENAME_LINE,"Test start");
       
  3433     TEST (T, VALSTR (-3e-9),    0, Eof);
       
  3434     std_log(LOG_FILENAME_LINE,"Test end");
       
  3435     std_log(LOG_FILENAME_LINE,"Test start");
       
  3436     TEST (T, VALSTR (-3e10),    0, Eof);
       
  3437     std_log(LOG_FILENAME_LINE,"Test end");
       
  3438     std_log(LOG_FILENAME_LINE,"Test start");
       
  3439 
       
  3440     // test with grouping (thousands_sep are optional in that they either
       
  3441     // may or may not appear; if one appears, correct grouping is enforced)
       
  3442     TEST (T, F (1.0e+29), "100000000000000000000000000000", 30, 0, Eof, "\1");
       
  3443 
       
  3444     std_log(LOG_FILENAME_LINE,"Test end");
       
  3445     std_log(LOG_FILENAME_LINE,"Test start");
       
  3446     // empty grouping, the first thousands_sep terminates parsing
       
  3447     TEST (T, F (1.0),
       
  3448           "1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0",
       
  3449           1, 0, Good, "\0");
       
  3450     std_log(LOG_FILENAME_LINE,"Test end");
       
  3451     std_log(LOG_FILENAME_LINE,"Test start");
       
  3452 
       
  3453     TEST (T, F (1.0e+29),
       
  3454           "1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0",
       
  3455           59, 0, Eof, "\1");
       
  3456     std_log(LOG_FILENAME_LINE,"Test end");
       
  3457     std_log(LOG_FILENAME_LINE,"Test start");
       
  3458 
       
  3459     // lwg issue 358: thousands_sep is only interpreted as such and extracted
       
  3460     // in the integral part of a floating point number; it is considered as
       
  3461     // an invalid character that terminates input once the decimal point has
       
  3462     // been encountered
       
  3463     //                    0....:....1....
       
  3464     TEST (T, F (123456.789), "123;456.789;012", 11, 0, Good, "\3");
       
  3465     std_log(LOG_FILENAME_LINE,"Test end");
       
  3466     std_log(LOG_FILENAME_LINE,"Test start");
       
  3467     TEST (T, F (123456.780), "123;456.78;9012", 10, 0, Good, "\3");
       
  3468     std_log(LOG_FILENAME_LINE,"Test end");
       
  3469     std_log(LOG_FILENAME_LINE,"Test start");
       
  3470     TEST (T, F (123456.700), "123;456.7;89012",  9, 0, Good, "\3");
       
  3471     std_log(LOG_FILENAME_LINE,"Test end");
       
  3472     std_log(LOG_FILENAME_LINE,"Test start");
       
  3473     TEST (T, F (123456.000), "123;456.;789012",  8, 0, Good, "\3");
       
  3474     std_log(LOG_FILENAME_LINE,"Test end");
       
  3475     std_log(LOG_FILENAME_LINE,"Test start");
       
  3476     TEST (T, F (123456e+1),  "123;456e+1;2345", 10, 0, Good, "\3");
       
  3477     std_log(LOG_FILENAME_LINE,"Test end");
       
  3478     std_log(LOG_FILENAME_LINE,"Test start");
       
  3479     TEST (T, F (123456e+2),  "123;456e2;34567",  9, 0, Good, "\3");
       
  3480     std_log(LOG_FILENAME_LINE,"Test end");
       
  3481     std_log(LOG_FILENAME_LINE,"Test start");
       
  3482     TEST (T, F (123456e+3),  "123456e3;456789",  8, 0, Good, "\3");
       
  3483     std_log(LOG_FILENAME_LINE,"Test end");
       
  3484     std_log(LOG_FILENAME_LINE,"Test start");
       
  3485     TEST (T, F (123456.e+2), "123;456.e+2;345", 11, 0, Good, "\3");
       
  3486     std_log(LOG_FILENAME_LINE,"Test end");
       
  3487     std_log(LOG_FILENAME_LINE,"Test start");
       
  3488     TEST (T, F (123456.e+3), "123;456.e3;4567", 10, 0, Good, "\3");
       
  3489     std_log(LOG_FILENAME_LINE,"Test end");
       
  3490     std_log(LOG_FILENAME_LINE,"Test start");
       
  3491     TEST (T, F (123456.e+4), "123456.e4;56789",  9, 0, Good, "\3");
       
  3492     std_log(LOG_FILENAME_LINE,"Test end");
       
  3493     std_log(LOG_FILENAME_LINE,"Test start");
       
  3494 
       
  3495     // exercise behavior on invalid sequences disallowed by the grammar
       
  3496     TEST (T, F (0.0), "",      0, 0, Eof | Fail);
       
  3497     std_log(LOG_FILENAME_LINE,"Test end");
       
  3498     std_log(LOG_FILENAME_LINE,"Test start");
       
  3499     TEST (T, F (0.0), ".",     1, 0, Eof | Fail);
       
  3500     std_log(LOG_FILENAME_LINE,"Test end");
       
  3501     std_log(LOG_FILENAME_LINE,"Test start");
       
  3502     TEST (T, F (0.0), "..",    1, 0, Fail);
       
  3503     std_log(LOG_FILENAME_LINE,"Test end");
       
  3504     std_log(LOG_FILENAME_LINE,"Test start");
       
  3505     TEST (T, F (0.0), ".+",    1, 0, Fail);
       
  3506     std_log(LOG_FILENAME_LINE,"Test end");
       
  3507     std_log(LOG_FILENAME_LINE,"Test start");
       
  3508     TEST (T, F (0.0), ".-",    1, 0, Fail);
       
  3509     std_log(LOG_FILENAME_LINE,"Test end");
       
  3510     std_log(LOG_FILENAME_LINE,"Test start");
       
  3511     TEST (T, F (0.0), ".e",    1, 0, Fail);
       
  3512     std_log(LOG_FILENAME_LINE,"Test end");
       
  3513     std_log(LOG_FILENAME_LINE,"Test start");
       
  3514     TEST (T, F (0.0), ".E",    1, 0, Fail);
       
  3515     std_log(LOG_FILENAME_LINE,"Test end");
       
  3516     std_log(LOG_FILENAME_LINE,"Test start");
       
  3517 
       
  3518     TEST (T, F (0.0), "+",     1, 0, Eof | Fail);
       
  3519     std_log(LOG_FILENAME_LINE,"Test end");
       
  3520     std_log(LOG_FILENAME_LINE,"Test start");
       
  3521     TEST (T, F (0.0), "+.",    2, 0, Eof | Fail);
       
  3522     std_log(LOG_FILENAME_LINE,"Test end");
       
  3523     std_log(LOG_FILENAME_LINE,"Test start");
       
  3524     TEST (T, F (0.0), "++",    1, 0, Fail);
       
  3525     std_log(LOG_FILENAME_LINE,"Test end");
       
  3526     std_log(LOG_FILENAME_LINE,"Test start");
       
  3527     TEST (T, F (0.0), "+-",    1, 0, Fail);
       
  3528     std_log(LOG_FILENAME_LINE,"Test end");
       
  3529     std_log(LOG_FILENAME_LINE,"Test start");
       
  3530     TEST (T, F (0.0), "+e",    1, 0, Fail);
       
  3531     std_log(LOG_FILENAME_LINE,"Test end");
       
  3532     std_log(LOG_FILENAME_LINE,"Test start");
       
  3533     TEST (T, F (0.0), "+E",    1, 0, Fail);
       
  3534     std_log(LOG_FILENAME_LINE,"Test end");
       
  3535     std_log(LOG_FILENAME_LINE,"Test start");
       
  3536 
       
  3537     TEST (T, F (0.0), "-",     1, 0, Eof | Fail);
       
  3538     std_log(LOG_FILENAME_LINE,"Test end");
       
  3539     std_log(LOG_FILENAME_LINE,"Test start");
       
  3540     TEST (T, F (0.0), "-.",    2, 0, Eof | Fail);
       
  3541     std_log(LOG_FILENAME_LINE,"Test end");
       
  3542     std_log(LOG_FILENAME_LINE,"Test start");
       
  3543     TEST (T, F (0.0), "-+",    1, 0, Fail);
       
  3544     std_log(LOG_FILENAME_LINE,"Test end");
       
  3545     std_log(LOG_FILENAME_LINE,"Test start");
       
  3546     TEST (T, F (0.0), "--",    1, 0, Fail);
       
  3547     std_log(LOG_FILENAME_LINE,"Test end");
       
  3548     std_log(LOG_FILENAME_LINE,"Test start");
       
  3549     TEST (T, F (0.0), "-e",    1, 0, Fail);
       
  3550     std_log(LOG_FILENAME_LINE,"Test end");
       
  3551     std_log(LOG_FILENAME_LINE,"Test start");
       
  3552     TEST (T, F (0.0), "-E",    1, 0, Fail);
       
  3553 
       
  3554     std_log(LOG_FILENAME_LINE,"Test end");
       
  3555     std_log(LOG_FILENAME_LINE,"Test start");
       
  3556     TEST (T, F (0.0), ".;",    1, 0, Fail);
       
  3557     std_log(LOG_FILENAME_LINE,"Test end");
       
  3558     std_log(LOG_FILENAME_LINE,"Test start");
       
  3559     TEST (T, F (0.0), ";.;",   0, 0, Fail);
       
  3560 
       
  3561     std_log(LOG_FILENAME_LINE,"Test end");
       
  3562     std_log(LOG_FILENAME_LINE,"Test start");
       
  3563     // exercise lwg issue 338 (whitespace after sign not allowed)
       
  3564     TEST (T, F (0.0), "+ 1",     1, 0, Fail);
       
  3565     std_log(LOG_FILENAME_LINE,"Test end");
       
  3566     std_log(LOG_FILENAME_LINE,"Test start");
       
  3567     TEST (T, F (0.0), "- 2",     1, 0, Fail);
       
  3568     std_log(LOG_FILENAME_LINE,"Test end");
       
  3569     std_log(LOG_FILENAME_LINE,"Test start");
       
  3570     TEST (T, F (0.0), "3.0e+ 1", 5, 0, Fail);
       
  3571     std_log(LOG_FILENAME_LINE,"Test end");
       
  3572     std_log(LOG_FILENAME_LINE,"Test start");
       
  3573     TEST (T, F (0.0), "4.0e- 2", 5, 0, Fail);
       
  3574     std_log(LOG_FILENAME_LINE,"Test end");
       
  3575     std_log(LOG_FILENAME_LINE,"Test start");
       
  3576 
       
  3577     // exercise the ability to parse input in locales where thousands_sep
       
  3578     // is the plus or minus character (e.g., on AIX, the Romanian locale,
       
  3579     // "RO_RO" -- see bug #609)
       
  3580 
       
  3581     Punct<charT>::thousands_sep_ = '+';
       
  3582 
       
  3583     TEST (T, F ( 123e+4),  "123e+4", 6, 0, Eof, "\1");
       
  3584     std_log(LOG_FILENAME_LINE,"Test end");
       
  3585     std_log(LOG_FILENAME_LINE,"Test start");
       
  3586     TEST (T, F ( 124e+5),  "124e+5", 6, 0, Eof, "\1");
       
  3587     std_log(LOG_FILENAME_LINE,"Test end");
       
  3588     std_log(LOG_FILENAME_LINE,"Test start");
       
  3589     TEST (T, F (+125e+6), "+125e+6", 7, 0, Eof, "\1");
       
  3590     std_log(LOG_FILENAME_LINE,"Test end");
       
  3591     std_log(LOG_FILENAME_LINE,"Test start");
       
  3592     TEST (T, F (-126e+7), "-126e+7", 7, 0, Eof, "\1");
       
  3593     std_log(LOG_FILENAME_LINE,"Test end");
       
  3594     std_log(LOG_FILENAME_LINE,"Test start");
       
  3595     TEST (T, F (-127e-8), "-127e-8", 7, 0, Eof, "\1");
       
  3596 
       
  3597     std_log(LOG_FILENAME_LINE,"Test end");
       
  3598     std_log(LOG_FILENAME_LINE,"Test start");
       
  3599     Punct<charT>::thousands_sep_ = '-';
       
  3600 
       
  3601     TEST (T, F ( 123e-4),  "123e-4", 6, 0, Eof, "\1");
       
  3602     std_log(LOG_FILENAME_LINE,"Test end");
       
  3603     std_log(LOG_FILENAME_LINE,"Test start");
       
  3604     TEST (T, F ( 124e-5),  "124e-5", 6, 0, Eof, "\1");
       
  3605     std_log(LOG_FILENAME_LINE,"Test end");
       
  3606     std_log(LOG_FILENAME_LINE,"Test start");
       
  3607     TEST (T, F (+125e-6), "+125e-6", 7, 0, Eof, "\1");
       
  3608     std_log(LOG_FILENAME_LINE,"Test end");
       
  3609     std_log(LOG_FILENAME_LINE,"Test start");
       
  3610     TEST (T, F (+126e-7), "+126e-7", 7, 0, Eof, "\1");
       
  3611     std_log(LOG_FILENAME_LINE,"Test end");
       
  3612     std_log(LOG_FILENAME_LINE,"Test start");
       
  3613     TEST (T, F (+127e+8), "+127e+8", 7, 0, Eof, "\1");
       
  3614     std_log(LOG_FILENAME_LINE,"Test end");
       
  3615 
       
  3616 
       
  3617     // restore to a saner value
       
  3618     Punct<charT>::thousands_sep_ = ';';
       
  3619 
       
  3620     if (test_locale) {
       
  3621         // verify that the global LC_NUMERIC locale setting
       
  3622         // has no impact on the facet (in case it uses scanf())
       
  3623     #ifdef __SYMBIAN32__
       
  3624 #if 0    //what is this test?
       
  3625             for (const char *name = rw_locales (LC_NUMERIC, 0); *name;
       
  3626              name += strlen (name) + 1) {
       
  3627                    // find the first locale whose decimal_point character
       
  3628             // is different than in the classic C locale (i.e., than '.')
       
  3629             if (0 == setlocale (LC_NUMERIC, name))
       
  3630                 continue;
       
  3631 
       
  3632             const lconv* const conv = localeconv ();
       
  3633 
       
  3634             if (!conv)
       
  3635                 continue;
       
  3636 
       
  3637             if (conv->decimal_point && '.' != *conv->decimal_point) {
       
  3638                 rw_info (0, 0, 0, 
       
  3639                          "num_get<%s>::get(..., %s&) when LC_NUMERIC=\"%s\"",
       
  3640                          cname, tname, name);
       
  3641                 break;
       
  3642             }
       
  3643         }
       
  3644 #endif //#if 0    
       
  3645       #else  
       
  3646        
       
  3647         for (const char *name = rw_locales (LC_NUMERIC, 0); *name;
       
  3648              name += std::strlen (name) + 1) {
       
  3649                    // find the first locale whose decimal_point character
       
  3650             // is different than in the classic C locale (i.e., than '.')
       
  3651             if (0 == std::setlocale (LC_NUMERIC, name))
       
  3652                 continue;
       
  3653 
       
  3654             const std::lconv* const conv = std::localeconv ();
       
  3655 
       
  3656             if (!conv)
       
  3657                 continue;
       
  3658 
       
  3659             if (conv->decimal_point && '.' != *conv->decimal_point) {
       
  3660                 rw_info (0, 0, 0, 
       
  3661                          "num_get<%s>::get(..., %s&) when LC_NUMERIC=\"%s\"",
       
  3662                          cname, tname, name);
       
  3663                 break;
       
  3664             }
       
  3665         }
       
  3666 
       
  3667     #endif
       
  3668 
       
  3669     std_log(LOG_FILENAME_LINE,"Test start");
       
  3670     
       
  3671         TEST (T, F ( 1.2e+34),  "1.2e+34", 7, 0, Eof);
       
  3672     std_log(LOG_FILENAME_LINE,"Test end");
       
  3673     std_log(LOG_FILENAME_LINE,"Test start");
       
  3674         TEST (T, F (+1.3e+33), "+1.3e+33", 8, 0, Eof);
       
  3675     std_log(LOG_FILENAME_LINE,"Test end");
       
  3676     std_log(LOG_FILENAME_LINE,"Test start");
       
  3677         TEST (T, F (-1.4e+32), "-1.4e+32", 8, 0, Eof);
       
  3678     std_log(LOG_FILENAME_LINE,"Test end");
       
  3679     std_log(LOG_FILENAME_LINE,"Test start");
       
  3680         TEST (T, F ( 0.5e+31), ".5e+31",   6, 0, Eof);
       
  3681     std_log(LOG_FILENAME_LINE,"Test end");
       
  3682     std_log(LOG_FILENAME_LINE,"Test start");
       
  3683         TEST (T, F (+0.6e+30), "+.6e+30",  7, 0, Eof);
       
  3684     std_log(LOG_FILENAME_LINE,"Test end");
       
  3685     std_log(LOG_FILENAME_LINE,"Test start");
       
  3686         TEST (T, F (-0.7e+29), "-.7e+29",  7, 0, Eof);
       
  3687     std_log(LOG_FILENAME_LINE,"Test end");
       
  3688 
       
  3689 
       
  3690         // reset the global locale
       
  3691      #ifdef __SYMBIAN32__
       
  3692       setlocale (LC_NUMERIC, "C");
       
  3693      #else 
       
  3694         std::setlocale (LC_NUMERIC, "C");
       
  3695      #endif 
       
  3696     }
       
  3697     else
       
  3698         rw_warn (0, 0, 0,
       
  3699                  "num_get<%s>::get (..., %s&) known to fail when LC_NUMERIC "
       
  3700                  "is set to a locale where decimal_point != '.'",
       
  3701                  cname, tname);
       
  3702 
       
  3703     //////////////////////////////////////////////////////////////////
       
  3704     // exercise errno
       
  3705     if (rw_opt_no_errno) {
       
  3706         rw_note (0, 0, 0, "errno test disabled");
       
  3707     }
       
  3708     else {
       
  3709         test_errno (charT (), floatT ());
       
  3710     }
       
  3711 
       
  3712 }
       
  3713 
       
  3714 
       
  3715 /**************************************************************************/
       
  3716 
       
  3717 template <class charT>
       
  3718 void test_flt_uflow (charT, const char *cname)
       
  3719 {
       
  3720 #ifndef NO_GET_FLT
       
  3721 
       
  3722     rw_info (0, 0, 0,
       
  3723              "std::num_get<%s>::get (..., float&) on underflow", cname);
       
  3724 
       
  3725     // exercise bahvior on underflow
       
  3726     float val = 0;
       
  3727     pmax = &val;
       
  3728 
       
  3729     // on underflow, get() follows C99 requirements on strtof()
       
  3730     // i.e., it stores a value in the range [0, +/-FLT_MIN]
       
  3731     // the function does NOT set failbit on underflow (regardless
       
  3732     // of whether strtof() sets errno)
       
  3733     //     If the result underflows (7.12.1), the functions return
       
  3734     //     a value whose magnitude is no greater than the smallest
       
  3735     //     normalized positive number in the return type; whether
       
  3736     //     errno acquires the value ERANGE is implementation-defined.
       
  3737 #ifndef	SAME_AS_UNIX_COMMENT 
       
  3738     TEST (T, (val = FLT_MIN, 0.0f), "1.111111e-9999", 14, 0, Eof);
       
  3739     #ifndef __SYMBIAN32__
       
  3740     rw_assert (!(val < 0.0), 0, __LINE__,
       
  3741                "correct sign after positive underflow");
       
  3742     #else
       
  3743      if((val < 0.0))
       
  3744      {
       
  3745       failures++;
       
  3746       std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3747       }
       
  3748     #endif//__SYMBIAN32__
       
  3749     TEST (T, (val = 0.0f, -FLT_MIN), "-1.111111e-9999", 15, 0, Eof);
       
  3750 #endif    
       
  3751     #ifndef __SYMBIAN32__
       
  3752     rw_assert (!(val > 0.0), 0, __LINE__,
       
  3753                "correct sign after negative underflow");
       
  3754     #else
       
  3755      if((val > 0.0))
       
  3756      {
       
  3757       failures++;
       
  3758       std_log(LOG_FILENAME_LINE,"Reason:Failing");
       
  3759       }
       
  3760     #endif //__SYMBIAN32__
       
  3761     if (1.234567e-39 < FLT_MIN) {
       
  3762 
       
  3763     std_log(LOG_FILENAME_LINE,"Test start");
       
  3764  TEST (T, (val = FLT_MIN, 0.0f),   "1.234567e-39", 12, 0, Eof);
       
  3765     std_log(LOG_FILENAME_LINE,"Test end");
       
  3766 #ifndef	FLT_MIN_NOT_SAME 
       
  3767     std_log(LOG_FILENAME_LINE,"Test start");
       
  3768         TEST (T, (val = 0.0f, -FLT_MIN), "-1.234567e-39", 13, 0, Eof);
       
  3769     std_log(LOG_FILENAME_LINE,"Test end");
       
  3770 #endif    
       
  3771     }
       
  3772 
       
  3773     if (1.234567e-49 < FLT_MIN) {
       
  3774 
       
  3775     std_log(LOG_FILENAME_LINE,"Test start");
       
  3776         TEST (T, (val = FLT_MIN, 0.0f),   "1.234567e-49", 12, 0, Eof);
       
  3777     std_log(LOG_FILENAME_LINE,"Test end");
       
  3778 #ifndef	SAME_AS_UNIX_COMMENT 
       
  3779     std_log(LOG_FILENAME_LINE,"Test start");
       
  3780         TEST (T, (val = 0.0f, -FLT_MIN), "-1.234567e-49", 13, 0, Eof);
       
  3781     std_log(LOG_FILENAME_LINE,"Test end");
       
  3782 #endif    
       
  3783 
       
  3784     }
       
  3785 
       
  3786     if (1.234567e-99 < FLT_MIN) {
       
  3787 
       
  3788     std_log(LOG_FILENAME_LINE,"Test start");
       
  3789         TEST (T, (val = FLT_MIN, 0.0f),   "1.234567e-99", 12, 0, Eof);
       
  3790     std_log(LOG_FILENAME_LINE,"Test end");
       
  3791 #ifndef	SAME_AS_UNIX_COMMENT     
       
  3792     std_log(LOG_FILENAME_LINE,"Test start");
       
  3793         TEST (T, (val = 0.0f, -FLT_MIN), "-1.234567e-99", 13, 0, Eof);
       
  3794     std_log(LOG_FILENAME_LINE,"Test end");
       
  3795 #endif    
       
  3796 
       
  3797     }
       
  3798 
       
  3799     // exercise facet's behavior on underflow:
       
  3800     //   parsing succeeds (fail is clear), +/-min is stored
       
  3801 
       
  3802     std_log(LOG_FILENAME_LINE,"Test start");
       
  3803     TEST (T,  FLT_MIN, _RWSTD_STRSTR ( _RWSTD_DBL_MIN), -1, 0, Eof);
       
  3804     std_log(LOG_FILENAME_LINE,"Test end");
       
  3805 #ifndef	SAME_AS_UNIX_COMMENT     
       
  3806     std_log(LOG_FILENAME_LINE,"Test start");
       
  3807     TEST (T, -FLT_MIN, _RWSTD_STRSTR (-_RWSTD_DBL_MIN), -1, 0, Eof);
       
  3808     std_log(LOG_FILENAME_LINE,"Test end");
       
  3809 #endif
       
  3810 
       
  3811     pmax = 0;   // reset before next test
       
  3812 
       
  3813 
       
  3814     rw_info (0, 0, 0, "get (..., float&) on overflow");
       
  3815 
       
  3816     const float inf = std::numeric_limits<float>::infinity ();
       
  3817 
       
  3818     // on overflow, get() follows C99 requirements on strtof()
       
  3819     // it sets failbit
       
  3820 
       
  3821     std_log(LOG_FILENAME_LINE,"Test start");
       
  3822     TEST (T,  inf, _RWSTD_STRSTR ( _RWSTD_DBL_MAX), -1, 0, Eof | Fail);
       
  3823     std_log(LOG_FILENAME_LINE,"Test end");
       
  3824 #ifndef	SAME_AS_UNIX_COMMENT     
       
  3825     std_log(LOG_FILENAME_LINE,"Test start");
       
  3826     TEST (T, -inf, _RWSTD_STRSTR (-_RWSTD_DBL_MAX), -1, 0, Eof | Fail);
       
  3827     std_log(LOG_FILENAME_LINE,"Test end");
       
  3828 #endif
       
  3829 
       
  3830     if (9.876543e+39 > FLT_MAX) {
       
  3831 
       
  3832     std_log(LOG_FILENAME_LINE,"Test start");
       
  3833         TEST (T,  inf,  "9.876543e+39", 12, 0, Eof | Fail);
       
  3834     std_log(LOG_FILENAME_LINE,"Test end");
       
  3835 #ifndef	FLT_MAX_NOT_SAME    
       
  3836     std_log(LOG_FILENAME_LINE,"Test start");
       
  3837         TEST (T, -inf, "-9.876543e+39", 13, 0, Eof | Fail);
       
  3838     std_log(LOG_FILENAME_LINE,"Test end");
       
  3839 #endif
       
  3840 
       
  3841     }
       
  3842 
       
  3843     if (9.876543e+49 > FLT_MAX) {
       
  3844 
       
  3845     std_log(LOG_FILENAME_LINE,"Test start");
       
  3846         TEST (T,  inf,  "9.876543e+49", 12, 0, Eof | Fail);
       
  3847     std_log(LOG_FILENAME_LINE,"Test end");
       
  3848 #ifndef	FLT_MAX_NOT_SAME    
       
  3849     std_log(LOG_FILENAME_LINE,"Test start");
       
  3850         TEST (T, -inf, "-9.876543e+49", 13, 0, Eof | Fail);
       
  3851     std_log(LOG_FILENAME_LINE,"Test end");
       
  3852 #endif    
       
  3853 
       
  3854     }
       
  3855 
       
  3856     if (9.876543e+99 > FLT_MAX) {
       
  3857 
       
  3858     std_log(LOG_FILENAME_LINE,"Test start");
       
  3859         TEST (T,  inf,  "9.876543e+99", 12, 0, Eof | Fail);
       
  3860     std_log(LOG_FILENAME_LINE,"Test end");
       
  3861 #ifndef	FLT_MAX_NOT_SAME    
       
  3862     std_log(LOG_FILENAME_LINE,"Test start");
       
  3863         TEST (T, -inf, "-9.876543e+99", 13, 0, Eof | Fail);
       
  3864     std_log(LOG_FILENAME_LINE,"Test end");
       
  3865 #endif    
       
  3866 
       
  3867     }
       
  3868     std_log(LOG_FILENAME_LINE,"Test start");
       
  3869     TEST (T,  inf,  "9.999999e+9999", 14, 0, Eof | Fail);
       
  3870     std_log(LOG_FILENAME_LINE,"Test end");
       
  3871     std_log(LOG_FILENAME_LINE,"Test start");
       
  3872     TEST (T, -inf, "-9.999999e+9999", 15, 0, Eof | Fail);
       
  3873     std_log(LOG_FILENAME_LINE,"Test end");
       
  3874     std_log(LOG_FILENAME_LINE,"Test start");
       
  3875 
       
  3876 
       
  3877     // exercise facet's behavior on overflow:
       
  3878     //   parsing fails (fail is set) and +/-infinity is stored
       
  3879 
       
  3880     TEST (T,  inf, _RWSTD_STRSTR ( _RWSTD_DBL_MAX), -1, 0, Eof | Fail);
       
  3881     std_log(LOG_FILENAME_LINE,"Test end");
       
  3882 #ifndef	SAME_AS_UNIX_COMMENT 
       
  3883     std_log(LOG_FILENAME_LINE,"Test start");
       
  3884     TEST (T, -inf, _RWSTD_STRSTR (-_RWSTD_DBL_MAX), -1, 0, Eof | Fail);
       
  3885     std_log(LOG_FILENAME_LINE,"Test end");
       
  3886 #endif
       
  3887 
       
  3888 #  ifdef _RWSTD_LDBL_MAX
       
  3889 
       
  3890     std::ios_base::iostate state = Fail;
       
  3891 
       
  3892     // eofbit set unless LDBL_MAX ends in an 'L' or 'l'
       
  3893     // (it may not when it's the same as double)
       
  3894     if (0 == std::strpbrk (_RWSTD_STRSTR ( _RWSTD_LDBL_MAX), "Ll"))
       
  3895         state |= Eof;
       
  3896 
       
  3897     std_log(LOG_FILENAME_LINE,"Test start");
       
  3898 
       
  3899     TEST (T,  inf, _RWSTD_STRSTR ( _RWSTD_LDBL_MAX), -1, 0, state);
       
  3900     std_log(LOG_FILENAME_LINE,"Test end");
       
  3901     std_log(LOG_FILENAME_LINE,"Test start");
       
  3902     TEST (T, -inf, _RWSTD_STRSTR (-_RWSTD_LDBL_MAX), -1, 0, state);
       
  3903     std_log(LOG_FILENAME_LINE,"Test end");
       
  3904 
       
  3905 
       
  3906 #  endif   // _RWSTD_LDBL_MAX
       
  3907 
       
  3908 
       
  3909 #else   // if defined (NO_GET_FLT)
       
  3910 
       
  3911     _RWSTD_UNUSED (t);
       
  3912 
       
  3913 #endif   // NO_GET_FLT
       
  3914 
       
  3915 }
       
  3916 
       
  3917 /**************************************************************************/
       
  3918 
       
  3919 template <class charT>
       
  3920 void test_flt (charT, const char *cname)
       
  3921 {
       
  3922 #ifndef NO_GET_FLT
       
  3923 
       
  3924     const char* const tname = "float";
       
  3925 
       
  3926     rw_info (0, 0, 0, "std::num_get<%s>::get (..., %s&)",
       
  3927              cname, tname);
       
  3928 
       
  3929     Punct<charT>::thousands_sep_ = ';';
       
  3930 
       
  3931 #  if    !defined (_RWSTD_NO_STRTOF) || !defined (_RWSTD_NO_STRTOF_IN_LIBC) \
       
  3932       || !defined (_RWSTD_NO_STRTOD) || !defined (_RWSTD_NO_STRTOD_IN_LIBC)
       
  3933 
       
  3934     const bool test_locale = true;
       
  3935 
       
  3936 #  else
       
  3937 
       
  3938     const bool test_locale = false;
       
  3939 
       
  3940 #  endif   // _RWSTD_NO_STRTO{D,F}(_IN_LIBC)
       
  3941 
       
  3942     test_floating_point (charT (), float (), test_locale);
       
  3943 
       
  3944     const char *str = _RWSTD_STRSTR (FLT_MAX);
       
  3945 
       
  3946     // some platforms, e.g., HP-UX, #define FLT_MAX (float)3.40282347e+38F
       
  3947     // guard against such definitions
       
  3948     if (*str >= '0' && *str <= '9') {
       
  3949         // FLT_MAX is something like "3.40282347e+38F" (note the 'F'
       
  3950         // at the end) so parsing stops before the end is reached,
       
  3951         // i.e., Eof is not set
       
  3952 #ifndef	FLT_MAX_NOT_SAME
       
  3953     std_log(LOG_FILENAME_LINE,"Test start");
       
  3954         TEST (T,  FLT_MAX, _RWSTD_STRSTR ( FLT_MAX), -1, 0, Good);
       
  3955         std_log(LOG_FILENAME_LINE,"Test end");
       
  3956 #endif        
       
  3957         std_log(LOG_FILENAME_LINE,"Test start");
       
  3958             TEST (T, -FLT_MAX, _RWSTD_STRSTR (-FLT_MAX), -1, 0, Good);
       
  3959         std_log(LOG_FILENAME_LINE,"Test end");
       
  3960     }
       
  3961     else {
       
  3962         std_log(LOG_FILENAME_LINE,"Test start");
       
  3963                 TEST (T,  FLT_MAX, _RWSTD_STRSTR ( _RWSTD_FLT_MAX), -1, 0, Good);
       
  3964         std_log(LOG_FILENAME_LINE,"Test end");
       
  3965         std_log(LOG_FILENAME_LINE,"Test start");
       
  3966         
       
  3967         TEST (T, -FLT_MAX, _RWSTD_STRSTR (-_RWSTD_FLT_MAX), -1, 0, Good);
       
  3968         std_log(LOG_FILENAME_LINE,"Test end");
       
  3969 
       
  3970 
       
  3971     }
       
  3972 
       
  3973     if (rw_opt_no_uflow) {
       
  3974         rw_note (0, 0, 0, "underflow test disabled");
       
  3975     }
       
  3976     else {
       
  3977         test_flt_uflow (charT (), cname);
       
  3978     }
       
  3979 
       
  3980 #else   // if defined (NO_GET_FLT)
       
  3981 
       
  3982     _RWSTD_UNUSED (t);
       
  3983 
       
  3984 #endif   // NO_GET_FLT
       
  3985 
       
  3986 }
       
  3987 
       
  3988 /**************************************************************************/
       
  3989 
       
  3990 
       
  3991 template <class charT>
       
  3992 void test_dbl_uflow (charT, const char *cname)
       
  3993 {
       
  3994 #ifndef NO_GET_DBL
       
  3995 
       
  3996     rw_info (0, 0, 0, "std::num_get<%s>::get (..., double&) on underflow",
       
  3997              cname);
       
  3998 
       
  3999     // exercise bahvior on underflow
       
  4000     double val = DBL_MIN;
       
  4001     pmax = &val;
       
  4002 
       
  4003     // on underflow, get() follows C99 requirements on strtod()
       
  4004     // i.e., it stores a value in the range [0, +/-DBL_MIN]
       
  4005     // the function does NOT set failbit on underflow (regardless
       
  4006     // of whether strtod() sets errno)
       
  4007     //     If the result underflows (7.12.1), the functions return
       
  4008     //     a value whose magnitude is no greater than the smallest
       
  4009     //     normalized positive number in the return type; whether
       
  4010     //     errno acquires the value ERANGE is implementation-defined.
       
  4011 #ifndef	SAME_AS_UNIX_COMMENT 
       
  4012         std_log(LOG_FILENAME_LINE,"Test start");
       
  4013     TEST (T, (val = DBL_MIN, 0.0),   "1.111111e-9999", 14, 0, Eof);
       
  4014             std_log(LOG_FILENAME_LINE,"Test end");
       
  4015             std_log(LOG_FILENAME_LINE,"Test start");
       
  4016     TEST (T, (val = 0.0, -DBL_MIN), "-1.111111e-9999", 15, 0, Eof);
       
  4017             std_log(LOG_FILENAME_LINE,"Test end");
       
  4018 #endif            
       
  4019             std_log(LOG_FILENAME_LINE,"Test start");
       
  4020     if (1.23456789e-309L < DBL_MIN) {
       
  4021         std_log(LOG_FILENAME_LINE,"Test start");
       
  4022 
       
  4023         TEST (T, (val = DBL_MIN, 0.0),   "1.23456789e-309", 15, 0, Eof);
       
  4024             std_log(LOG_FILENAME_LINE,"Test end");
       
  4025             std_log(LOG_FILENAME_LINE,"Test start");
       
  4026         TEST (T, (val = 0.0, -DBL_MIN), "-1.23456789e-309", 16, 0, Eof);
       
  4027             std_log(LOG_FILENAME_LINE,"Test end");
       
  4028 
       
  4029     }
       
  4030 
       
  4031 #if 0 //build break-floating constant out of range
       
  4032     if (1.234567e-409L < DBL_MIN) {
       
  4033 
       
  4034             std_log(LOG_FILENAME_LINE,"Test start");
       
  4035         TEST (T, (val = DBL_MIN, 0.0),   "1.23456789e-409", 15, 0, Eof);
       
  4036             std_log(LOG_FILENAME_LINE,"Test end");
       
  4037             std_log(LOG_FILENAME_LINE,"Test start");
       
  4038         TEST (T, (val = 0.0, -DBL_MIN), "-1.23456789e-409", 16, 0, Eof);
       
  4039             std_log(LOG_FILENAME_LINE,"Test end");
       
  4040 
       
  4041     }
       
  4042 
       
  4043     if (1.234567e-999L < DBL_MIN) {
       
  4044 
       
  4045             std_log(LOG_FILENAME_LINE,"Test start");
       
  4046         TEST (T, (val = DBL_MIN, 0.0),   "1.23456789e-999", 15, 0, Eof);
       
  4047             std_log(LOG_FILENAME_LINE,"Test end");
       
  4048             std_log(LOG_FILENAME_LINE,"Test start");
       
  4049         TEST (T, (val = 0.0, -DBL_MIN), "-1.23456789e-999", 16, 0, Eof);
       
  4050             std_log(LOG_FILENAME_LINE,"Test end");
       
  4051 
       
  4052     }
       
  4053 #endif
       
  4054     pmax = 0;   // reset before next test
       
  4055 
       
  4056 
       
  4057 #  ifdef _RWSTD_LDBL_MAX
       
  4058     rw_info (0, 0, 0, "get (..., double&) on overflow");
       
  4059 
       
  4060     const double inf = std::numeric_limits<double>::infinity ();
       
  4061 
       
  4062     if (LDBL_MAX_EXP > DBL_MAX_EXP) {
       
  4063         // exercise bahvior on overflow
       
  4064 
       
  4065             std_log(LOG_FILENAME_LINE,"Test start");
       
  4066         TEST (T,  inf, _RWSTD_STRSTR ( _RWSTD_LDBL_MAX), -1, 0, Fail);
       
  4067             std_log(LOG_FILENAME_LINE,"Test end");
       
  4068             std_log(LOG_FILENAME_LINE,"Test start");
       
  4069         TEST (T, -inf, _RWSTD_STRSTR (-_RWSTD_LDBL_MAX), -1, 0, Fail);
       
  4070             std_log(LOG_FILENAME_LINE,"Test end");
       
  4071 
       
  4072     }
       
  4073 
       
  4074             std_log(LOG_FILENAME_LINE,"Test start");
       
  4075 
       
  4076     // long double may have the same range and precision as double
       
  4077     TEST (T,  inf,  "9.999999e+9999", 14, 0, Eof | Fail);
       
  4078             std_log(LOG_FILENAME_LINE,"Test end");
       
  4079             std_log(LOG_FILENAME_LINE,"Test start");
       
  4080     TEST (T, -inf, "-9.999999e+9999", 15, 0, Eof | Fail);
       
  4081             std_log(LOG_FILENAME_LINE,"Test end");
       
  4082 
       
  4083 
       
  4084 #  endif   // _RWSTD_LDBL_MAX
       
  4085 
       
  4086 #else   // if defined (NO_GET_DBL)
       
  4087 
       
  4088     _RWSTD_UNUSED (t);
       
  4089 
       
  4090 #endif   // NO_GET_DBL
       
  4091 
       
  4092 }
       
  4093 
       
  4094 /**************************************************************************/
       
  4095 
       
  4096 template <class charT>
       
  4097 void test_dbl (charT, const char *cname)
       
  4098 {
       
  4099 #ifndef NO_GET_DBL
       
  4100 
       
  4101     // 22.2.3.1, p2 -- floating point grammar:
       
  4102     //
       
  4103     // fltval ::=   [sign] units [decimal-point [digits]] [e [sign] digits]
       
  4104     //            | [sign] decimal-point digits [e [sign] digits]
       
  4105     // sign   ::= '+' | '-'
       
  4106     // units  ::= digits [thousands-sep units]
       
  4107     // digits ::= digit [digits]
       
  4108     // digit  ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
       
  4109     // e      ::= 'e' | 'E'
       
  4110 
       
  4111     const char* const tname = "double";
       
  4112 
       
  4113     rw_info (0, 0, 0, "std::num_get<%s>::get (..., %s&)",
       
  4114              cname, tname);
       
  4115 
       
  4116 #  if !defined (_RWSTD_NO_STRTOD) || !defined (_RWSTD_NO_STRTOD_IN_LIBC)
       
  4117 
       
  4118     const bool test_locale = true;
       
  4119 
       
  4120 #  else
       
  4121 
       
  4122     const bool test_locale = false;
       
  4123 
       
  4124 #  endif   // _RWSTD_NO_STRTOD(_IN_LIBC)
       
  4125 
       
  4126     test_floating_point (charT (), double (), test_locale);
       
  4127 
       
  4128     if (rw_opt_no_uflow) {
       
  4129         rw_note (0, 0, 0, "underflow test disabled");
       
  4130     }
       
  4131     else {
       
  4132         test_dbl_uflow (charT (), cname);
       
  4133     }
       
  4134 
       
  4135 #else   // if defined (NO_GET_DBL)
       
  4136 
       
  4137     _RWSTD_UNUSED (t);
       
  4138 
       
  4139 #endif   // NO_GET_DBL
       
  4140 
       
  4141 }
       
  4142 
       
  4143 /**************************************************************************/
       
  4144 
       
  4145 
       
  4146 template <class charT>
       
  4147 void test_ldbl_uflow (charT, const char *cname)
       
  4148 {
       
  4149 #ifndef NO_GET_LDBL
       
  4150 
       
  4151     rw_info (0, 0, 0,
       
  4152              "std::num_get<%s>::get (..., long double&) on underflow", cname);
       
  4153 
       
  4154     // exercise bahvior on underflow
       
  4155     long double val = LDBL_MIN;
       
  4156     pmax = &val;
       
  4157 
       
  4158     // on underflow, get() follows C99 requirements on strtold()
       
  4159     // i.e., it stores a value in the range [0, +/-LDBL__MIN]
       
  4160     // the function does NOT set failbit on underflow (regardless
       
  4161     // of whether strtold() sets errno)
       
  4162     //     If the result underflows (7.12.1), the functions return
       
  4163     //     a value whose magnitude is no greater than the smallest
       
  4164     //     normalized positive number in the return type; whether
       
  4165     //     errno acquires the value ERANGE is implementation-defined.
       
  4166 
       
  4167             std_log(LOG_FILENAME_LINE,"Test start");
       
  4168 
       
  4169     TEST (T, (val = LDBL_MIN, 0.0L),   "1.987654321e-99999", 18, 0, Eof);
       
  4170             std_log(LOG_FILENAME_LINE,"Test end");
       
  4171             std_log(LOG_FILENAME_LINE,"Test start");
       
  4172     TEST (T, (val = 0.0L, -LDBL_MIN), "-1.987654321e-99999", 19, 0, Eof);
       
  4173             std_log(LOG_FILENAME_LINE,"Test end");
       
  4174 
       
  4175 
       
  4176     const char fmt[] = "%Lg";
       
  4177 
       
  4178     long double ld = 0.0;
       
  4179     #ifdef __SYMBIAN32__
       
  4180      if (1 == sscanf ("3.456789e-4932", fmt, &ld) && ld < LDBL_MIN) {
       
  4181 
       
  4182             std_log(LOG_FILENAME_LINE,"Test start");
       
  4183         TEST (T, (val = LDBL_MIN, 0.0L),   "3.456789e-4932", 14, 0, Eof);
       
  4184             std_log(LOG_FILENAME_LINE,"Test end");
       
  4185             std_log(LOG_FILENAME_LINE,"Test start");
       
  4186         TEST (T, (val = 0.0L, -LDBL_MIN), "-3.456789e-4932", 15, 0, Eof);
       
  4187             std_log(LOG_FILENAME_LINE,"Test end");
       
  4188 
       
  4189     }
       
  4190 
       
  4191     if (1 == sscanf ("3.456789e-9999", fmt, &ld) && ld < LDBL_MIN) {
       
  4192 
       
  4193             std_log(LOG_FILENAME_LINE,"Test start");
       
  4194         TEST (T, (val = LDBL_MIN, 0.0L),   "3.456789e-9999", 14, 0, Eof);
       
  4195             std_log(LOG_FILENAME_LINE,"Test end");
       
  4196             std_log(LOG_FILENAME_LINE,"Test start");
       
  4197         TEST (T, (val = 0.0L, -LDBL_MIN), "-3.456789e-9999", 15, 0, Eof);
       
  4198             std_log(LOG_FILENAME_LINE,"Test end");
       
  4199 
       
  4200     }
       
  4201     #else
       
  4202     if (1 == std::sscanf ("3.456789e-4932", fmt, &ld) && ld < LDBL_MIN) {
       
  4203 
       
  4204             std_log(LOG_FILENAME_LINE,"Test start");
       
  4205         TEST (T, (val = LDBL_MIN, 0.0L),   "3.456789e-4932", 14, 0, Eof);
       
  4206             std_log(LOG_FILENAME_LINE,"Test end");
       
  4207             std_log(LOG_FILENAME_LINE,"Test start");
       
  4208         TEST (T, (val = 0.0L, -LDBL_MIN), "-3.456789e-4932", 15, 0, Eof);
       
  4209             std_log(LOG_FILENAME_LINE,"Test end");
       
  4210 
       
  4211     }
       
  4212 
       
  4213     if (1 == std::sscanf ("3.456789e-9999", fmt, &ld) && ld < LDBL_MIN) {
       
  4214 
       
  4215             std_log(LOG_FILENAME_LINE,"Test start");
       
  4216         TEST (T, (val = LDBL_MIN, 0.0L),   "3.456789e-9999", 14, 0, Eof);
       
  4217             std_log(LOG_FILENAME_LINE,"Test end");
       
  4218             std_log(LOG_FILENAME_LINE,"Test start");
       
  4219         TEST (T, (val = 0.0L, -LDBL_MIN), "-3.456789e-9999", 15, 0, Eof);
       
  4220             std_log(LOG_FILENAME_LINE,"Test end");
       
  4221 
       
  4222     }
       
  4223    #endif //__SYMBIAN32__
       
  4224     pmax = 0;   // reset before next test
       
  4225 
       
  4226 
       
  4227 #  ifdef _RWSTD_LDBL_MAX
       
  4228 
       
  4229     rw_info (0, 0, 0, "get (..., long double&) on overflow");
       
  4230 
       
  4231     const double inf = std::numeric_limits<long double>::infinity ();
       
  4232 
       
  4233             std_log(LOG_FILENAME_LINE,"Test start");
       
  4234 
       
  4235     TEST (T,  inf,  "9.999999e+9876543210", 20, 0, Eof | Fail);
       
  4236             std_log(LOG_FILENAME_LINE,"Test end");
       
  4237             std_log(LOG_FILENAME_LINE,"Test start");
       
  4238     TEST (T, -inf, "-9.999999e+9876543210", 21, 0, Eof | Fail);
       
  4239             std_log(LOG_FILENAME_LINE,"Test end");
       
  4240 
       
  4241 
       
  4242 #  endif   // _RWSTD_LDBL_MAX
       
  4243 
       
  4244 #else   // if defined (NO_GET_LDBL)
       
  4245 
       
  4246     _RWSTD_UNUSED (t);
       
  4247 
       
  4248 #endif   // NO_GET_LDBL
       
  4249 
       
  4250 }
       
  4251 
       
  4252 /**************************************************************************/
       
  4253 
       
  4254 template <class charT>
       
  4255 void test_ldbl (charT, const char *cname)
       
  4256 {
       
  4257 #ifndef NO_GET_LDBL
       
  4258 
       
  4259 #  ifndef _RWSTD_NO_LONG_DOUBLE
       
  4260 
       
  4261     const char* const tname = "long double";
       
  4262 
       
  4263     rw_info (0, 0, 0, "std::num_get<%s>::get (..., %s&)",
       
  4264              cname, tname);
       
  4265 
       
  4266 #    if !defined (_RWSTD_NO_STRTOLD) || !defined (_RWSTD_NO_STRTOLD_IN_LIBC)
       
  4267 
       
  4268     const bool test_locale = true;
       
  4269 
       
  4270 #    else
       
  4271 
       
  4272     const bool test_locale = false;
       
  4273 
       
  4274 #    endif   // _RWSTD_NO_STRTOLD(_IN_LIBC)
       
  4275 
       
  4276     test_floating_point (charT (), (long double)0, test_locale);
       
  4277 
       
  4278     long double long_val;
       
  4279 
       
  4280     char long_str [_RWSTD_LDBL_MAX_10_EXP + 2];
       
  4281     
       
  4282     #ifdef __SYMBIAN32__
       
  4283      memset (long_str, '0', sizeof long_str);
       
  4284     #else 
       
  4285     std::memset (long_str, '0', sizeof long_str);
       
  4286     #endif
       
  4287     long_str [sizeof long_str - 1] = '\0';
       
  4288 
       
  4289     // parse a string of LDBL_MAX_10_EXP + 1 zeros
       
  4290 
       
  4291             std_log(LOG_FILENAME_LINE,"Test start");
       
  4292     TEST (T, 0.0L, long_str, sizeof long_str - 1, 0, Eof);
       
  4293             std_log(LOG_FILENAME_LINE,"Test end");
       
  4294 
       
  4295 
       
  4296     const char *start;
       
  4297 
       
  4298 #    if _RWSTD_LDBL_MAX_10_EXP >= 38
       
  4299 
       
  4300     // parse "10...<repeats 37 times>" (i.e., 1 followed by 38 zeros)
       
  4301     start = &(long_str [sizeof long_str - 40] = '1');
       
  4302 
       
  4303             std_log(LOG_FILENAME_LINE,"Test start");
       
  4304     TEST (T, 1.0e+38L, start, 39, 0, Eof);
       
  4305             std_log(LOG_FILENAME_LINE,"Test end");
       
  4306             std_log(LOG_FILENAME_LINE,"Test start");
       
  4307 
       
  4308     // parse the same as above but preceded by a bunch of zeros
       
  4309     TEST (T, 1.0e+38L, long_str, sizeof long_str - 1, 0, Eof);
       
  4310                 std_log(LOG_FILENAME_LINE,"Test end");
       
  4311 
       
  4312 
       
  4313     long_str [sizeof long_str - 40] = '0';
       
  4314 
       
  4315 #    endif   // _RWSTD_LDBL_MAX_10_EXP > 129
       
  4316 
       
  4317 
       
  4318 #    if _RWSTD_LDBL_MAX_10_EXP >= 128
       
  4319 
       
  4320     // parse "10...<repeats 127 times>" (i.e., 1 followed by 128 zeros)
       
  4321     start = &(long_str [sizeof long_str - 130] = '1');
       
  4322             std_log(LOG_FILENAME_LINE,"Test start");
       
  4323             TEST (T, 1.0e+128L, start, 129, 0, Eof);
       
  4324             std_log(LOG_FILENAME_LINE,"Test end");
       
  4325             std_log(LOG_FILENAME_LINE,"Test start");
       
  4326 
       
  4327     // parse the same as above but preceded by a bunch of zeros
       
  4328     TEST (T, 1.0e+128L, long_str, sizeof long_str - 1, 0, Eof);
       
  4329             std_log(LOG_FILENAME_LINE,"Test end");
       
  4330             
       
  4331     long_str [sizeof long_str - 130] = '0';
       
  4332 
       
  4333 #    endif   // _RWSTD_LDBL_MAX_10_EXP > 129
       
  4334 
       
  4335 #    if _RWSTD_LDBL_MAX_10_EXP >= 308
       
  4336 
       
  4337     // parse "10...<repeats 307 times>" (i.e., 1 followed by 308 zeros)
       
  4338     start = &(long_str [sizeof long_str - 310] = '1');
       
  4339     std_log(LOG_FILENAME_LINE,"Test start");
       
  4340     TEST (T, 1.0e+308L, start, 309, 0, Eof);
       
  4341 std_log(LOG_FILENAME_LINE,"Test end");
       
  4342 std_log(LOG_FILENAME_LINE,"Test start");
       
  4343     // parse the same as above but preceded by a bunch of zeros
       
  4344     TEST (T, 1.0e+308L, long_str, sizeof long_str - 1, 0, Eof);
       
  4345 std_log(LOG_FILENAME_LINE,"Test end");
       
  4346 
       
  4347     long_str [sizeof long_str - 310] = '0';
       
  4348 
       
  4349 #    endif   // _RWSTD_LDBL_MAX_10_EXP > 308
       
  4350 
       
  4351 #    undef CAT
       
  4352 #    undef CONCAT
       
  4353 
       
  4354 #    define CAT(a, b)      CONCAT (a, b)
       
  4355 #    define CONCAT(a, b)   a ## b
       
  4356 
       
  4357     // parse "10..." (i.e., 1 followed by LDBL_MAX_10_EXP zeros)
       
  4358     long_str [0] = '1';
       
  4359     long_val     = CAT (CAT (1.0e+, _RWSTD_LDBL_MAX_10_EXP), L);
       
  4360 std_log(LOG_FILENAME_LINE,"Test start");
       
  4361     TEST (T, long_val, long_str, sizeof long_str - 1, 0, Eof);
       
  4362 std_log(LOG_FILENAME_LINE,"Test end");
       
  4363 #  endif   // _RWSTD_NO_LONG_DOUBLE
       
  4364 
       
  4365     if (rw_opt_no_uflow) {
       
  4366         rw_note (0, 0, 0, "underflow test disabled");
       
  4367     }
       
  4368     else {
       
  4369         test_ldbl_uflow (charT (), cname);
       
  4370     }
       
  4371 
       
  4372 #else   // if defined (NO_GET_LDBL)
       
  4373 
       
  4374     _RWSTD_UNUSED (t);
       
  4375 
       
  4376 #endif   // NO_GET_LDBL
       
  4377 
       
  4378 }
       
  4379 
       
  4380 /**************************************************************************/
       
  4381 
       
  4382 template <class charT>
       
  4383 void run_tests (charT, const char *cname)
       
  4384 {
       
  4385 #undef TEST
       
  4386 #define TEST(T, tname)                                          \
       
  4387     if (rw_enabled (tname))                                     \
       
  4388         test_ ## T (charT (), cname);                           \
       
  4389     else                                                        \
       
  4390         rw_note (0, __FILE__, __LINE__, "%s test disabled", tname)
       
  4391 
       
  4392 #ifndef _RWSTD_NO_BOOL
       
  4393     std_log(LOG_FILENAME_LINE,"Test start");
       
  4394     
       
  4395     TEST (bool, "bool");
       
  4396 std_log(LOG_FILENAME_LINE,"Test end");
       
  4397 
       
  4398 #endif   // _RWSTD_NO_BOOL
       
  4399 
       
  4400    //#ifndef __SYMBIAN32__  // Bug -> 481
       
  4401     std_log(LOG_FILENAME_LINE,"Test start");
       
  4402     TEST (shrt, "short");
       
  4403     std_log(LOG_FILENAME_LINE,"Test end");
       
  4404     std_log(LOG_FILENAME_LINE,"Test start");
       
  4405     TEST (int, "int");
       
  4406     std_log(LOG_FILENAME_LINE,"Test end");
       
  4407     std_log(LOG_FILENAME_LINE,"Test start");
       
  4408   //#endif 
       
  4409     TEST (long, "long");
       
  4410     std_log(LOG_FILENAME_LINE,"Test end");
       
  4411     std_log(LOG_FILENAME_LINE,"Test start");
       
  4412     TEST (ulong, "unsigned long");
       
  4413     std_log(LOG_FILENAME_LINE,"Test end");
       
  4414 
       
  4415 #if 0//FIX //no long long
       
  4416 #ifndef _RWSTD_NO_LONG_LONG
       
  4417 
       
  4418     std_log(LOG_FILENAME_LINE,"Test start");
       
  4419 
       
  4420     TEST (llong, "long long");
       
  4421     std_log(LOG_FILENAME_LINE,"Test end");
       
  4422     std_log(LOG_FILENAME_LINE,"Test start");
       
  4423     TEST (ullong, "unsigned long long");
       
  4424     std_log(LOG_FILENAME_LINE,"Test end");
       
  4425 
       
  4426 #endif //#if 0
       
  4427 #endif   // _RWSTD_NO_LONG_LONG
       
  4428 
       
  4429     std_log(LOG_FILENAME_LINE,"Test start");
       
  4430 
       
  4431     TEST (pvoid, "void*");
       
  4432     std_log(LOG_FILENAME_LINE,"Test end");
       
  4433     std_log(LOG_FILENAME_LINE,"Test start");
       
  4434 
       
  4435     TEST (flt, "float");
       
  4436     std_log(LOG_FILENAME_LINE,"Test end");
       
  4437     std_log(LOG_FILENAME_LINE,"Test start");
       
  4438     TEST (dbl, "double");
       
  4439     std_log(LOG_FILENAME_LINE,"Test end");
       
  4440     std_log(LOG_FILENAME_LINE,"Test start");
       
  4441 #if 0//FIX //no long double    
       
  4442     TEST (ldbl, "long double");
       
  4443     std_log(LOG_FILENAME_LINE,"Test end");
       
  4444 
       
  4445 #endif //#if 0
       
  4446 }
       
  4447 
       
  4448 /**************************************************************************/
       
  4449 
       
  4450 static int
       
  4451 run_test (int, char*[])
       
  4452 {
       
  4453     if (rw_enabled ("char"))
       
  4454         run_tests (char (), "char");
       
  4455     else
       
  4456         rw_note (0, __FILE__, __LINE__, "char test disabled");
       
  4457 
       
  4458 #ifndef _RWSTD_NO_WCHAR_T
       
  4459 
       
  4460     if (rw_enabled ("wchar_t"))
       
  4461         run_tests (wchar_t (), "wchar_t");
       
  4462     else
       
  4463         rw_note (0, __FILE__, __LINE__, "wchar_t test disabled");
       
  4464 
       
  4465 #else   // if defined (_RWSTD_NO_WCHAR_T)
       
  4466 
       
  4467     rw_note (0, __FILE__, __LINE__,
       
  4468              "wchar_t test disabled: _RWSTD_NO_WCHAR_T #defined");
       
  4469 
       
  4470 #endif   // _RWSTD_NO_WCHAR_T
       
  4471 
       
  4472     return 0;
       
  4473 }
       
  4474 
       
  4475 /**************************************************************************/
       
  4476 //#endif // #if 0
       
  4477 int main (int argc, char *argv[])
       
  4478 {
       
  4479  #ifndef __SYMBIAN32__
       
  4480     return rw_test (argc, argv, __FILE__,"lib.locale.num.get",0 , run_test,"|-no-errno# ""|-no-grouping# ""|-no-widen# ""|-no-underflow#",&rw_opt_no_errno,&rw_opt_no_grouping,&rw_opt_no_widen,&rw_opt_no_uflow);
       
  4481  #else
       
  4482  rw_test (argc, argv, __FILE__,"lib.locale.num.get",0 , run_test,"|-no-errno# ""|-no-grouping# ""|-no-widen# ""|-no-underflow#",&rw_opt_no_errno,&rw_opt_no_grouping,&rw_opt_no_widen,&rw_opt_no_uflow);
       
  4483       if(failures)
       
  4484       {
       
  4485             assert_failed = true;
       
  4486        std_log(LOG_FILENAME_LINE,"Result: Failed");
       
  4487       }
       
  4488      else
       
  4489       {
       
  4490 
       
  4491        std_log(LOG_FILENAME_LINE,"Result: Passed");
       
  4492       }
       
  4493   
       
  4494    std_log(LOG_FILENAME_LINE,"[End Test Case]");  
       
  4495    
       
  4496    testResultXml("22_locale_num_get");
       
  4497     close_log_file();
       
  4498  
       
  4499  return 0;
       
  4500  #endif //__SYMBIAN32__
       
  4501 }
       
  4502