diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2008-09-23 18:14:24 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2008-09-23 18:14:24 +0000 |
commit | 47cd155763fa67da6f50821714de8b1cbebab8fb (patch) | |
tree | 83a429a496255d0aafa7fadcc8baf90768f93d21 /libstdc++-v3 | |
parent | 37e27d01ca9a909987268f9e7ddc0a85cfc0863c (diff) | |
download | gcc-47cd155763fa67da6f50821714de8b1cbebab8fb.zip gcc-47cd155763fa67da6f50821714de8b1cbebab8fb.tar.gz gcc-47cd155763fa67da6f50821714de8b1cbebab8fb.tar.bz2 |
Implement DR 396 [Ready].
2008-09-23 Paolo Carlini <paolo.carlini@oracle.com>
Implement DR 396 [Ready].
* include/std/bitset (bitset<>::bitset(const std::basic_string<>&,
size_t, size_t, _CharT, _CharT), bitset<>::bitset(const char*,
char, char), bitset<>::to_string(_CharT, _CharT),
bitset<>::_M_copy_from_string(const std::basic_string<>&, size_t,
size_t, _CharT, _CharT), bitset<>::_M_copy_to_string
(std::basic_string<>&, _CharT, _CharT), bitset<>::_M_copy_from_ptr(
const _CharT*, size_t, size_t, size_t, _CharT, _CharT)): Add.
(operator>>(std::basic_istream<>&, bitset<_Nb>&), operator<<(
std::basic_ostream<>&, const bitset<_Nb>&)): Adjust.
* include/debug/bitset (bitset<>::bitset(const std::basic_string<>&,
size_t, size_t, _CharT, _CharT), bitset<>::bitset(const char*,
char, char), bitset<>::to_string(_CharT, _CharT)): Add.
* doc/xml/manual/intro.xml: Add an entry for DR 396.
* testsuite/23_containers/bitset/cons/dr396.cc: Add.
* testsuite/23_containers/bitset/to_string/dr396.cc: Likewise.
From-SVN: r140607
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 19 | ||||
-rw-r--r-- | libstdc++-v3/doc/xml/manual/intro.xml | 6 | ||||
-rw-r--r-- | libstdc++-v3/include/debug/bitset | 76 | ||||
-rw-r--r-- | libstdc++-v3/include/std/bitset | 142 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/bitset/cons/dr396.cc | 64 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/bitset/to_string/dr396.cc | 65 |
6 files changed, 323 insertions, 49 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 92e5267..1646262 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,22 @@ +2008-09-23 Paolo Carlini <paolo.carlini@oracle.com> + + Implement DR 396 [Ready]. + * include/std/bitset (bitset<>::bitset(const std::basic_string<>&, + size_t, size_t, _CharT, _CharT), bitset<>::bitset(const char*, + char, char), bitset<>::to_string(_CharT, _CharT), + bitset<>::_M_copy_from_string(const std::basic_string<>&, size_t, + size_t, _CharT, _CharT), bitset<>::_M_copy_to_string + (std::basic_string<>&, _CharT, _CharT), bitset<>::_M_copy_from_ptr( + const _CharT*, size_t, size_t, size_t, _CharT, _CharT)): Add. + (operator>>(std::basic_istream<>&, bitset<_Nb>&), operator<<( + std::basic_ostream<>&, const bitset<_Nb>&)): Adjust. + * include/debug/bitset (bitset<>::bitset(const std::basic_string<>&, + size_t, size_t, _CharT, _CharT), bitset<>::bitset(const char*, + char, char), bitset<>::to_string(_CharT, _CharT)): Add. + * doc/xml/manual/intro.xml: Add an entry for DR 396. + * testsuite/23_containers/bitset/cons/dr396.cc: Add. + * testsuite/23_containers/bitset/to_string/dr396.cc: Likewise. + 2008-09-23 Chris Fairles <cfairles@gcc.gnu.org> * include/std/chrono: If _GLIBCXX_USE_MONOTONIC_CLOCK is defined, don't diff --git a/libstdc++-v3/doc/xml/manual/intro.xml b/libstdc++-v3/doc/xml/manual/intro.xml index 08e107a..eb9652f 100644 --- a/libstdc++-v3/doc/xml/manual/intro.xml +++ b/libstdc++-v3/doc/xml/manual/intro.xml @@ -522,6 +522,12 @@ <listitem><para>Change it to return a <code>const T&</code>. </para></listitem></varlistentry> + <varlistentry><term><ulink url="../ext/lwg-active.html#396">396</ulink>: + <emphasis>what are characters zero and one</emphasis> + </term> + <listitem><para>Implement the proposed resolution. + </para></listitem></varlistentry> + <varlistentry><term><ulink url="../ext/lwg-defects.html#402">402</ulink>: <emphasis>Wrong new expression in [some_]allocator::construct</emphasis> </term> diff --git a/libstdc++-v3/include/debug/bitset b/libstdc++-v3/include/debug/bitset index 75474c8..28e0282 100644 --- a/libstdc++-v3/include/debug/bitset +++ b/libstdc++-v3/include/debug/bitset @@ -1,6 +1,7 @@ // Debugging bitset implementation -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 +// Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -125,20 +126,31 @@ namespace __debug bitset(unsigned long __val) : _Base(__val) { } - template<typename _CharT, typename _Traits, typename _Allocator> + template<typename _CharT, typename _Traits, typename _Alloc> explicit - bitset(const std::basic_string<_CharT,_Traits,_Allocator>& __str, - typename std::basic_string<_CharT,_Traits,_Allocator>::size_type + bitset(const std::basic_string<_CharT, _Traits, _Alloc>& __str, + typename std::basic_string<_CharT, _Traits, _Alloc>::size_type __pos = 0, - typename std::basic_string<_CharT,_Traits,_Allocator>::size_type - __n = (std::basic_string<_CharT,_Traits,_Allocator>::npos)) + typename std::basic_string<_CharT, _Traits, _Alloc>::size_type + __n = (std::basic_string<_CharT, _Traits, _Alloc>::npos)) : _Base(__str, __pos, __n) { } // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 396. what are characters zero and one. + template<class _CharT, class _Traits, class _Alloc> + bitset(const std::basic_string<_CharT, _Traits, _Alloc>& __str, + typename std::basic_string<_CharT, _Traits, _Alloc>::size_type + __pos, + typename std::basic_string<_CharT, _Traits, _Alloc>::size_type + __n, + _CharT __zero, _CharT __one = _CharT('1')) + : _Base(__str, __pos, __n, __zero, __one) { } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS // 778. std::bitset does not have any constructor taking a string literal explicit - bitset(const char* __s) - : _Base(__s) { } + bitset(const char* __s, char __zero = '0', char __one = '1') + : _Base(__s, __zero, __one) { } bitset(const _Base& __x) : _Base(__x), _Safe_base() { } @@ -245,10 +257,20 @@ namespace __debug using _Base::to_ulong; - template <typename _CharT, typename _Traits, typename _Allocator> - std::basic_string<_CharT, _Traits, _Allocator> + template <typename _CharT, typename _Traits, typename _Alloc> + std::basic_string<_CharT, _Traits, _Alloc> to_string() const - { return _M_base().template to_string<_CharT, _Traits, _Allocator>(); } + { return _M_base().template to_string<_CharT, _Traits, _Alloc>(); } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 396. what are characters zero and one. + template<class _CharT, class _Traits, class _Alloc> + std::basic_string<_CharT, _Traits, _Alloc> + to_string(_CharT __zero, _CharT __one = _CharT('1')) const + { + return _M_base().template + to_string<_CharT, _Traits, _Alloc>(__zero, __one); + } // _GLIBCXX_RESOLVE_LIB_DEFECTS // 434. bitset::to_string() hard to use. @@ -257,6 +279,14 @@ namespace __debug to_string() const { return to_string<_CharT, _Traits, std::allocator<_CharT> >(); } + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 396. what are characters zero and one. + template<class _CharT, class _Traits> + std::basic_string<_CharT, _Traits, std::allocator<_CharT> > + to_string(_CharT __zero, _CharT __one = _CharT('1')) const + { return to_string<_CharT, _Traits, + std::allocator<_CharT> >(__zero, __one); } + template<typename _CharT> std::basic_string<_CharT, std::char_traits<_CharT>, std::allocator<_CharT> > @@ -266,11 +296,27 @@ namespace __debug std::allocator<_CharT> >(); } + template<class _CharT> + std::basic_string<_CharT, std::char_traits<_CharT>, + std::allocator<_CharT> > + to_string(_CharT __zero, _CharT __one = _CharT('1')) const + { + return to_string<_CharT, std::char_traits<_CharT>, + std::allocator<_CharT> >(__zero, __one); + } + std::basic_string<char, std::char_traits<char>, std::allocator<char> > - to_string() const - { - return to_string<char,std::char_traits<char>,std::allocator<char> >(); - } + to_string() const + { + return to_string<char,std::char_traits<char>,std::allocator<char> >(); + } + + std::basic_string<char, std::char_traits<char>, std::allocator<char> > + to_string(char __zero, char __one = '1') const + { + return to_string<char, std::char_traits<char>, + std::allocator<char> >(__zero, __one); + } using _Base::count; using _Base::size; diff --git a/libstdc++-v3/include/std/bitset b/libstdc++-v3/include/std/bitset index 50015db..9a1ba8d 100644 --- a/libstdc++-v3/include/std/bitset +++ b/libstdc++-v3/include/std/bitset @@ -764,7 +764,8 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) __throw_out_of_range(__N("bitset::bitset initial position " "not valid")); _M_copy_from_string(__s, __position, - std::basic_string<_CharT, _Traits, _Alloc>::npos); + std::basic_string<_CharT, _Traits, _Alloc>::npos, + _CharT('0'), _CharT('1')); } /** @@ -784,15 +785,33 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) if (__position > __s.size()) __throw_out_of_range(__N("bitset::bitset initial position " "not valid")); - _M_copy_from_string(__s, __position, __n); + _M_copy_from_string(__s, __position, __n, _CharT('0'), _CharT('1')); + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 396. what are characters zero and one. + template<class _CharT, class _Traits, class _Alloc> + bitset(const std::basic_string<_CharT, _Traits, _Alloc>& __s, + size_t __position, size_t __n, + _CharT __zero, _CharT __one = _CharT('1')) + : _Base() + { + if (__position > __s.size()) + __throw_out_of_range(__N("bitset::bitset initial position " + "not valid")); + _M_copy_from_string(__s, __position, __n, __zero, __one); } // _GLIBCXX_RESOLVE_LIB_DEFECTS // 778. std::bitset does not have any constructor taking a string literal explicit - bitset(const char* __s) + bitset(const char* __s, char __zero = '0', char __one = '1') : _Base() - { _M_copy_from_ptr(__s, char_traits<char>::length(__s), 0, size_t(-1)); } + { + _M_copy_from_ptr<char, char_traits<char> >(__s, + char_traits<char>::length(__s), 0, size_t(-1), + __zero, __one); + } // 23.3.5.2 bitset operations: //@{ @@ -1028,7 +1047,18 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) to_string() const { std::basic_string<_CharT, _Traits, _Alloc> __result; - _M_copy_to_string(__result); + _M_copy_to_string(__result, _CharT('0'), _CharT('1')); + return __result; + } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 396. what are characters zero and one. + template<class _CharT, class _Traits, class _Alloc> + std::basic_string<_CharT, _Traits, _Alloc> + to_string(_CharT __zero, _CharT __one = _CharT('1')) const + { + std::basic_string<_CharT, _Traits, _Alloc> __result; + _M_copy_to_string(__result, __zero, __one); return __result; } @@ -1039,6 +1069,14 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) to_string() const { return to_string<_CharT, _Traits, std::allocator<_CharT> >(); } + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 396. what are characters zero and one. + template<class _CharT, class _Traits> + std::basic_string<_CharT, _Traits, std::allocator<_CharT> > + to_string(_CharT __zero, _CharT __one = _CharT('1')) const + { return to_string<_CharT, _Traits, + std::allocator<_CharT> >(__zero, __one); } + template<class _CharT> std::basic_string<_CharT, std::char_traits<_CharT>, std::allocator<_CharT> > @@ -1048,6 +1086,15 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) std::allocator<_CharT> >(); } + template<class _CharT> + std::basic_string<_CharT, std::char_traits<_CharT>, + std::allocator<_CharT> > + to_string(_CharT __zero, _CharT __one = _CharT('1')) const + { + return to_string<_CharT, std::char_traits<_CharT>, + std::allocator<_CharT> >(__zero, __one); + } + std::basic_string<char, std::char_traits<char>, std::allocator<char> > to_string() const { @@ -1055,20 +1102,43 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) std::allocator<char> >(); } + std::basic_string<char, std::char_traits<char>, std::allocator<char> > + to_string(char __zero, char __one = '1') const + { + return to_string<char, std::char_traits<char>, + std::allocator<char> >(__zero, __one); + } + // Helper functions for string operations. - template<class _CharT> + template<class _CharT, class _Traits> void - _M_copy_from_ptr(const _CharT*, size_t, size_t, size_t); + _M_copy_from_ptr(const _CharT*, size_t, size_t, size_t, + _CharT, _CharT); + + template<class _CharT, class _Traits, class _Alloc> + void + _M_copy_from_string(const std::basic_string<_CharT, + _Traits, _Alloc>& __s, size_t __pos, size_t __n, + _CharT __zero, _CharT __one) + { _M_copy_from_ptr<_CharT, _Traits>(__s.data(), __s.size(), __pos, __n, + __zero, __one); } + + template<class _CharT, class _Traits, class _Alloc> + void + _M_copy_to_string(std::basic_string<_CharT, _Traits, _Alloc>&, + _CharT, _CharT) const; + // NB: Backward compat. template<class _CharT, class _Traits, class _Alloc> void _M_copy_from_string(const std::basic_string<_CharT, _Traits, _Alloc>& __s, size_t __pos, size_t __n) - { _M_copy_from_ptr(__s.data(), __s.size(), __pos, __n); } + { _M_copy_from_string(__s, __pos, __n, _CharT('0'), _CharT('1')); } template<class _CharT, class _Traits, class _Alloc> void - _M_copy_to_string(std::basic_string<_CharT, _Traits, _Alloc>&) const; + _M_copy_to_string(std::basic_string<_CharT, _Traits,_Alloc>& __s) const + { _M_copy_to_string(__s, _CharT('0'), _CharT('1')); } /// Returns the number of bits which are set. size_t @@ -1166,26 +1236,23 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) // Definitions of non-inline member functions. template<size_t _Nb> - template<class _CharT> + template<class _CharT, class _Traits> void bitset<_Nb>:: _M_copy_from_ptr(const _CharT* __s, size_t __len, - size_t __pos, size_t __n) + size_t __pos, size_t __n, _CharT __zero, _CharT __one) { reset(); const size_t __nbits = std::min(_Nb, std::min(__n, __len - __pos)); for (size_t __i = __nbits; __i > 0; --__i) { - switch(__s[__pos + __nbits - __i]) - { - case '0': - break; - case '1': - _Unchecked_set(__i - 1); - break; - default: - __throw_invalid_argument(__N("bitset::_M_copy_from_ptr")); - } + const _CharT __c = __s[__pos + __nbits - __i]; + if (_Traits::eq(__c, __zero)) + ; + else if (_Traits::eq(__c, __one)) + _Unchecked_set(__i - 1); + else + __throw_invalid_argument(__N("bitset::_M_copy_from_ptr")); } } @@ -1193,12 +1260,13 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) template<class _CharT, class _Traits, class _Alloc> void bitset<_Nb>:: - _M_copy_to_string(std::basic_string<_CharT, _Traits, _Alloc>& __s) const + _M_copy_to_string(std::basic_string<_CharT, _Traits, _Alloc>& __s, + _CharT __zero, _CharT __one) const { - __s.assign(_Nb, '0'); + __s.assign(_Nb, __zero); for (size_t __i = _Nb; __i > 0; --__i) if (_Unchecked_test(__i - 1)) - __s[_Nb - __i] = '1'; + _Traits::assign(__s[_Nb - __i], __one); } // 23.3.5.3 bitset operations: @@ -1259,16 +1327,17 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) std::basic_string<_CharT, _Traits> __tmp; __tmp.reserve(_Nb); + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 303. Bitset input operator underspecified + const char_type __zero = __is.widen('0'); + const char_type __one = __is.widen('1'); + typename __ios_base::iostate __state = __ios_base::goodbit; typename __istream_type::sentry __sentry(__is); if (__sentry) { try { - // _GLIBCXX_RESOLVE_LIB_DEFECTS - // 303. Bitset input operator underspecified - const char_type __zero = __is.widen('0'); - const char_type __one = __is.widen('1'); for (size_t __i = _Nb; __i > 0; --__i) { static typename _Traits::int_type __eof = _Traits::eof(); @@ -1282,10 +1351,10 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) else { const char_type __c2 = _Traits::to_char_type(__c1); - if (__c2 == __zero) - __tmp.push_back('0'); - else if (__c2 == __one) - __tmp.push_back('1'); + if (_Traits::eq(__c2, __zero)) + __tmp.push_back(__zero); + else if (_Traits::eq(__c2, __one)) + __tmp.push_back(__one); else if (_Traits:: eq_int_type(__is.rdbuf()->sputbackc(__c2), __eof)) @@ -1308,7 +1377,8 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) if (__tmp.empty() && _Nb) __state |= __ios_base::failbit; else - __x._M_copy_from_string(__tmp, static_cast<size_t>(0), _Nb); + __x._M_copy_from_string(__tmp, static_cast<size_t>(0), _Nb, + __zero, __one); if (__state) __is.setstate(__state); return __is; @@ -1320,7 +1390,11 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) const bitset<_Nb>& __x) { std::basic_string<_CharT, _Traits> __tmp; - __x._M_copy_to_string(__tmp); + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 396. what are characters zero and one. + const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__os.getloc()); + __x._M_copy_to_string(__tmp, __ct.widen('0'), __ct.widen('1')); return __os << __tmp; } //@} diff --git a/libstdc++-v3/testsuite/23_containers/bitset/cons/dr396.cc b/libstdc++-v3/testsuite/23_containers/bitset/cons/dr396.cc new file mode 100644 index 0000000..3c8a576 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/bitset/cons/dr396.cc @@ -0,0 +1,64 @@ +// 2009-09-23 Paolo Carlini <paolo.carlini@oracle.com> + +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +// USA. + +#include <bitset> +#include <testsuite_hooks.h> + +// DR 396. what are characters zero and one. +void test01() +{ + bool test __attribute__((unused)) = true; + + std::bitset<4> z1("bbab", 'a', 'b'); + std::bitset<4> z1_ref(std::string("bbab"), 0, std::string::npos, 'a', 'b'); + VERIFY( z1.to_string('a', 'b') == "bbab" ); + VERIFY( z1 == z1_ref ); + + std::bitset<4> z2("11a1", 'a'); + std::bitset<4> z2_ref(std::string("11a1"), 0, std::string::npos, 'a'); + VERIFY( z2.to_string('a') == "11a1" ); + VERIFY( z2 == z2_ref ); + + std::bitset<8> z3("babb", 'a', 'b'); + std::bitset<8> z3_ref(std::string("babb"), 0, std::string::npos, 'a', 'b'); + VERIFY( z3.to_string('a', 'b') == "aaaababb" ); + VERIFY( z3 == z3_ref ); + + std::bitset<8> z4("1a11", 'a'); + std::bitset<8> z4_ref(std::string("1a11"), 0, std::string::npos, 'a'); + VERIFY( z4.to_string('a') == "aaaa1a11" ); + VERIFY( z4 == z4_ref ); + + std::bitset<2> z5("bbab", 'a', 'b'); + std::bitset<2> z5_ref(std::string("bbab"), 0, std::string::npos, 'a', 'b'); + VERIFY( z5.to_string('a', 'b') == "bb" ); + VERIFY( z5 == z5_ref ); + + std::bitset<2> z6("11a1", 'a'); + std::bitset<2> z6_ref(std::string("11a1"), 0, std::string::npos, 'a'); + VERIFY( z6.to_string('a') == "11" ); + VERIFY( z6 == z6_ref ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/bitset/to_string/dr396.cc b/libstdc++-v3/testsuite/23_containers/bitset/to_string/dr396.cc new file mode 100644 index 0000000..ac31df1 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/bitset/to_string/dr396.cc @@ -0,0 +1,65 @@ +// 2008-09-23 Paolo Carlini <pcarlini@suse.de> + +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +// USA. + +// 23.3.5.2 bitset members + +#include <bitset> +#include <testsuite_hooks.h> + +// DR 396. what are characters zero and one. +void test01() +{ + using namespace std; + bool test __attribute__((unused)) = true; + + bitset<5> b5; + string s0 = b5.to_string<char, char_traits<char>, allocator<char> >('a', 'b'); + VERIFY( s0 == "aaaaa" ); + + string s1 = b5.to_string<char, char_traits<char>, allocator<char> >('b'); + VERIFY( s1 == "bbbbb" ); + + b5.set(0); + string s2 = b5.to_string<char, char_traits<char> >('c', 'd'); + VERIFY( s2 == "ccccd" ); + + string s3 = b5.to_string<char, char_traits<char> >('d'); + VERIFY( s3 == "dddd1" ); + + b5.set(2); + string s4 = b5.to_string<char>('e', 'f'); + VERIFY( s4 == "eefef" ); + + string s5 = b5.to_string<char>('f'); + VERIFY( s5 == "ff1f1" ); + + b5.set(4); + string s6 = b5.to_string('g', 'h'); + VERIFY( s6 == "hghgh" ); + + string s7 = b5.to_string('h'); + VERIFY( s7 == "1h1h1" ); +} + +int main() +{ + test01(); + return 0; +} |