stdcpp/tsrc/Stdcpp_test/stdcxx/tstapps/localization/src/22.locale.money.put.cpp
changeset 31 ce057bb09d0b
child 45 4b03adbd26ca
equal deleted inserted replaced
30:e20de85af2ee 31:ce057bb09d0b
       
     1 
       
     2 
       
     3 /***************************************************************************
       
     4  *
       
     5  * locale.money.put.cpp - tests exercising the std::money_put facet
       
     6  *
       
     7  * $Id: 22.locale.money.put.cpp 279137 2005-09-06 21:53:26Z 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 <ios>
       
    25 #include <locale>
       
    26 #include <cstdio>     // for sprintf()
       
    27 #include <string>
       
    28 
       
    29 #include <cmdopt.h>   // for rw_enabled()
       
    30 #include <driver.h>   // for rw_test()
       
    31 #include <valcmp.h>   // for rw_valcmp()
       
    32 #include"std_log_result.h"
       
    33 #define LOG_FILENAME_LINE __FILE__, __LINE__
       
    34 int failures=0;
       
    35 
       
    36 /**************************************************************************/
       
    37 
       
    38 // set to non-zero value when grouping shouldn't be exercised
       
    39 static int no_grouping;
       
    40 
       
    41 // set to non-zero value when the basic_string overloads
       
    42 // of moneY-put::put() shouldn't be exercised
       
    43 static int no_basic_string;
       
    44 
       
    45 /**************************************************************************/
       
    46 using namespace std;
       
    47 void char2wchar(char* pstr, wchar_t* pwstr, int size)
       
    48 {
       
    49 	//assume little endian
       
    50 	if ( (!pstr) || (!pwstr) | (strlen(pstr)+1>= size) )
       
    51 		return;
       
    52 	int i = 0,j =0;
       
    53 	int len = strlen(pstr);
       
    54 	for(;i<=len;i++,j++)
       
    55 	{
       
    56 		pwstr[j] = pstr[i];
       
    57 	}
       
    58 
       
    59 }
       
    60 
       
    61 void Helper_(void* array, int size,double val)
       
    62 {
       
    63 	
       
    64 	if (size == 1)
       
    65     {
       
    66     	sprintf((char*)array,"%f",val);    	
       
    67 
       
    68     }
       
    69     else
       
    70     {
       
    71     	char str[100] = 
       
    72     	{
       
    73     		0
       
    74     	};
       
    75     	
       
    76     	sprintf((char*)str,"%f",val);
       
    77     	char2wchar(str,(wchar_t*)array,100);
       
    78     }
       
    79 }
       
    80 
       
    81 template<class chtype>
       
    82 basic_string<chtype>* GetLDasStr(double val)
       
    83 {
       
    84 	
       
    85     //convert val from long double to string or wstring based on instantiation
       
    86     
       
    87 	chtype	str[100] = {0};	
       
    88 	Helper_((void*)str,sizeof(chtype),val);
       
    89 	basic_string<chtype> *strLD = new basic_string<chtype>(str);
       
    90 	return strLD;
       
    91 }
       
    92 
       
    93 template <class charT, bool Intl>
       
    94 struct Punct: std::moneypunct<charT, Intl>
       
    95 {
       
    96     typedef typename std::moneypunct<charT>::char_type   char_type;
       
    97     typedef typename std::moneypunct<charT>::string_type string_type;
       
    98 
       
    99     static char_type                 decimal_point_;
       
   100     static char_type                 thousands_sep_;
       
   101     static const char               *grouping_;
       
   102     static const char_type          *curr_symbol_;
       
   103     static const char_type          *positive_sign_;
       
   104     static const char_type          *negative_sign_;
       
   105     static std::money_base::pattern  pos_format_;
       
   106     static std::money_base::pattern  neg_format_;
       
   107     static int                       frac_digits_;
       
   108 
       
   109     static int n_thousands_sep_;   // number of calls to do_thousands_sep()
       
   110 
       
   111     Punct (): std::moneypunct<charT>(1) { }
       
   112 
       
   113     char_type do_decimal_point () const {
       
   114         return decimal_point_;
       
   115     }
       
   116 
       
   117     int do_frac_digits () const {
       
   118         return frac_digits_;
       
   119     }
       
   120 
       
   121     virtual string_type do_curr_symbol () const {
       
   122         return curr_symbol_ ? curr_symbol_ : string_type ();
       
   123     }
       
   124 
       
   125     virtual std::string do_grouping () const {
       
   126         return grouping_;
       
   127     }
       
   128 
       
   129     virtual char_type do_thousands_sep () const {
       
   130         ++n_thousands_sep_;
       
   131         return thousands_sep_;
       
   132     }
       
   133 
       
   134     virtual string_type do_positive_sign () const {
       
   135         return positive_sign_ ? positive_sign_ : string_type ();
       
   136     }
       
   137 
       
   138     virtual string_type do_negative_sign () const {
       
   139         return negative_sign_ ? negative_sign_ : string_type ();
       
   140     }
       
   141 
       
   142     virtual std::money_base::pattern do_pos_format () const {
       
   143         return pos_format_;
       
   144     }
       
   145 
       
   146     virtual std::money_base::pattern do_neg_format () const {
       
   147         return neg_format_;
       
   148     }
       
   149 };
       
   150 
       
   151 template <class charT, bool Intl>
       
   152 const char*
       
   153 Punct<charT, Intl>::grouping_ = "";
       
   154 
       
   155 template <class charT, bool Intl>
       
   156 typename Punct<charT, Intl>::char_type
       
   157 Punct<charT, Intl>::decimal_point_ = ':';
       
   158 
       
   159 template <class charT, bool Intl>
       
   160 typename Punct<charT, Intl>::char_type
       
   161 Punct<charT, Intl>::thousands_sep_ = ';';
       
   162 
       
   163 template <class charT, bool Intl>
       
   164 const typename Punct<charT, Intl>::char_type*
       
   165 Punct<charT, Intl>::curr_symbol_;
       
   166 
       
   167 template <class charT, bool Intl>
       
   168 const typename Punct<charT, Intl>::char_type*
       
   169 Punct<charT, Intl>::positive_sign_;
       
   170 
       
   171 template <class charT, bool Intl>
       
   172 const typename Punct<charT, Intl>::char_type*
       
   173 Punct<charT, Intl>::negative_sign_;
       
   174 
       
   175 template <class charT, bool Intl>
       
   176 std::money_base::pattern
       
   177 Punct<charT, Intl>::pos_format_ = { {
       
   178     std::money_base::symbol,
       
   179     std::money_base::sign,
       
   180     std::money_base::none,
       
   181     std::money_base::value
       
   182 } };
       
   183 
       
   184 template <class charT, bool Intl>
       
   185 std::money_base::pattern
       
   186 Punct<charT, Intl>::neg_format_ = { {
       
   187     std::money_base::symbol,
       
   188     std::money_base::sign,
       
   189     std::money_base::none,
       
   190     std::money_base::value
       
   191 } };
       
   192 
       
   193 template <class charT, bool Intl>
       
   194 int
       
   195 Punct<charT, Intl>::n_thousands_sep_;
       
   196 
       
   197 template <class charT, bool Intl>
       
   198 int
       
   199 Punct<charT, Intl>::frac_digits_;
       
   200 
       
   201 /**************************************************************************/
       
   202 
       
   203 template <class charT>
       
   204 struct Ios: std::basic_ios<charT>
       
   205 {
       
   206     Ios () { this->init (0); }
       
   207 };
       
   208 
       
   209 template <class charT>
       
   210 struct MoneyPut: std::money_put<charT, charT*> { };
       
   211 
       
   212 /**************************************************************************/
       
   213 
       
   214 bool test_neg_zero;
       
   215 
       
   216 /**************************************************************************/
       
   217 
       
   218 std::money_base::pattern
       
   219 set_pattern (const char *format)
       
   220 {
       
   221     std::money_base::pattern pat;
       
   222 
       
   223     for (unsigned i = 0; i != sizeof pat.field / sizeof *pat.field; ++i) {
       
   224         switch (format [i]) {
       
   225         case '\0': case '@': pat.field [i] = std::money_base::none; break;
       
   226         case '\1': case ' ': pat.field [i] = std::money_base::space; break;
       
   227         case '\2': case '$': pat.field [i] = std::money_base::symbol; break;
       
   228         case '\3': case '-': pat.field [i] = std::money_base::sign; break;
       
   229         case '\4': case '1': pat.field [i] = std::money_base::value; break;
       
   230         default:
       
   231             rw_error (0, __FILE__, __LINE__,
       
   232                       "test error: bad format specifier: '%c'", format [i]);
       
   233         }
       
   234     }
       
   235 
       
   236     return pat;
       
   237 }
       
   238 
       
   239 
       
   240 template <class charT>
       
   241 int type_test (int         lineno,
       
   242                charT       /* unused */,
       
   243 #ifdef	__SYMBIAN32__
       
   244 				double val,
       
   245 #else
       
   246                long double val /* value to format */,
       
   247 #endif               
       
   248                const char *str /* expected result */,
       
   249                char        fill        = ' ',
       
   250                int         flags       = 0,
       
   251                int         frac_digits = 0,
       
   252                int         width       = 0,
       
   253                const char *format      = 0 /* pattern or printf() format */,
       
   254                const char *grouping    = 0)
       
   255 {
       
   256     if (!rw_enabled (lineno)) {
       
   257            failures++;
       
   258 	       	    rw_note (0, __FILE__, __LINE__, "test on line %d disabled", lineno);
       
   259 	std_log(LOG_FILENAME_LINE,"test on line %d disabled", lineno);
       
   260         return 0;
       
   261     }
       
   262 
       
   263     static const char* const cname = 1 < sizeof (charT) ? "wchar_t" : "char";
       
   264 
       
   265     static int i = 0;   // assertion number per specialization of type_test()
       
   266 
       
   267     if (!i) {
       
   268         rw_info (0, 0, 0, "std::money_put<%s>::put(ostreambuf_iterator"
       
   269                  "<%s>, bool, ios_base, %s, long double)",
       
   270                  cname, cname, cname);
       
   271 
       
   272         rw_info (0, 0, 0, "std::money_put<%s>::put(ostreambuf_iterator"
       
   273                  "<%s>, bool, ios_base, %s, "
       
   274                  "const basic_string<%s>&))",
       
   275                  cname, cname, cname, cname);
       
   276     }
       
   277 
       
   278     //////////////////////////////////////////////////////////////////
       
   279     // exercise put (..., long double) overload
       
   280 
       
   281     int nfail = 0;   // number of failed assertions
       
   282 
       
   283     // unless 0, or unless it starts with '%', the `format' argument
       
   284     // is treated as a money_base::pattern string; otherwise the
       
   285     // default pattern is used
       
   286 
       
   287     // default format as in locale ("C")
       
   288     const char *fmt_pat = !format || *format == '%' ? "\2\3\4\0" : format;
       
   289 
       
   290     if (!grouping) {
       
   291         // default grouping as in locale ("C")
       
   292         grouping = "";
       
   293     }
       
   294 
       
   295     const Punct<charT, false> pun;
       
   296 
       
   297     // take care to initialize Punct static data before installing
       
   298     // the facet in case locale or the base facet calls the overridden
       
   299     // virtuals early to cache the results
       
   300     pun.grouping_    = grouping;
       
   301     pun.frac_digits_ = frac_digits;
       
   302 
       
   303     if (val < 0.0) {
       
   304         pun.neg_format_ = set_pattern (fmt_pat);
       
   305         pun.pos_format_ = std::money_base::pattern ();
       
   306     }
       
   307     else if (val > 0.0) {
       
   308         pun.neg_format_ = std::money_base::pattern ();
       
   309         pun.pos_format_ = set_pattern (fmt_pat);
       
   310     }
       
   311     else {
       
   312         // 0.0 and -0.0
       
   313         pun.neg_format_ = set_pattern (fmt_pat);
       
   314         pun.pos_format_ = pun.neg_format_;
       
   315     }
       
   316 
       
   317     // ios-derived object to pass to the facet
       
   318     Ios<charT> ios;
       
   319 
       
   320     // money_put-derived object
       
   321     #ifdef __ARMCC__
       
   322     #pragma diag_suppress 811
       
   323     #endif
       
   324     const MoneyPut<charT> mp;
       
   325     
       
   326 
       
   327     // install the moneypunct facet in a locale and imbue the latter
       
   328     // in the ios-derived object used by money_put
       
   329     std::locale loc (ios.getloc (), (const std::moneypunct<charT>*)&pun);
       
   330     ios.imbue (loc);
       
   331 
       
   332     // set the formatting flags and the width
       
   333     ios.flags (std::ios_base::fmtflags (flags));
       
   334     ios.width (std::streamsize (width));
       
   335 
       
   336     bool success;
       
   337 
       
   338     charT buf [256] = { 0 };
       
   339 
       
   340     if (rw_enabled ("long double")) {
       
   341 
       
   342 #ifdef __SYMBIAN32__
       
   343 	    basic_string<charT> *strLD = GetLDasStr<charT>(val);
       
   344     *mp.put (buf, false, ios, charT (fill), *strLD) = charT ();
       
   345 	delete strLD;
       
   346 #else
       
   347         // exercise 22.2.6.2.1, long double overload
       
   348      *mp.put (buf, false, ios, charT (fill), val) = charT ();
       
   349       rw_assert (0 == ios.width (), __FILE__, lineno,
       
   350                    "money_put<%s>::put (%#p, false, const ios_base&, "
       
   351                    "%{#c}, %LfL) reset width from %d",
       
   352                    cname, buf, fill, val, width);
       
   353 
       
   354 #endif
       
   355           if(0 != ios.width ())
       
   356 	  {
       
   357 	   failures++;
       
   358 	   std_log(LOG_FILENAME_LINE,"Failing");
       
   359 	  }
       
   360    
       
   361         success = 0 == rw_strncmp (buf, str);
       
   362 
       
   363 //#ifndef __SYMBIAN32__
       
   364      	if (!success)
       
   365             ++nfail;
       
   366 
       
   367         rw_assert (success, __FILE__, lineno,
       
   368                    "money_put<%s>::put (%#p, false, "
       
   369                    "const ios_base&, %{#c}, %LfL) == %{#s} got %{#s}; "
       
   370                    "flags = %{If}, grouping = %{#s}",
       
   371                    cname, buf,
       
   372                    fill, val, str, buf,
       
   373                    flags, grouping);
       
   374 //#else
       
   375 	if(!success)
       
   376 	{
       
   377 	  failures++;
       
   378 	  std_log(LOG_FILENAME_LINE,"Failing");
       
   379 	}
       
   380 //#endif 
       
   381     }
       
   382     else {
       
   383         static int msg_issued;
       
   384 
       
   385         rw_note (msg_issued++, __FILE__, 0, "long double test disabled");
       
   386     }
       
   387 
       
   388     //////////////////////////////////////////////////////////////////
       
   389     // exercise put (..., const basic_string&) overload
       
   390 
       
   391     if (frac_digits < 0) {
       
   392         // do not perform string test(s) for negative values of frac_digits
       
   393         // (extension implemented only for the long double overload of put())
       
   394         ++i;
       
   395         return nfail;
       
   396     }
       
   397 
       
   398     if (no_basic_string) {
       
   399         rw_note (0, __FILE__, __LINE__,
       
   400                  "basic_string<%s> test on line %d disabled", lineno, cname);
       
   401         return nfail;
       
   402     }
       
   403 
       
   404     // zero out buffer
       
   405     std::char_traits<charT>::assign (buf, sizeof buf / sizeof *buf, charT ());
       
   406 
       
   407     // if the format string starts with a '%',
       
   408     // use it to format the floating point value
       
   409     if (!format || *format != '%')
       
   410         format = "%.0" _RWSTD_LDBL_PRINTF_PREFIX "f";
       
   411 
       
   412     char valbuf [256] = "";
       
   413     const std::size_t valbuflen = sprintf (valbuf, format, val);
       
   414 
       
   415     typedef std::char_traits<charT> Traits;
       
   416     typedef std::allocator<charT>   Allocator;
       
   417 
       
   418     const std::basic_string<charT, Traits, Allocator>
       
   419         valstr (valbuf, valbuf + valbuflen);
       
   420 
       
   421     // set width (reset by a previous call)
       
   422     ios.width (std::streamsize (width));
       
   423 
       
   424     // exercise 22.2.6.2.1, basic_string overload
       
   425     *mp.put (buf, false, ios, charT (fill), valstr) = charT ();
       
   426     
       
   427     success = 0 == rw_strncmp (buf, str);
       
   428   
       
   429 
       
   430     if (!success)
       
   431         ++nfail;
       
   432 #ifndef __SYMBIAN32__
       
   433     rw_assert (success, __FILE__, lineno,
       
   434                "money_put<%s>::put (%#p, false, "
       
   435                "const ios_base&, %{#S}) == %{#s} got %{#s}; "
       
   436                "flags = %{If}, grouping = %{#s}",
       
   437                cname, fill, &valstr, buf, str,
       
   438                flags, grouping);
       
   439 #else
       
   440    if(!success)    
       
   441    {
       
   442     failures++;
       
   443     std_log(LOG_FILENAME_LINE,"Failing");
       
   444    }
       
   445 #endif   
       
   446     ++i;
       
   447 
       
   448     return nfail;
       
   449 }
       
   450 
       
   451 /**************************************************************************/
       
   452 
       
   453 // for convenience
       
   454 #define Boolalpha   std::ios_base::boolalpha
       
   455 #define Dec         std::ios_base::dec
       
   456 #define Fixed       std::ios_base::fixed
       
   457 #define Hex         std::ios_base::hex
       
   458 #define Internal    std::ios_base::internal
       
   459 #define Left        std::ios_base::left
       
   460 #define Oct         std::ios_base::oct
       
   461 #define Right       std::ios_base::right
       
   462 #define Scientific  std::ios_base::scientific
       
   463 #define Showbase    std::ios_base::showbase
       
   464 #define Showpoint   std::ios_base::showpoint
       
   465 #define Showpos     std::ios_base::showpos
       
   466 #define Skipws      std::ios_base::skipws
       
   467 #define Unitbuf     std::ios_base::unitbuf
       
   468 #define Uppercase   std::ios_base::uppercase
       
   469 #define Bin         std::ios_base::bin
       
   470 #define Adjustfield std::ios_base::adjustfield
       
   471 #define Basefield   std::ios_base::basefield
       
   472 #define Floatfield  std::ios_base::floatfield
       
   473 #define Nolock      std::ios_base::nolock
       
   474 #define Nolockbuf   std::ios_base::nolockbuf
       
   475 
       
   476 #define Eofbit      std::ios_base::eofbit
       
   477 #define Failbit     std::ios_base::failbit
       
   478 #define Goodbit     std::ios_base::goodbit
       
   479 
       
   480 //#ifndef __SYMBIAN32__  // Error
       
   481 template <class charT>
       
   482 void ldbl_test (charT)
       
   483 {
       
   484     static const charT curr_symbol1 [8] = { '$', '\0' };
       
   485     Punct<charT, false>::curr_symbol_   = curr_symbol1;
       
   486 
       
   487     Punct<charT, false>::decimal_point_ = ':';
       
   488     Punct<charT, false>::thousands_sep_ = ';';
       
   489 
       
   490     static const charT signs1[][4] = {
       
   491         // negative            positive
       
   492         { '~', '\0' }, { '\0', },
       
   493     };
       
   494 
       
   495     Punct<charT, false>::negative_sign_ = signs1 [0];
       
   496     Punct<charT, false>::positive_sign_ = signs1 [1];
       
   497 
       
   498     int ntried  = 0;
       
   499     int nfailed = 0;
       
   500 
       
   501 #define T      __LINE__, charT ()
       
   502 #define TEST   ++ntried, nfailed += type_test
       
   503 
       
   504     // enum part { none, space, symbol, sign, value };
       
   505 
       
   506     // no symbol, empty sign, default format
       
   507     std_log(LOG_FILENAME_LINE,"Test start");
       
   508     TEST (T,         0.,         "0", ' ');
       
   509     std_log(LOG_FILENAME_LINE,"Test end");
       
   510     std_log(LOG_FILENAME_LINE,"Test Start");
       
   511     TEST (T,         1.,         "1", ' ');
       
   512     std_log(LOG_FILENAME_LINE,"Test end");
       
   513     std_log(LOG_FILENAME_LINE,"Test Start");
       
   514     TEST (T,        12.,        "12", ' ');
       
   515     std_log(LOG_FILENAME_LINE,"Test end");
       
   516     std_log(LOG_FILENAME_LINE,"Test Start");
       
   517     TEST (T,       123.,       "123", ' ');
       
   518     std_log(LOG_FILENAME_LINE,"Test end");
       
   519     std_log(LOG_FILENAME_LINE,"Test Start");
       
   520     TEST (T,      1234.,      "1234", ' ');
       
   521     std_log(LOG_FILENAME_LINE,"Test end");
       
   522     std_log(LOG_FILENAME_LINE,"Test Start");
       
   523     TEST (T,     12345.,     "12345", ' ');
       
   524     std_log(LOG_FILENAME_LINE,"Test end");
       
   525     std_log(LOG_FILENAME_LINE,"Test Start");
       
   526     TEST (T,    123456.,    "123456", ' ');
       
   527     std_log(LOG_FILENAME_LINE,"Test end");
       
   528     std_log(LOG_FILENAME_LINE,"Test Start");
       
   529     TEST (T,   1234567.,   "1234567", ' ');
       
   530     std_log(LOG_FILENAME_LINE,"Test end");
       
   531     std_log(LOG_FILENAME_LINE,"Test Start");
       
   532     TEST (T,  12345678.,  "12345678", ' ');
       
   533     std_log(LOG_FILENAME_LINE,"Test end");
       
   534     std_log(LOG_FILENAME_LINE,"Test Start");
       
   535     TEST (T, 123456789., "123456789", ' ');
       
   536     std_log(LOG_FILENAME_LINE,"Test end");
       
   537     std_log(LOG_FILENAME_LINE,"Test Start");
       
   538 
       
   539     TEST (T, 12345678.9,  "12345679", ' ');
       
   540     std_log(LOG_FILENAME_LINE,"Test end");
       
   541     std_log(LOG_FILENAME_LINE,"Test Start");
       
   542     TEST (T, 1234567.89,   "1234568", ' ');
       
   543     std_log(LOG_FILENAME_LINE,"Test end");
       
   544     std_log(LOG_FILENAME_LINE,"Test Start");
       
   545     TEST (T, 123456.789,    "123457", ' ');
       
   546     std_log(LOG_FILENAME_LINE,"Test end");
       
   547     std_log(LOG_FILENAME_LINE,"Test Start");
       
   548     TEST (T, 12345.6789,     "12346", ' ');
       
   549     std_log(LOG_FILENAME_LINE,"Test end");
       
   550     std_log(LOG_FILENAME_LINE,"Test Start");
       
   551     TEST (T, 1234.56789,      "1235", ' ');
       
   552     std_log(LOG_FILENAME_LINE,"Test end");
       
   553     std_log(LOG_FILENAME_LINE,"Test Start");
       
   554     TEST (T, 123.456789,       "123", ' ');
       
   555     std_log(LOG_FILENAME_LINE,"Test end");
       
   556     std_log(LOG_FILENAME_LINE,"Test Start");
       
   557     TEST (T, 12.3456789,        "12", ' ');
       
   558     std_log(LOG_FILENAME_LINE,"Test end");
       
   559     std_log(LOG_FILENAME_LINE,"Test Start");
       
   560     TEST (T, 1.23456789,         "1", ' ');
       
   561     std_log(LOG_FILENAME_LINE,"Test end");
       
   562     std_log(LOG_FILENAME_LINE,"Test Start");
       
   563     TEST (T, .123456789,         "0", ' ');
       
   564     std_log(LOG_FILENAME_LINE,"Test end");
       
   565     std_log(LOG_FILENAME_LINE,"Test Start");
       
   566 
       
   567     // exercise correct handling of frac_digits
       
   568     TEST (T, 9876543210.,  "987654321:0", ' ', 0, 1);
       
   569     std_log(LOG_FILENAME_LINE,"Test end");
       
   570     std_log(LOG_FILENAME_LINE,"Test Start");
       
   571     TEST (T,  876543210.,   "8765432:10", ' ', 0, 2);
       
   572     std_log(LOG_FILENAME_LINE,"Test end");
       
   573     std_log(LOG_FILENAME_LINE,"Test Start");
       
   574     TEST (T,   76543210.,    "76543:210", ' ', 0, 3);
       
   575     std_log(LOG_FILENAME_LINE,"Test end");
       
   576     std_log(LOG_FILENAME_LINE,"Test Start");
       
   577     TEST (T,    6543210.,     "654:3210", ' ', 0, 4);
       
   578     std_log(LOG_FILENAME_LINE,"Test end");
       
   579     std_log(LOG_FILENAME_LINE,"Test Start");
       
   580     TEST (T,     543210.,      "5:43210", ' ', 0, 5);
       
   581     std_log(LOG_FILENAME_LINE,"Test end");
       
   582     std_log(LOG_FILENAME_LINE,"Test Start");
       
   583     TEST (T,      43210.,     "0:043210", ' ', 0, 6);
       
   584     std_log(LOG_FILENAME_LINE,"Test end");
       
   585     std_log(LOG_FILENAME_LINE,"Test Start");
       
   586     TEST (T,       3210.,    "0:0003210", ' ', 0, 7);
       
   587     std_log(LOG_FILENAME_LINE,"Test end");
       
   588     std_log(LOG_FILENAME_LINE,"Test Start");
       
   589     TEST (T,        210.,   "0:00000210", ' ', 0, 8);
       
   590     std_log(LOG_FILENAME_LINE,"Test end");
       
   591     std_log(LOG_FILENAME_LINE,"Test Start");
       
   592     TEST (T,         10.,  "0:000000010", ' ', 0, 9);
       
   593     std_log(LOG_FILENAME_LINE,"Test end");
       
   594     std_log(LOG_FILENAME_LINE,"Test Start");
       
   595     TEST (T,          1.,  "0:000000001", ' ', 0, 9);
       
   596     std_log(LOG_FILENAME_LINE,"Test end");
       
   597     std_log(LOG_FILENAME_LINE,"Test Start");
       
   598     TEST (T,          0.,  "0:000000000", ' ', 0, 9);
       
   599     std_log(LOG_FILENAME_LINE,"Test end");
       
   600     std_log(LOG_FILENAME_LINE,"Test Start");
       
   601     TEST (T,        200.,  "0:000000200", ' ', 0, 9);
       
   602     std_log(LOG_FILENAME_LINE,"Test end");
       
   603     std_log(LOG_FILENAME_LINE,"Test Start");
       
   604     TEST (T,       3000.,  "0:000003000", ' ', 0, 9);
       
   605     std_log(LOG_FILENAME_LINE,"Test end");
       
   606     std_log(LOG_FILENAME_LINE,"Test Start");
       
   607     TEST (T,      40000.,  "0:000040000", ' ', 0, 9);
       
   608     std_log(LOG_FILENAME_LINE,"Test end");
       
   609     std_log(LOG_FILENAME_LINE,"Test Start");
       
   610     TEST (T,     500000.,  "0:000500000", ' ', 0, 9);
       
   611     std_log(LOG_FILENAME_LINE,"Test end");
       
   612     std_log(LOG_FILENAME_LINE,"Test Start");
       
   613     TEST (T,    6000000.,  "0:006000000", ' ', 0, 9);
       
   614     std_log(LOG_FILENAME_LINE,"Test end");
       
   615     std_log(LOG_FILENAME_LINE,"Test Start");
       
   616     TEST (T,   70000000.,  "0:070000000", ' ', 0, 9);
       
   617     std_log(LOG_FILENAME_LINE,"Test end");
       
   618     std_log(LOG_FILENAME_LINE,"Test Start");
       
   619     TEST (T,  800000000.,  "0:800000000", ' ', 0, 9);
       
   620     std_log(LOG_FILENAME_LINE,"Test end");
       
   621     std_log(LOG_FILENAME_LINE,"Test Start");
       
   622     TEST (T, -900000000., "~0:900000000", ' ', 0, 9);
       
   623     std_log(LOG_FILENAME_LINE,"Test end");
       
   624     std_log(LOG_FILENAME_LINE,"Test Start");
       
   625     TEST (T,  -80000000., "~0:080000000", ' ', 0, 9);
       
   626     std_log(LOG_FILENAME_LINE,"Test end");
       
   627     std_log(LOG_FILENAME_LINE,"Test Start");
       
   628     TEST (T,   -7000000., "~0:007000000", ' ', 0, 9);
       
   629     std_log(LOG_FILENAME_LINE,"Test end");
       
   630     std_log(LOG_FILENAME_LINE,"Test Start");
       
   631     TEST (T,    -600000., "~0:000600000", ' ', 0, 9);
       
   632     std_log(LOG_FILENAME_LINE,"Test end");
       
   633     std_log(LOG_FILENAME_LINE,"Test Start");
       
   634     TEST (T,     -50000., "~0:000050000", ' ', 0, 9);
       
   635     std_log(LOG_FILENAME_LINE,"Test end");
       
   636     std_log(LOG_FILENAME_LINE,"Test Start");
       
   637     TEST (T,      -4000., "~0:000004000", ' ', 0, 9);
       
   638     std_log(LOG_FILENAME_LINE,"Test end");
       
   639     std_log(LOG_FILENAME_LINE,"Test Start");
       
   640     TEST (T,       -300., "~0:000000300", ' ', 0, 9);
       
   641     std_log(LOG_FILENAME_LINE,"Test end");
       
   642     std_log(LOG_FILENAME_LINE,"Test Start");
       
   643     TEST (T,        -20., "~0:000000020", ' ', 0, 9);
       
   644     std_log(LOG_FILENAME_LINE,"Test end");
       
   645     std_log(LOG_FILENAME_LINE,"Test Start");
       
   646     TEST (T,         -1., "~0:000000001", ' ', 0, 9);
       
   647     std_log(LOG_FILENAME_LINE,"Test end");
       
   648     std_log(LOG_FILENAME_LINE,"Test Start");
       
   649 
       
   650     if (test_neg_zero)
       
   651       {
       
   652 
       
   653     std_log(LOG_FILENAME_LINE,"Test Start");
       
   654 
       
   655          TEST (T, -0., "~0:000000000", ' ', 0, 9);
       
   656     std_log(LOG_FILENAME_LINE,"Test end");
       
   657          }
       
   658          
       
   659 
       
   660     // extension: fixed and negative frac_digits
       
   661     TEST (T,   1.0,       "1:0",      ' ', Fixed, -1);
       
   662     std_log(LOG_FILENAME_LINE,"Test end");
       
   663     std_log(LOG_FILENAME_LINE,"Test Start");
       
   664     TEST (T,   2.0,       "2:00",     ' ', Fixed, -2);
       
   665     std_log(LOG_FILENAME_LINE,"Test end");
       
   666     std_log(LOG_FILENAME_LINE,"Test Start");
       
   667     TEST (T,   3.0,       "3:000",    ' ', Fixed, -3);
       
   668     std_log(LOG_FILENAME_LINE,"Test end");
       
   669     std_log(LOG_FILENAME_LINE,"Test Start");
       
   670     TEST (T,   4.1,       "4:1000",   ' ', Fixed, -4);
       
   671     std_log(LOG_FILENAME_LINE,"Test end");
       
   672     std_log(LOG_FILENAME_LINE,"Test Start");
       
   673     TEST (T,  52.34,     "52:34000",  ' ', Fixed, -5);
       
   674     std_log(LOG_FILENAME_LINE,"Test end");
       
   675     std_log(LOG_FILENAME_LINE,"Test Start");
       
   676     TEST (T, 634.56789, "634:5679",   ' ', Fixed, -4);
       
   677     std_log(LOG_FILENAME_LINE,"Test end");
       
   678     std_log(LOG_FILENAME_LINE,"Test Start");
       
   679 
       
   680 
       
   681     // exhaustively exercise valid permutations of format patterns
       
   682     // (`none' allowed in all but the first position by 22.2.6.3, p1)
       
   683     TEST (T,   12,   "12", '\0', 0, 0, 0, "\3\0\4\2", "");
       
   684     std_log(LOG_FILENAME_LINE,"Test end");
       
   685     std_log(LOG_FILENAME_LINE,"Test Start");
       
   686     TEST (T,  123,  "123", '\0', 0, 0, 0, "\3\0\2\4", "");
       
   687     std_log(LOG_FILENAME_LINE,"Test end");
       
   688     std_log(LOG_FILENAME_LINE,"Test Start");
       
   689     TEST (T, 1234, "1234", '\0', 0, 0, 0, "\3\2\4\0", "");
       
   690     std_log(LOG_FILENAME_LINE,"Test end");
       
   691     std_log(LOG_FILENAME_LINE,"Test Start");
       
   692     TEST (T, 2345, "2345", '\0', 0, 0, 0, "\3\4\2\0", "");
       
   693     std_log(LOG_FILENAME_LINE,"Test end");
       
   694     std_log(LOG_FILENAME_LINE,"Test Start");
       
   695     TEST (T, 3456, "3456", '\0', 0, 0, 0, "\3\4\0\2", "");
       
   696     std_log(LOG_FILENAME_LINE,"Test end");
       
   697     std_log(LOG_FILENAME_LINE,"Test Start");
       
   698     TEST (T, 4567, "4567", '\0', 0, 0, 0, "\4\0\2\3", "");
       
   699     std_log(LOG_FILENAME_LINE,"Test end");
       
   700     std_log(LOG_FILENAME_LINE,"Test Start");
       
   701     TEST (T, 5678, "5678", '\0', 0, 0, 0, "\4\2\0\3", "");
       
   702     std_log(LOG_FILENAME_LINE,"Test end");
       
   703     std_log(LOG_FILENAME_LINE,"Test Start");
       
   704     TEST (T, 6789, "6789", '\0', 0, 0, 0, "\4\2\3\0", "");
       
   705     std_log(LOG_FILENAME_LINE,"Test end");
       
   706     std_log(LOG_FILENAME_LINE,"Test Start");
       
   707     TEST (T, 7890, "7890", '\0', 0, 0, 0, "\4\0\3\2", "");
       
   708     std_log(LOG_FILENAME_LINE,"Test end");
       
   709     std_log(LOG_FILENAME_LINE,"Test Start");
       
   710     TEST (T, 8901, "8901", '\0', 0, 0, 0, "\2\4\0\3", "");
       
   711     std_log(LOG_FILENAME_LINE,"Test end");
       
   712     std_log(LOG_FILENAME_LINE,"Test Start");
       
   713     TEST (T, 9012, "9012", '\0', 0, 0, 0, "\2\0\4\3", "");
       
   714     std_log(LOG_FILENAME_LINE,"Test end");
       
   715     std_log(LOG_FILENAME_LINE,"Test Start");
       
   716     TEST (T,  123,  "123", '\0', 0, 0, 0, "\2\0\3\4", "");
       
   717     std_log(LOG_FILENAME_LINE,"Test end");
       
   718     std_log(LOG_FILENAME_LINE,"Test Start");
       
   719 
       
   720     // format using `space' in valid positions (all but
       
   721     // the first and last as specified by 22.2.6.3, p1)
       
   722     // the actual space character (not the fill char)
       
   723     // is required
       
   724     TEST (T,   9,   " 9", '*', 0, 0, 0, "\3\1\4\2", "");
       
   725     std_log(LOG_FILENAME_LINE,"Test end");
       
   726     std_log(LOG_FILENAME_LINE,"Test Start");
       
   727     TEST (T,  98,  " 98", '*', 0, 0, 0, "\3\1\2\4", "");
       
   728     std_log(LOG_FILENAME_LINE,"Test end");
       
   729     std_log(LOG_FILENAME_LINE,"Test Start");
       
   730     TEST (T, 987, "987 ", '*', 0, 0, 0, "\3\4\1\2", "");
       
   731     std_log(LOG_FILENAME_LINE,"Test end");
       
   732     std_log(LOG_FILENAME_LINE,"Test Start");
       
   733     TEST (T, 876, "876 ", '*', 0, 0, 0, "\4\1\2\3", "");
       
   734     std_log(LOG_FILENAME_LINE,"Test end");
       
   735     std_log(LOG_FILENAME_LINE,"Test Start");
       
   736     TEST (T, 765, "765 ", '*', 0, 0, 0, "\4\2\1\3", "");
       
   737     std_log(LOG_FILENAME_LINE,"Test end");
       
   738     std_log(LOG_FILENAME_LINE,"Test Start");
       
   739     TEST (T, 654, "654 ", '*', 0, 0, 0, "\4\1\3\2", "");
       
   740     std_log(LOG_FILENAME_LINE,"Test end");
       
   741     std_log(LOG_FILENAME_LINE,"Test Start");
       
   742     TEST (T, 543, "543 ", '*', 0, 0, 0, "\2\4\1\3", "");
       
   743     std_log(LOG_FILENAME_LINE,"Test end");
       
   744     std_log(LOG_FILENAME_LINE,"Test Start");
       
   745     TEST (T, 432, " 432", '*', 0, 0, 0, "\2\1\4\3", "");
       
   746     std_log(LOG_FILENAME_LINE,"Test end");
       
   747     std_log(LOG_FILENAME_LINE,"Test Start");
       
   748     TEST (T, 321, " 321", '*', 0, 0, 0, "\2\1\3\4", "");
       
   749     std_log(LOG_FILENAME_LINE,"Test end");
       
   750     std_log(LOG_FILENAME_LINE,"Test Start");
       
   751 
       
   752     TEST (T,        0,        "$0", '\0', Showbase, 0, 0, "\2\3\4\0", "");
       
   753     std_log(LOG_FILENAME_LINE,"Test end");
       
   754     std_log(LOG_FILENAME_LINE,"Test Start");
       
   755     TEST (T,        1,        "$1", '\0', Showbase, 0, 0, "\2\3\4\0", "");
       
   756     std_log(LOG_FILENAME_LINE,"Test end");
       
   757     std_log(LOG_FILENAME_LINE,"Test Start");
       
   758     TEST (T,       12,       "$12", '\0', Showbase, 0, 0, "\2\3\4\0", "");
       
   759     std_log(LOG_FILENAME_LINE,"Test end");
       
   760     std_log(LOG_FILENAME_LINE,"Test Start");
       
   761     TEST (T,      123,      "$123", '\0', Showbase, 0, 0, "\2\3\4\0", "");
       
   762     std_log(LOG_FILENAME_LINE,"Test end");
       
   763     std_log(LOG_FILENAME_LINE,"Test Start");
       
   764     TEST (T,     1234,     "$1234", '\0', Showbase, 0, 0, "\2\3\4\0", "");
       
   765     std_log(LOG_FILENAME_LINE,"Test end");
       
   766     std_log(LOG_FILENAME_LINE,"Test Start");
       
   767     TEST (T,    12345,    "$12345", '\0', Showbase, 0, 0, "\2\3\4\0", "");
       
   768     std_log(LOG_FILENAME_LINE,"Test end");
       
   769     std_log(LOG_FILENAME_LINE,"Test Start");
       
   770     TEST (T,   123456,   "$123456", '\0', Showbase, 0, 0, "\2\3\4\0", "");
       
   771     std_log(LOG_FILENAME_LINE,"Test end");
       
   772     std_log(LOG_FILENAME_LINE,"Test Start");
       
   773     TEST (T,  1234567,  "$1234567", '\0', Showbase, 0, 0, "\2\3\4\0", "");
       
   774     std_log(LOG_FILENAME_LINE,"Test end");
       
   775     std_log(LOG_FILENAME_LINE,"Test Start");
       
   776     TEST (T, 12345678, "$12345678", '\0', Showbase, 0, 0, "\2\3\4\0", "");
       
   777     std_log(LOG_FILENAME_LINE,"Test end");
       
   778     std_log(LOG_FILENAME_LINE,"Test Start");
       
   779 
       
   780     TEST (T,         0,             "$0", '\0', Showbase, 0, 0, 0, "\2");
       
   781     std_log(LOG_FILENAME_LINE,"Test end");
       
   782     std_log(LOG_FILENAME_LINE,"Test Start");
       
   783     TEST (T,         1,             "$1", '\0', Showbase, 0, 0, 0, "\2\2");
       
   784     std_log(LOG_FILENAME_LINE,"Test end");
       
   785     std_log(LOG_FILENAME_LINE,"Test Start");
       
   786     TEST (T,        12,            "$12", '\0', Showbase, 0, 0, 0, "\2");
       
   787     std_log(LOG_FILENAME_LINE,"Test end");
       
   788     std_log(LOG_FILENAME_LINE,"Test Start");
       
   789     TEST (T,       123,          "$1;23", '\0', Showbase, 0, 0, 0, "\2\2");
       
   790     std_log(LOG_FILENAME_LINE,"Test end");
       
   791     std_log(LOG_FILENAME_LINE,"Test Start");
       
   792     TEST (T,      1234,         "$12;34", '\0', Showbase, 0, 0, 0, "\2");
       
   793     std_log(LOG_FILENAME_LINE,"Test end");
       
   794     std_log(LOG_FILENAME_LINE,"Test Start");
       
   795     TEST (T,     12345,       "$1;23;45", '\0', Showbase, 0, 0, 0, "\2\2");
       
   796     std_log(LOG_FILENAME_LINE,"Test end");
       
   797     std_log(LOG_FILENAME_LINE,"Test Start");
       
   798     TEST (T,    123456,      "$12;34;56", '\0', Showbase, 0, 0, 0, "\2");
       
   799     std_log(LOG_FILENAME_LINE,"Test end");
       
   800     std_log(LOG_FILENAME_LINE,"Test Start");
       
   801     TEST (T,   1234567,    "$1;23;45;67", '\0', Showbase, 0, 0, 0, "\2\2");
       
   802     std_log(LOG_FILENAME_LINE,"Test end");
       
   803     std_log(LOG_FILENAME_LINE,"Test Start");
       
   804     TEST (T,  12345678,   "$12;34;56;78", '\0', Showbase, 0, 0, 0, "\2");
       
   805     std_log(LOG_FILENAME_LINE,"Test end");
       
   806     std_log(LOG_FILENAME_LINE,"Test Start");
       
   807     TEST (T, 123456789, "$1;23;45;67;89", '\0', Showbase, 0, 0, 0, "\2\2");
       
   808     std_log(LOG_FILENAME_LINE,"Test end");
       
   809     std_log(LOG_FILENAME_LINE,"Test Start");
       
   810 
       
   811     if (test_neg_zero)
       
   812          { 
       
   813          
       
   814 
       
   815     std_log(LOG_FILENAME_LINE,"Test Start");
       
   816 
       
   817          
       
   818           TEST (T, -0.0, "$~0", '\0', Showbase, 0, 0, 0, "\3\3");
       
   819          
       
   820     std_log(LOG_FILENAME_LINE,"Test end");
       
   821 
       
   822          
       
   823          }
       
   824 
       
   825     std_log(LOG_FILENAME_LINE,"Test Start");
       
   826 
       
   827     TEST (T,         -1,           "$~1", '\0', Showbase, 0, 0, 0, "\3");
       
   828     std_log(LOG_FILENAME_LINE,"Test end");
       
   829     std_log(LOG_FILENAME_LINE,"Test Start");
       
   830     TEST (T,        -12,          "$~12", '\0', Showbase, 0, 0, 0, "\3\3");
       
   831     std_log(LOG_FILENAME_LINE,"Test end");
       
   832     std_log(LOG_FILENAME_LINE,"Test Start");
       
   833     TEST (T,       -123,         "$~123", '\0', Showbase, 0, 0, 0, "\3");
       
   834     std_log(LOG_FILENAME_LINE,"Test end");
       
   835     std_log(LOG_FILENAME_LINE,"Test Start");
       
   836     TEST (T,      -1234,       "$~1;234", '\0', Showbase, 0, 0, 0, "\3\3");
       
   837     std_log(LOG_FILENAME_LINE,"Test end");
       
   838     std_log(LOG_FILENAME_LINE,"Test Start");
       
   839     TEST (T,     -12345,      "$~12;345", '\0', Showbase, 0, 0, 0, "\3");
       
   840     std_log(LOG_FILENAME_LINE,"Test end");
       
   841     std_log(LOG_FILENAME_LINE,"Test Start");
       
   842     TEST (T,    -123456,     "$~123;456", '\0', Showbase, 0, 0, 0, "\3\3");
       
   843     std_log(LOG_FILENAME_LINE,"Test end");
       
   844     std_log(LOG_FILENAME_LINE,"Test Start");
       
   845     TEST (T,   -1234567,   "$~1;234;567", '\0', Showbase, 0, 0, 0, "\3");
       
   846     std_log(LOG_FILENAME_LINE,"Test end");
       
   847     std_log(LOG_FILENAME_LINE,"Test Start");
       
   848     TEST (T,  -12345678,  "$~12;345;678", '\0', Showbase, 0, 0, 0, "\3\3");
       
   849     std_log(LOG_FILENAME_LINE,"Test end");
       
   850     std_log(LOG_FILENAME_LINE,"Test Start");
       
   851     TEST (T, -123456789, "$~123;456;789", '\0', Showbase, 0, 0, 0, "\3");
       
   852     std_log(LOG_FILENAME_LINE,"Test end");
       
   853     std_log(LOG_FILENAME_LINE,"Test Start");
       
   854 
       
   855     // for convenience
       
   856     const char *f = "\3\2\4\0";   // { sign, symbol, value, none }
       
   857 
       
   858     TEST (T,       -321,           "~$32;1", '\0', Showbase, 0, 0, f, "\1\2");
       
   859     std_log(LOG_FILENAME_LINE,"Test end");
       
   860     std_log(LOG_FILENAME_LINE,"Test Start");
       
   861     TEST (T,      -4322,          "~$432;2", '\0', Showbase, 0, 0, f, "\1\3");
       
   862     std_log(LOG_FILENAME_LINE,"Test end");
       
   863     std_log(LOG_FILENAME_LINE,"Test Start");
       
   864     TEST (T,     -54323,      "~$5;4;3;2;3", '\0', Showbase, 0, 0, f, "\1\1");
       
   865     std_log(LOG_FILENAME_LINE,"Test end");
       
   866     std_log(LOG_FILENAME_LINE,"Test Start");
       
   867     TEST (T,    -654324,    "~$6;5;4;3;2;4", '\0', Showbase, 0, 0, f, "\1\1");
       
   868     std_log(LOG_FILENAME_LINE,"Test end");
       
   869     std_log(LOG_FILENAME_LINE,"Test Start");
       
   870     TEST (T,   -7654325,      "~$765;432;5", '\0', Showbase, 0, 0, f, "\1\3");
       
   871     std_log(LOG_FILENAME_LINE,"Test end");
       
   872     std_log(LOG_FILENAME_LINE,"Test Start");
       
   873     TEST (T,  -87654326, "~$8;7;6;5;4;3;26", '\0', Showbase, 0, 0, f, "\2\1");
       
   874     std_log(LOG_FILENAME_LINE,"Test end");
       
   875     std_log(LOG_FILENAME_LINE,"Test Start");
       
   876     TEST (T, -987654327,  "~$98;76;54;32;7", '\0', Showbase, 0, 0, f, "\1\2");
       
   877     std_log(LOG_FILENAME_LINE,"Test end");
       
   878 
       
   879 
       
   880     static const charT curr_symbol2 [8] = { 'X', 'Y', '\0' };
       
   881     Punct<charT, false>::curr_symbol_   = curr_symbol2;
       
   882 
       
   883     static const charT signs2[][8] = {
       
   884         // negative            positive
       
   885         { '(', ')', '\0' }, { '{', '}', '\0' }
       
   886     };
       
   887 
       
   888     Punct<charT, false>::negative_sign_ = signs2 [0];
       
   889     Punct<charT, false>::positive_sign_ = signs2 [1];
       
   890     Punct<charT, false>::thousands_sep_ = '.';
       
   891     Punct<charT, false>::decimal_point_ = '.';
       
   892 
       
   893     f = "\3\4\1\2";   // { sign, value, space, symbol }
       
   894 
       
   895     std_log(LOG_FILENAME_LINE,"Test Start");
       
   896 
       
   897     TEST (T, -1357911, "(1.3.5.7.9.1.1 XY)", '*', Showbase, 0, 0, f, "\1");
       
   898     std_log(LOG_FILENAME_LINE,"Test end");
       
   899     std_log(LOG_FILENAME_LINE,"Test Start");
       
   900     TEST (T, -2468012,    "(2.46.80.12 XY)", '-', Showbase, 0, 0, f, "\2");
       
   901     std_log(LOG_FILENAME_LINE,"Test end");
       
   902     std_log(LOG_FILENAME_LINE,"Test Start");
       
   903     TEST (T, -3692513,     "(3.692.513 XY)", ' ', Showbase, 0, 0, f, "\3");
       
   904     std_log(LOG_FILENAME_LINE,"Test end");
       
   905     std_log(LOG_FILENAME_LINE,"Test Start");
       
   906     TEST (T, -9999914,      "(999.9914 XY)", '@', Showbase, 0, 0, f, "\4");
       
   907     std_log(LOG_FILENAME_LINE,"Test end");
       
   908     std_log(LOG_FILENAME_LINE,"Test Start");
       
   909     TEST (T, -1000015,      "(10.00015 XY)", '#', Showbase, 0, 0, f, "\5");
       
   910     std_log(LOG_FILENAME_LINE,"Test end");
       
   911     std_log(LOG_FILENAME_LINE,"Test Start");
       
   912     TEST (T,      -16,            "(16 XY)", ')', Showbase, 0, 0, f, "\6");
       
   913     std_log(LOG_FILENAME_LINE,"Test end");
       
   914     std_log(LOG_FILENAME_LINE,"Test Start");
       
   915 
       
   916     TEST (T, +1357917, "{1.3.5.7.9.1.7 XY}", ',',  Showbase, 0, 0, f, "\1");
       
   917     std_log(LOG_FILENAME_LINE,"Test end");
       
   918     std_log(LOG_FILENAME_LINE,"Test Start");
       
   919     TEST (T, +2468018,    "{2.46.80.18 XY}", '+',  Showbase, 0, 0, f, "\2");
       
   920     std_log(LOG_FILENAME_LINE,"Test end");
       
   921     std_log(LOG_FILENAME_LINE,"Test Start");
       
   922     TEST (T, +3692519,     "{3.692.519 XY}", '0',  Showbase, 0, 0, f, "\3");
       
   923     std_log(LOG_FILENAME_LINE,"Test end");
       
   924     std_log(LOG_FILENAME_LINE,"Test Start");
       
   925     TEST (T, +9999920,      "{999.9920 XY}", '1',  Showbase, 0, 0, f, "\4");
       
   926     std_log(LOG_FILENAME_LINE,"Test end");
       
   927     std_log(LOG_FILENAME_LINE,"Test Start");
       
   928     TEST (T, +1000021,      "{10.00021 XY}", '\0', Showbase, 0, 0, f, "\5");
       
   929     std_log(LOG_FILENAME_LINE,"Test end");
       
   930     std_log(LOG_FILENAME_LINE,"Test Start");
       
   931     TEST (T,      +22,            "{22 XY}", '{',  Showbase, 0, 0, f, "\6");
       
   932     std_log(LOG_FILENAME_LINE,"Test end");
       
   933     std_log(LOG_FILENAME_LINE,"Test Start");
       
   934     TEST (T,     +123,             "{123 }", '_',  0,        0, 0, f, "\6");
       
   935     std_log(LOG_FILENAME_LINE,"Test end");
       
   936     std_log(LOG_FILENAME_LINE,"Test Start");
       
   937     TEST (T,     -224,             "(224 )", '_',  0,        0, 0, f, "\7");
       
   938     std_log(LOG_FILENAME_LINE,"Test end");
       
   939     std_log(LOG_FILENAME_LINE,"Test Start");
       
   940 
       
   941     TEST (T,  +325,  "{ XY325}", ' ', Showbase, 0, 0, "\3\1\2\4", "\xa");
       
   942     std_log(LOG_FILENAME_LINE,"Test end");
       
   943     std_log(LOG_FILENAME_LINE,"Test Start");
       
   944     TEST (T,  -426,  "( XY426)", ' ', Showbase, 0, 0, "\3\1\2\4", "\xb");
       
   945     std_log(LOG_FILENAME_LINE,"Test end");
       
   946     std_log(LOG_FILENAME_LINE,"Test Start");
       
   947     TEST (T,  +527,  "{XY 527}", ' ', Showbase, 0, 0, "\3\2\1\4", "\xc");
       
   948     std_log(LOG_FILENAME_LINE,"Test end");
       
   949     std_log(LOG_FILENAME_LINE,"Test Start");
       
   950     TEST (T,  -628,  "(XY 628)", ' ', Showbase, 0, 0, "\3\2\1\4", "\xd");
       
   951     std_log(LOG_FILENAME_LINE,"Test end");
       
   952     std_log(LOG_FILENAME_LINE,"Test Start");
       
   953     TEST (T,  +729,   "{XY729}", ' ', Showbase, 0, 0, "\3\2\0\4", "\xe");
       
   954     std_log(LOG_FILENAME_LINE,"Test end");
       
   955     std_log(LOG_FILENAME_LINE,"Test Start");
       
   956     TEST (T,  -830,   "(XY830)", ' ', Showbase, 0, 0, "\3\2\0\4", "\xf");
       
   957     std_log(LOG_FILENAME_LINE,"Test end");
       
   958     std_log(LOG_FILENAME_LINE,"Test Start");
       
   959     TEST (T,  +931,   "{XY931}", ' ', Showbase, 0, 0, "\3\0\2\4", "\x10");
       
   960     std_log(LOG_FILENAME_LINE,"Test end");
       
   961     std_log(LOG_FILENAME_LINE,"Test Start");
       
   962     TEST (T, -1032,  "(XY1032)", ' ', Showbase, 0, 0, "\3\0\2\4");
       
   963     std_log(LOG_FILENAME_LINE,"Test end");
       
   964     std_log(LOG_FILENAME_LINE,"Test Start");
       
   965     TEST (T, +1133,  "1133{XY}", ' ', Showbase, 0, 0, "\4\3\2\0");
       
   966     std_log(LOG_FILENAME_LINE,"Test end");
       
   967     std_log(LOG_FILENAME_LINE,"Test Start");
       
   968     TEST (T, -1234,  "1234XY()", ' ', Showbase, 0, 0, "\4\2\3\0");
       
   969     std_log(LOG_FILENAME_LINE,"Test end");
       
   970     std_log(LOG_FILENAME_LINE,"Test Start");
       
   971     TEST (T, +1335,  "1335XY{}", ' ', Showbase, 0, 0, "\4\2\0\3");
       
   972     std_log(LOG_FILENAME_LINE,"Test end");
       
   973     std_log(LOG_FILENAME_LINE,"Test Start");
       
   974     TEST (T, -1436, "1436XY ()", ' ', Showbase, 0, 0, "\4\2\1\3");
       
   975     std_log(LOG_FILENAME_LINE,"Test end");
       
   976     std_log(LOG_FILENAME_LINE,"Test Start");
       
   977     TEST (T, +1537,  "1537XY{}", ' ', Showbase, 0, 0, "\4\0\2\3");
       
   978     std_log(LOG_FILENAME_LINE,"Test end");
       
   979     std_log(LOG_FILENAME_LINE,"Test Start");
       
   980     TEST (T, -1638, "1638 XY()", ' ', Showbase, 0, 0, "\4\1\2\3");
       
   981     std_log(LOG_FILENAME_LINE,"Test end");
       
   982     std_log(LOG_FILENAME_LINE,"Test Start");
       
   983     TEST (T, +1739,  "XY1739{}", ' ', Showbase, 0, 0, "\2\4\0\3");
       
   984     std_log(LOG_FILENAME_LINE,"Test end");
       
   985     std_log(LOG_FILENAME_LINE,"Test Start");
       
   986     TEST (T, -1840, "XY1840 ()", ' ', Showbase, 0, 0, "\2\4\1\3");
       
   987     std_log(LOG_FILENAME_LINE,"Test end");
       
   988     std_log(LOG_FILENAME_LINE,"Test Start");
       
   989     TEST (T, +1941,  "XY1941{}", ' ', Showbase, 0, 0, "\2\0\4\3");
       
   990     std_log(LOG_FILENAME_LINE,"Test end");
       
   991     std_log(LOG_FILENAME_LINE,"Test Start");
       
   992     TEST (T, -2042, "XY 2042()", ' ', Showbase, 0, 0, "\2\1\4\3");
       
   993     std_log(LOG_FILENAME_LINE,"Test end");
       
   994     std_log(LOG_FILENAME_LINE,"Test Start");
       
   995     TEST (T, +2143,  "XY{2143}", ' ', Showbase, 0, 0, "\2\3\4\0");
       
   996     std_log(LOG_FILENAME_LINE,"Test end");
       
   997     std_log(LOG_FILENAME_LINE,"Test Start");
       
   998     TEST (T, -2244,  "XY(2244)", ' ', Showbase, 0, 0, "\2\3\0\4");
       
   999     std_log(LOG_FILENAME_LINE,"Test end");
       
  1000     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1001     TEST (T, +2345, "XY{ 2345}", ' ', Showbase, 0, 0, "\2\3\1\4");
       
  1002     std_log(LOG_FILENAME_LINE,"Test end");
       
  1003     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1004 
       
  1005     // 22.2.6.2, p2:
       
  1006     //   ...copies of `fill' are inserted as necessary to pad to the
       
  1007     //   specified width. For the value `af' equal to (str.flags()
       
  1008     //   & str.adjustfield), if (af == str.internal) is true, the fill
       
  1009     //   characters are placed where `none' or `space' appears in the
       
  1010     //   formatting pattern; otherwise if (af == str.left) is true, they
       
  1011     //   are placed after the other characters; otherwise, they are
       
  1012     //   placed before the other characters.
       
  1013 
       
  1014     TEST (T, -2446, "___XY( 2446)", '_', Showbase, 0, 12, "\2\3\1\4");
       
  1015     std_log(LOG_FILENAME_LINE,"Test end");
       
  1016     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1017     TEST (T, +2547, "____XY{2547}", '_', Showbase, 0, 12, "\2\3\0\4");
       
  1018     std_log(LOG_FILENAME_LINE,"Test end");
       
  1019     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1020 
       
  1021     TEST (T, -2648, "___XY( 2648)", '_', Showbase | Right, 0, 12, "\2\3\1\4");
       
  1022     std_log(LOG_FILENAME_LINE,"Test end");
       
  1023     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1024     TEST (T, +2749, "____XY{2749}", '_', Showbase | Right, 0, 12, "\2\3\0\4");
       
  1025     std_log(LOG_FILENAME_LINE,"Test end");
       
  1026     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1027 
       
  1028     TEST (T, -2850, "XY( 2850)___", '_', Showbase | Left, 0, 12, "\2\3\1\4");
       
  1029     std_log(LOG_FILENAME_LINE,"Test end");
       
  1030     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1031     TEST (T, +2951, "XY{2951}____", '_', Showbase | Left, 0, 12, "\2\3\0\4");
       
  1032     std_log(LOG_FILENAME_LINE,"Test end");
       
  1033     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1034 
       
  1035     TEST (T, -3052, "___XY( 3052)", '_',
       
  1036           Showbase | Left | Right, 0, 12, "\2\3\1\4");
       
  1037     std_log(LOG_FILENAME_LINE,"Test end");
       
  1038     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1039 
       
  1040     TEST (T, +3153, "____XY{3153}", '_',
       
  1041           Showbase | Left | Right, 0, 12, "\2\3\0\4");
       
  1042     std_log(LOG_FILENAME_LINE,"Test end");
       
  1043     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1044 
       
  1045     TEST (T, -3254, "___XY( 3254)", '_',
       
  1046           Showbase | Left | Right | Internal, 0, 12, "\2\3\1\4");
       
  1047     std_log(LOG_FILENAME_LINE,"Test end");
       
  1048     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1049 
       
  1050     TEST (T, +3355, "____XY{3355}", '_',
       
  1051           Showbase | Left | Right | Internal, 0, 12, "\2\3\0\4");
       
  1052     std_log(LOG_FILENAME_LINE,"Test end");
       
  1053     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1054 
       
  1055     TEST (T, -3456, "XY( ___3456)", '_',
       
  1056           Showbase | Internal, 0, 12, "\2\3\1\4");
       
  1057     std_log(LOG_FILENAME_LINE,"Test end");
       
  1058     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1059 
       
  1060     TEST (T, +3557, "XY{____3557}", '_',
       
  1061           Showbase | Internal, 0, 12, "\2\3\0\4");
       
  1062     std_log(LOG_FILENAME_LINE,"Test end");
       
  1063     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1064 
       
  1065     TEST (T, -3658, "XY____(3658)", '_',
       
  1066           Showbase | Internal, 0, 12, "\2\0\3\4");
       
  1067     std_log(LOG_FILENAME_LINE,"Test end");
       
  1068     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1069 
       
  1070     TEST (T, +3759, "XY{3759____}", '_',
       
  1071           Showbase | Internal, 0, 12, "\2\3\4\0");
       
  1072     std_log(LOG_FILENAME_LINE,"Test end");
       
  1073     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1074 
       
  1075     TEST (T, 3759, "XY{37.59}", '_',
       
  1076           Showbase | Internal, 0, 8, "\2\3\4\0", "\2");
       
  1077     std_log(LOG_FILENAME_LINE,"Test end");
       
  1078     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1079 
       
  1080     TEST (T, 3760, "XY{ 37.60}", '_',
       
  1081           Showbase | Internal, 0, 8, "\2\3\1\4", "\2");
       
  1082     std_log(LOG_FILENAME_LINE,"Test end");
       
  1083 #ifndef	__SYMBIAN32__ //it is long double value, long double is not supported.
       
  1084     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1085 
       
  1086     TEST (T, 12345678900000000000.0, "XY{ ........1.23.45678.9000.00.000.0.00}",
       
  1087           '.', Showbase | Internal, 0, 40, "\2\3\1\4", "\2\1\3\2\4\5\2");
       
  1088     std_log(LOG_FILENAME_LINE,"Test end");
       
  1089 #endif    
       
  1090     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1091 
       
  1092     TEST (T, 1234567890000000000.0, "{ ...........1234.56789.0000.000.00.0XY}",
       
  1093           '.', Showbase | Internal, 0, 40, "\3\1\4\2", "\1\2\3\4\5\6");
       
  1094     std_log(LOG_FILENAME_LINE,"Test end");
       
  1095     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1096 
       
  1097     // exercise justification with non-zero frac_digits
       
  1098     TEST (T,    1,  "_____{0.1}", '_', 0,        1, 10, "-@1$");
       
  1099     std_log(LOG_FILENAME_LINE,"Test end");
       
  1100     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1101     TEST (T,   12,  "_____{1.2}", '_', 0,        1, 10, "-@1$");
       
  1102     std_log(LOG_FILENAME_LINE,"Test end");
       
  1103     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1104     TEST (T,  123,  "____{1.23}", '_', 0,        2, 10, "-@1$");
       
  1105     std_log(LOG_FILENAME_LINE,"Test end");
       
  1106     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1107     TEST (T, 1234,  "_{12.34XY}", '_', Showbase, 2, 10, "-@1$");
       
  1108     std_log(LOG_FILENAME_LINE,"Test end");
       
  1109     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1110     TEST (T, 1235, "_{ 12.35XY}", '_', Showbase, 2, 11, "- 1$");
       
  1111     std_log(LOG_FILENAME_LINE,"Test end");
       
  1112     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1113 
       
  1114     TEST (T,    2,  "******{0.2}", '*', Right,            1, 11, "-@1$");
       
  1115     std_log(LOG_FILENAME_LINE,"Test end");
       
  1116     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1117     TEST (T,   23,  "******{2.3}", '*', Right,            1, 11, "-@1$");
       
  1118     std_log(LOG_FILENAME_LINE,"Test end");
       
  1119     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1120     TEST (T,  234,  "*****{2.34}", '*', Right,            2, 11, "-@1$");
       
  1121     std_log(LOG_FILENAME_LINE,"Test end");
       
  1122     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1123     TEST (T, 2345,  "**{23.45XY}", '*', Right | Showbase, 2, 11, "-@1$");
       
  1124     std_log(LOG_FILENAME_LINE,"Test end");
       
  1125     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1126     TEST (T, 2346, "**{ 23.46XY}", '*', Right | Showbase, 2, 12, "- 1$");
       
  1127     std_log(LOG_FILENAME_LINE,"Test end");
       
  1128     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1129 
       
  1130     TEST (T,    3,  "{0.3}#######", '#', Left,             1, 12, "-@1$");
       
  1131     std_log(LOG_FILENAME_LINE,"Test end");
       
  1132     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1133     TEST (T,   34,  "{3.4}#######", '#', Left,             1, 12, "-@1$");
       
  1134     std_log(LOG_FILENAME_LINE,"Test end");
       
  1135     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1136     TEST (T,  345,  "{3.45}######", '#', Left,             2, 12, "-@1$");
       
  1137     std_log(LOG_FILENAME_LINE,"Test end");
       
  1138     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1139     TEST (T, 3456,  "{34.56XY}###", '#', Left | Showbase,  2, 12, "-@1$");
       
  1140     std_log(LOG_FILENAME_LINE,"Test end");
       
  1141     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1142     TEST (T, 3457, "{ 34.57XY}###", '#', Left | Showbase,  2, 13, "- 1$");
       
  1143     std_log(LOG_FILENAME_LINE,"Test end");
       
  1144     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1145 
       
  1146     TEST (T,    4,  "{=====0.4}", '=', Internal,            1, 10, "-@1$");
       
  1147     std_log(LOG_FILENAME_LINE,"Test end");
       
  1148     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1149     TEST (T,   45,  "{=====4.5}", '=', Internal,            1, 10, "-@1$");
       
  1150     std_log(LOG_FILENAME_LINE,"Test end");
       
  1151     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1152     TEST (T,  456,  "{====4.56}", '=', Internal,            2, 10, "-@1$");
       
  1153     std_log(LOG_FILENAME_LINE,"Test end");
       
  1154     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1155     TEST (T, 4567,  "{=45.67XY}", '=', Internal | Showbase, 2, 10, "-@1$");
       
  1156     std_log(LOG_FILENAME_LINE,"Test end");
       
  1157     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1158     TEST (T, 4568, "{ =45.68XY}", '=', Internal | Showbase, 2, 11, "- 1$");
       
  1159 
       
  1160     std_log(LOG_FILENAME_LINE,"Test end");
       
  1161     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1162     Punct<charT, false>::thousands_sep_ = ',';
       
  1163     Punct<charT, false>::decimal_point_ = '.';
       
  1164 
       
  1165     // justification with grouping
       
  1166     TEST (T,    105,   "====={1,0.5}", '=', 0,        1, 12, "-@1$", "\1");
       
  1167     std_log(LOG_FILENAME_LINE,"Test end");
       
  1168     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1169     TEST (T,   1056,   "===={1,05.6}", '=', 0,        1, 12, "-@1$", "\2");
       
  1170     std_log(LOG_FILENAME_LINE,"Test end");
       
  1171     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1172     TEST (T,  10567,   "==={1,05.67}", '=', 0,        2, 12, "-@1$", "\2");
       
  1173     std_log(LOG_FILENAME_LINE,"Test end");
       
  1174     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1175     TEST (T, 105678, "=={10,56.78XY}", '=', Showbase, 2, 14, "-@1$", "\2");
       
  1176     std_log(LOG_FILENAME_LINE,"Test end");
       
  1177     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1178     TEST (T, 105679, "={ 10,56.79XY}", '=', Showbase, 2, 14, "- 1$", "\2");
       
  1179     std_log(LOG_FILENAME_LINE,"Test end");
       
  1180     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1181     TEST (T, 105680, "={ 1,056,80XY}", '=', Showbase, 0, 14, "- 1$", "\2\3");
       
  1182     std_log(LOG_FILENAME_LINE,"Test end");
       
  1183     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1184 
       
  1185     int flags = Right | Showbase;
       
  1186     TEST (T,    106,   ">>>>>{1,0.6}", '>', Right, 1, 12, "-@1$", "\1");
       
  1187     std_log(LOG_FILENAME_LINE,"Test end");
       
  1188     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1189     TEST (T,   1057,   ">>>>{1,05.7}", '>', Right, 1, 12, "-@1$", "\2");
       
  1190     std_log(LOG_FILENAME_LINE,"Test end");
       
  1191     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1192     TEST (T,  10568,   ">>>{1,05.68}", '>', Right, 2, 12, "-@1$", "\2");
       
  1193     std_log(LOG_FILENAME_LINE,"Test end");
       
  1194     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1195     TEST (T, 105679, ">>{10,56.79XY}", '>', flags, 2, 14, "-@1$", "\2");
       
  1196     std_log(LOG_FILENAME_LINE,"Test end");
       
  1197     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1198     TEST (T, 105680, ">{ 10,56.80XY}", '>', flags, 2, 14, "- 1$", "\2");
       
  1199     std_log(LOG_FILENAME_LINE,"Test end");
       
  1200     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1201     TEST (T, 105681, ">{ 1,056,81XY}", '>', flags, 0, 14, "- 1$", "\2\3");
       
  1202     std_log(LOG_FILENAME_LINE,"Test end");
       
  1203     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1204 
       
  1205     flags = Left | Showbase;
       
  1206     TEST (T,    107,   "{1,0.7}<<<<<", '<', Left,  1, 12, "-@1$", "\1");
       
  1207     std_log(LOG_FILENAME_LINE,"Test end");
       
  1208     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1209     TEST (T,   1058,   "{1,05.8}<<<<", '<', Left,  1, 12, "-@1$", "\2");
       
  1210     std_log(LOG_FILENAME_LINE,"Test end");
       
  1211     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1212     TEST (T,  10569,   "{1,05.69}<<<", '<', Left,  2, 12, "-@1$", "\2");
       
  1213     std_log(LOG_FILENAME_LINE,"Test end");
       
  1214     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1215     TEST (T, 105680, "{10,56.80XY}<<", '<', flags, 2, 14, "-@1$", "\2");
       
  1216     std_log(LOG_FILENAME_LINE,"Test end");
       
  1217     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1218     TEST (T, 105681, "{ 10,56.81XY}<", '<', flags, 2, 14, "- 1$", "\2");
       
  1219     std_log(LOG_FILENAME_LINE,"Test end");
       
  1220     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1221     TEST (T, 105682, "{ 1,056,82XY}<", '<', flags, 0, 14, "- 1$", "\2\3");
       
  1222     std_log(LOG_FILENAME_LINE,"Test end");
       
  1223     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1224 
       
  1225     flags = Internal | Showbase;
       
  1226     TEST (T,    108,   "{^^^^^1,0.8}", '^', Internal, 1, 12, "-@1$", "\1");
       
  1227     std_log(LOG_FILENAME_LINE,"Test end");
       
  1228     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1229     TEST (T,   1059,   "{^^^^1,05.9}", '^', Internal, 1, 12, "-@1$", "\2");
       
  1230     std_log(LOG_FILENAME_LINE,"Test end");
       
  1231     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1232     TEST (T,  10570,   "{^^^1,05.70}", '^', Internal, 2, 12, "-@1$", "\2");
       
  1233     std_log(LOG_FILENAME_LINE,"Test end");
       
  1234     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1235     TEST (T, 105681, "{^^10,56.81XY}", '^', flags,    2, 14, "-@1$", "\2");
       
  1236     std_log(LOG_FILENAME_LINE,"Test end");
       
  1237     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1238     TEST (T, 105682, "{ ^10,56.82XY}", '^', flags,    2, 14, "- 1$", "\2");
       
  1239     std_log(LOG_FILENAME_LINE,"Test end");
       
  1240     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1241     TEST (T, 105683, "{ ^1,056,83XY}", '^', flags,    0, 14, "- 1$", "\2\3");
       
  1242     std_log(LOG_FILENAME_LINE,"Test end");
       
  1243     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1244 
       
  1245     flags = Left | Right | Showbase;
       
  1246     TEST (T,    109,   "#####{1,0.9}", '#', Left | Right, 1, 12, "-@1$", "\1");
       
  1247     std_log(LOG_FILENAME_LINE,"Test end");
       
  1248     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1249     TEST (T,   1060,   "####{1,06.0}", '#', Left | Right, 1, 12, "-@1$", "\2");
       
  1250     std_log(LOG_FILENAME_LINE,"Test end");
       
  1251     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1252     TEST (T,  10571,   "###{1,05.71}", '#', Left | Right, 2, 12, "-@1$", "\2");
       
  1253     std_log(LOG_FILENAME_LINE,"Test end");
       
  1254     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1255     TEST (T, 105682, "##{10,56.82XY}", '#', flags,        2, 14, "-@1$", "\2");
       
  1256     std_log(LOG_FILENAME_LINE,"Test end");
       
  1257     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1258     TEST (T, 105683, "#{ 10,56.83XY}", '#', flags,        2, 14, "- 1$", "\2");
       
  1259     std_log(LOG_FILENAME_LINE,"Test end");
       
  1260     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1261     TEST (T, 105684, "#{ 10,56,84XY}", '#', flags,        0, 14, "- 1$", "\2");
       
  1262     std_log(LOG_FILENAME_LINE,"Test end");
       
  1263 
       
  1264 
       
  1265 
       
  1266     // verify that mon_put (..., const basic_string&) ignores the part
       
  1267     // of the string starting with the first non-numeric character
       
  1268 #undef FMT
       
  1269 #define FMT(fmt) "%.0" _RWSTD_LDBL_PRINTF_PREFIX "f" fmt
       
  1270 
       
  1271     // using default format "\2\3\4\0": {symbol, sign, value, none}
       
  1272 
       
  1273     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1274     TEST (T,   10, "{1.0}", ' ', 0, 1, -1, FMT (" "));
       
  1275     std_log(LOG_FILENAME_LINE,"Test end");
       
  1276     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1277     TEST (T,   10, "{1.0}", ' ', 0, 1, -1, FMT ("."));
       
  1278     std_log(LOG_FILENAME_LINE,"Test end");
       
  1279     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1280 
       
  1281     TEST (T,  -11, "(1.1)", ' ', 0, 1, -1, FMT (" "));
       
  1282     std_log(LOG_FILENAME_LINE,"Test end");
       
  1283     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1284     TEST (T,  -11, "(1.1)", ' ', 0, 1, -1, FMT ("."));
       
  1285     std_log(LOG_FILENAME_LINE,"Test end");
       
  1286     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1287 
       
  1288     TEST (T,  101, "{1.01}", ' ', 0, 2, -1, FMT (" "));
       
  1289     std_log(LOG_FILENAME_LINE,"Test end");
       
  1290     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1291     TEST (T,  101, "{1.01}", ' ', 0, 2, -1, FMT ("."));
       
  1292 
       
  1293     std_log(LOG_FILENAME_LINE,"Test end");
       
  1294 
       
  1295     Punct<charT, false>::negative_sign_ = signs1 [0];
       
  1296     Punct<charT, false>::positive_sign_ = signs1 [1];
       
  1297 
       
  1298     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1299 
       
  1300     TEST (T,  1012, "1,0.12", ' ', 0, 2, -1, FMT (" 0"), "\1");
       
  1301     std_log(LOG_FILENAME_LINE,"Test end");
       
  1302     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1303     TEST (T,  1013, "1,0.13", ' ', 0, 2, -1, FMT (".1"), "\1");
       
  1304     std_log(LOG_FILENAME_LINE,"Test end");
       
  1305     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1306 
       
  1307     TEST (T, -1014, "~1,01.4", ' ', 0, 1, -1, FMT ("~2"), "\2");
       
  1308     std_log(LOG_FILENAME_LINE,"Test end");
       
  1309     std_log(LOG_FILENAME_LINE,"Test Start");
       
  1310     TEST (T, -1015, "~1,01.5", ' ', 0, 1, -1, FMT (",3"), "\2");
       
  1311     std_log(LOG_FILENAME_LINE,"Test end");
       
  1312 
       
  1313 }
       
  1314 //#endif // Error
       
  1315 /**************************************************************************/
       
  1316 //#ifndef __SYMBIAN32__ // Error
       
  1317 void grouping_test ()
       
  1318 {
       
  1319     if (!rw_enabled ("char")) {
       
  1320        failures++;
       
  1321        std_log(LOG_FILENAME_LINE,"Char test disabled");
       
  1322      	    rw_note (0, __FILE__, __LINE__, "char test disabled");
       
  1323         return;
       
  1324     }
       
  1325     
       
  1326     rw_info (0, 0, 0, "std::money_put<%s>::put(ostreambuf_iterator"
       
  1327              "<%s>, bool, ios_base, %s, long double); correct use of "
       
  1328              "moneypunct<%s, false>::grouping() and thousands_sep()",
       
  1329              "char", "char", "char", "char");
       
  1330 
       
  1331     typedef Punct<char, false> PunctT;
       
  1332 
       
  1333     // construct a "replacement" moneypunct-derived facet
       
  1334     const PunctT pun;
       
  1335 
       
  1336     // group after every digit
       
  1337     PunctT::grouping_ = "\1";
       
  1338 
       
  1339     // reset the do_thousands_sep()-call counter
       
  1340     PunctT::thousands_sep_   = ';';
       
  1341     PunctT::decimal_point_   = ':';
       
  1342     PunctT::n_thousands_sep_ = 0;
       
  1343 
       
  1344     // construct and initialize a basic_ios-derived object
       
  1345     struct Ios: std::basic_ios<char> { Ios () { this->init (0); } } ios;
       
  1346 
       
  1347     // construct a money_put-derived facet to exercise
       
  1348     struct MoneyPut: std::money_put<char, char*> { } mp;
       
  1349 
       
  1350     // imbue a stream object with a custom locale
       
  1351     // containing the replacement punctuation facet
       
  1352     std::locale l;
       
  1353     std::locale loc (l, (const std::moneypunct<char>*)&pun);
       
  1354     ios.imbue (loc);
       
  1355 
       
  1356     // decimal output, no special formatting
       
  1357     ios.setf (std::ios::fmtflags ());
       
  1358 
       
  1359     char buf [40] = "";
       
  1360 
       
  1361 	//convert long double to string
       
  1362 	char charld[100]= 
       
  1363 	{
       
  1364 		0
       
  1365      	};
       
  1366    #ifdef __SYMBIAN32__   
       
  1367 	sprintf(charld,"%f",123456789.0L);
       
  1368 	std::string strld(charld);
       
  1369     
       
  1370     *mp.put (buf, false, ios, '\0', strld) = '\0';
       
  1371      if(0 != rw_strncmp (buf, "1;2;3;4;5;6;7;8;9"))
       
  1372      {
       
  1373 	 failures++;
       
  1374     std_log(LOG_FILENAME_LINE,"Failing");
       
  1375       }
       
  1376     if(0 == PunctT::n_thousands_sep_)    
       
  1377       {
       
  1378 	 failures++;
       
  1379     std_log(LOG_FILENAME_LINE,"Failing");
       
  1380       }	    
       
  1381  
       
  1382 #else
       
  1383   *mp.put (buf, false, ios, '\0', 123456789.0L) = '\0';
       
  1384    // verify that the number was formatted correctly
       
  1385     rw_assert (0 == rw_strncmp (buf, "1;2;3;4;5;6;7;8;9"), __FILE__, __LINE__,
       
  1386                "money_put<char, char*>::do_put(..., 123456789.0L) "
       
  1387                "== %#s, got %#s", "1;2;3;4;5;6;7;8;9", buf);
       
  1388 
       
  1389     // verify that do_thousands_sep() was called at least once
       
  1390     // (but not necessarily for each thousands separator inserted
       
  1391     // into the output, since the value is allowed to be cached)
       
  1392     rw_assert (0 != PunctT::n_thousands_sep_, __FILE__, __LINE__,
       
  1393                "money_put<char, char*>::do_put(..., 123456789.0L) "
       
  1394                "called moneypunct<char>::do_thousands_sep()");
       
  1395 #endif
       
  1396  
       
  1397  
       
  1398 }
       
  1399 //#endif // Error
       
  1400 /**************************************************************************/
       
  1401 
       
  1402 static int
       
  1403 run_test (int, char*[])
       
  1404 {
       
  1405     // check to see if we can test -0.0
       
  1406     static double d = -0.0;
       
  1407     test_neg_zero = 1.0 / d < d;
       
  1408     //#ifndef __SYMBIAN32__ // Error
       
  1409     if (no_grouping)
       
  1410         rw_note (0, __FILE__, __LINE__, "grouping test disabled");
       
  1411     else
       
  1412         grouping_test ();
       
  1413 
       
  1414     if (rw_enabled ("char"))
       
  1415         ldbl_test (char ());
       
  1416     else
       
  1417         rw_note (0, __FILE__, __LINE__, "char test disabled");
       
  1418 
       
  1419 #ifndef _RWSTD_NO_WCHAR_T
       
  1420 
       
  1421     if (rw_enabled ("wchar_t"))
       
  1422         ldbl_test (wchar_t ());
       
  1423     else
       
  1424         rw_note (0, __FILE__, __LINE__, "wchar_t test disabled");
       
  1425 
       
  1426 #endif   // _RWSTD_NO_WCHAR_T
       
  1427 //#endif // Error
       
  1428     return 0;
       
  1429 }
       
  1430 
       
  1431 /**************************************************************************/
       
  1432 
       
  1433 int main (int argc, char *argv[])
       
  1434 {
       
  1435 #ifndef __SYMBIAN32__
       
  1436      	return rw_test (argc, argv, __FILE__,
       
  1437                     "lib.locale.money.put",
       
  1438                     0 /* no comment */, run_test,
       
  1439                     "|-no-grouping# |-no-basic_string#",
       
  1440                     &no_grouping, &no_basic_string);
       
  1441 #else
       
  1442     rw_test (argc, argv, __FILE__,
       
  1443                     "lib.locale.money.put",
       
  1444                     0 /* no comment */, run_test,
       
  1445                     "|-no-grouping# |-no-basic_string#",
       
  1446                     &no_grouping, &no_basic_string);
       
  1447     if(failures)
       
  1448       {
       
  1449             assert_failed = true;
       
  1450        std_log(LOG_FILENAME_LINE,"Result: Failed");
       
  1451       }
       
  1452      else
       
  1453       {
       
  1454 
       
  1455        std_log(LOG_FILENAME_LINE,"Result: Passed");
       
  1456       }
       
  1457   
       
  1458    std_log(LOG_FILENAME_LINE,"[End Test Case]");  
       
  1459    
       
  1460    testResultXml("22_locale_money_put");
       
  1461     close_log_file();
       
  1462    return 0;
       
  1463 #endif 
       
  1464 }