OSDN Git Service

2002-09-27 Paolo Carlini <pcarlini@unitus.it>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 27 Sep 2002 23:08:22 +0000 (23:08 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 27 Sep 2002 23:08:22 +0000 (23:08 +0000)
* include/bits/locale_facets.tcc (num_put::_M_widen_int):
Deal correctly with grouped, showbased (oct or hex) zero.
* testsuite/22_locale/num_put_members_char.cc: Add test05.
* testsuite/22_locale/num_put_members_wchar_t.cc: Ditto.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@57598 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/locale_facets.tcc
libstdc++-v3/testsuite/22_locale/num_put_members_char.cc
libstdc++-v3/testsuite/22_locale/num_put_members_wchar_t.cc

index aa1c2a5..5309c0a 100644 (file)
@@ -1,3 +1,10 @@
+2002-09-27  Paolo Carlini  <pcarlini@unitus.it>
+
+       * include/bits/locale_facets.tcc (num_put::_M_widen_int):
+       Deal correctly with grouped, showbased (oct or hex) zero.
+       * testsuite/22_locale/num_put_members_char.cc: Add test05.
+       * testsuite/22_locale/num_put_members_wchar_t.cc: Ditto.
+
 2002-09-27  Richard Henderson  <rth@redhat.com>
 
        * config/os/hpux/cpu_limits.h: Remove.
index 195d33a..f21054e 100644 (file)
@@ -798,8 +798,10 @@ namespace std
          // By itself __add_grouping cannot deal correctly with __ws when
          // ios::showbase is set and ios_base::oct || ios_base::hex.
          // Therefore we take care "by hand" of the initial 0, 0x or 0X.
+         // However, remember that the latter do not occur if the number
+         // printed is '0' (__len == 1).
          streamsize __off = 0;
-         if (__io.flags() & ios_base::showbase)
+         if ((__io.flags() & ios_base::showbase) && __len > 1)
            if (__basefield == ios_base::oct)
              {
                __off = 1;
index fcc1f79..e93900b 100644 (file)
@@ -326,12 +326,50 @@ void test04()
     }
 }
 
+// Make sure that, in a locale that expects grouping, when showbase
+// is true, an hexadecimal or octal zero is correctly output (the case 
+// of zero is special since there is no 0x, 0 respectively, prefix)
+void test05()
+{
+  using namespace std;
+  bool test = true;
+
+  // A locale that expects grouping.
+  locale loc_de("de_DE");
+
+  const string empty;
+  string result;
+
+  ostringstream oss;
+  oss.imbue(loc_de);
+  const num_put<char>& np = use_facet<num_put<char> >(oss.getloc()); 
+
+  long l = 0;
+
+  oss.str(empty);
+  oss.clear();
+  oss.setf(ios::showbase);
+  oss.setf(ios::hex, ios::basefield);
+  np.put(oss.rdbuf(), oss, '+', l);
+  result = oss.str();
+  VERIFY( result == "0" );
+
+  oss.str(empty);
+  oss.clear();
+  oss.setf(ios::showbase);
+  oss.setf(ios::oct, ios::basefield);
+  np.put(oss.rdbuf(), oss, '+', l);
+  result = oss.str();
+  VERIFY( result == "0" );
+}
+
 int main()
 {
   test01();
   test02();
   test03();
   test04();
+  test05();
   return 0;
 }
 
index 4fbf25f..53fdd59 100644 (file)
@@ -325,6 +325,43 @@ void test04()
       VERIFY( preLANG == postLANG );
     }
 }
+
+// Make sure that, in a locale that expects grouping, when showbase
+// is true, an hexadecimal or octal zero is correctly output (the case 
+// of zero is special since there is no 0x, 0 respectively, prefix)
+void test05()
+{
+  using namespace std;
+  bool test = true;
+
+  // A locale that expects grouping.
+  locale loc_de("de_DE");
+
+  const wstring empty;
+  wstring result;
+
+  wostringstream oss;
+  oss.imbue(loc_de);
+  const num_put<wchar_t>& np = use_facet<num_put<wchar_t> >(oss.getloc()); 
+
+  long l = 0;
+
+  oss.str(empty);
+  oss.clear();
+  oss.setf(ios::showbase);
+  oss.setf(ios::hex, ios::basefield);
+  np.put(oss.rdbuf(), oss, L'+', l);
+  result = oss.str();
+  VERIFY( result == L"0" );
+
+  oss.str(empty);
+  oss.clear();
+  oss.setf(ios::showbase);
+  oss.setf(ios::oct, ios::basefield);
+  np.put(oss.rdbuf(), oss, L'+', l);
+  result = oss.str();
+  VERIFY( result == L"0" );
+}
 #endif
 
 int main()
@@ -334,6 +371,7 @@ int main()
   test02();
   test03();
   test04();
+  test05();
 #endif
   return 0;
 }