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