| #include <bitset> |
| #include <algorithm> |
| #if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS) |
| # include <sstream> |
| #endif |
| |
| #include "cppunit/cppunit_proxy.h" |
| |
| #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) |
| using namespace std; |
| #endif |
| |
| // |
| // TestCase class |
| // |
| class BitsetTest : public CPPUNIT_NS::TestCase |
| { |
| CPPUNIT_TEST_SUITE(BitsetTest); |
| CPPUNIT_TEST(bitset1); |
| #if defined (STLPORT) && defined (_STLP_USE_NO_IOSTREAMS) |
| CPPUNIT_IGNORE; |
| #endif |
| CPPUNIT_TEST(iostream); |
| CPPUNIT_TEST_SUITE_END(); |
| |
| protected: |
| void bitset1(); |
| void iostream(); |
| }; |
| |
| CPPUNIT_TEST_SUITE_REGISTRATION(BitsetTest); |
| |
| // |
| // tests implementation |
| // |
| void BitsetTest::bitset1() |
| { |
| bitset<13U> b1(0xFFFF); |
| bitset<13U> b2(0x1111); |
| CPPUNIT_ASSERT(b1.size() == 13); |
| CPPUNIT_ASSERT(b1 == 0x1FFF); |
| CPPUNIT_ASSERT(b2.size() == 13); |
| CPPUNIT_ASSERT(b2 == 0x1111); |
| |
| #if !defined (STLPORT) || !defined (_STLP_NON_TYPE_TMPL_PARAM_BUG) |
| b1 = b1 ^ (b2 << 2); |
| CPPUNIT_ASSERT(b1 == 0x1BBB); |
| |
| CPPUNIT_ASSERT(b1.count() == 10); |
| CPPUNIT_ASSERT(b2.count() == 4); |
| |
| # if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) |
| size_t __pos = b2._Find_first(); |
| CPPUNIT_ASSERT( __pos == 0 ); |
| __pos = b2._Find_next(__pos); |
| CPPUNIT_ASSERT( __pos == 4 ); |
| __pos = b2._Find_next(__pos); |
| CPPUNIT_ASSERT( __pos == 8 ); |
| __pos = b2._Find_next(__pos); |
| CPPUNIT_ASSERT( __pos == 12 ); |
| __pos = b2._Find_next(__pos); |
| CPPUNIT_ASSERT( __pos == 13 ); |
| # endif |
| #endif |
| |
| #if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES) && !defined (_STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS) |
| string representation = b2.to_string<char, char_traits<char>, allocator<char> >(); |
| CPPUNIT_ASSERT( representation == "1000100010001" ); |
| # if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T) |
| wstring wrepresentation = b2.to_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >(); |
| CPPUNIT_ASSERT( wrepresentation == L"1000100010001" ); |
| # endif |
| #else |
| CPPUNIT_ASSERT( b2.to_string() == "1000100010001" ); |
| #endif |
| } |
| |
| void BitsetTest::iostream() |
| { |
| #if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS) |
| { |
| stringstream sstr; |
| bitset<13U> b(0x1111); |
| sstr << b; |
| CPPUNIT_ASSERT( sstr.str() == "1000100010001" ); |
| |
| bitset<13U> b1; |
| sstr >> b1; |
| CPPUNIT_ASSERT( b1.test(0) ); |
| CPPUNIT_ASSERT( b1.test(4) ); |
| CPPUNIT_ASSERT( b1.test(8) ); |
| CPPUNIT_ASSERT( b1.test(12) ); |
| } |
| # if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T) |
| { |
| wstringstream sstr; |
| bitset<13U> b(0x1111); |
| sstr << b; |
| CPPUNIT_ASSERT( sstr.str() == L"1000100010001" ); |
| |
| bitset<13U> b1; |
| sstr >> b1; |
| CPPUNIT_ASSERT( b1.test(0) ); |
| CPPUNIT_ASSERT( b1.test(4) ); |
| CPPUNIT_ASSERT( b1.test(8) ); |
| CPPUNIT_ASSERT( b1.test(12) ); |
| } |
| # endif |
| #endif |
| } |