os/ossrv/genericopenlibs/cppstdlib/stl/test/unit/bitset_test.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 //
    15 
    16 #include <e32std.h>
    17 #include <bitset>
    18 #include <algorithm>
    19 #include <sstream>
    20 #include <iostream>
    21 #include "cppunit/cppunit_proxy.h"
    22 
    23 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
    24 using namespace std;
    25 #endif
    26 
    27 //
    28 // TestCase class
    29 //
    30 class BitsetTest : public CPPUNIT_NS::TestCase
    31 {
    32   CPPUNIT_TEST_SUITE(BitsetTest);
    33   CPPUNIT_TEST(bitset1);
    34   CPPUNIT_TEST(iostream);
    35   CPPUNIT_TEST(bitset_cov1);
    36   CPPUNIT_TEST(bitset_cov2);
    37   CPPUNIT_TEST(bitset_cov3);
    38   CPPUNIT_TEST_SUITE_END();
    39 
    40 protected:
    41   void bitset1();
    42   void iostream();
    43   void bitset_cov1();
    44   void bitset_cov2();
    45   void bitset_cov3();
    46 };
    47 
    48 CPPUNIT_TEST_SUITE_REGISTRATION(BitsetTest);
    49 
    50 //
    51 // tests implementation
    52 //
    53 void BitsetTest::bitset1()
    54 {
    55   bitset<13U> b1(0xFFFF);
    56   bitset<13U> b2(0x1111);
    57   CPPUNIT_ASSERT(b1.size()==13);
    58   CPPUNIT_ASSERT(b1==0x1FFF);
    59   CPPUNIT_ASSERT(b2.size()==13);
    60   CPPUNIT_ASSERT(b2==0x1111);
    61 
    62   b1 = b1^(b2<<2);
    63   CPPUNIT_ASSERT(b1==0x1BBB);
    64 
    65   CPPUNIT_ASSERT(b1.count()==10);
    66   CPPUNIT_ASSERT(b2.count()==4);
    67 
    68 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
    69   size_t __pos = b2._Find_first();
    70   CPPUNIT_ASSERT( __pos == 0 );
    71   __pos = b2._Find_next(__pos);
    72   CPPUNIT_ASSERT( __pos == 4 );
    73   __pos = b2._Find_next(__pos);
    74   CPPUNIT_ASSERT( __pos == 8 );
    75   __pos = b2._Find_next(__pos);
    76   CPPUNIT_ASSERT( __pos == 12 );
    77   __pos = b2._Find_next(__pos);
    78   CPPUNIT_ASSERT( __pos == 13 );
    79 #endif
    80 
    81 #if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES) && !defined (_STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS)
    82   string representation = b2.to_string<char, char_traits<char>, allocator<char> >();
    83   CPPUNIT_ASSERT( representation == "1000100010001" );
    84 #  if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)
    85   wstring wrepresentation = b2.to_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >();
    86   CPPUNIT_ASSERT( wrepresentation == L"1000100010001" );
    87 #  endif
    88 #else
    89   CPPUNIT_ASSERT( b2.to_string() == "1000100010001" );
    90 #endif
    91 }
    92 
    93 void BitsetTest::iostream()
    94 {
    95   {
    96     stringstream sstr;
    97     bitset<13U> b(0x1111);
    98     sstr << b;
    99     CPPUNIT_ASSERT( sstr.str() == "1000100010001" );
   100 
   101     bitset<13U> b1;
   102     sstr >> b1;
   103     CPPUNIT_ASSERT( b1.test(0) );
   104     CPPUNIT_ASSERT( b1.test(4) );
   105     CPPUNIT_ASSERT( b1.test(8) );
   106     CPPUNIT_ASSERT( b1.test(12) );
   107   }
   108 #if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)
   109   {
   110     wstringstream sstr;
   111     bitset<13U> b(0x1111);
   112     sstr << b;
   113     CPPUNIT_ASSERT( sstr.str() == L"1000100010001" );
   114 
   115     bitset<13U> b1;
   116     sstr >> b1;
   117     CPPUNIT_ASSERT( b1.test(0) );
   118     CPPUNIT_ASSERT( b1.test(4) );
   119     CPPUNIT_ASSERT( b1.test(8) );
   120     CPPUNIT_ASSERT( b1.test(12) );
   121   }
   122 #endif
   123 }
   124 void BitsetTest::bitset_cov1()
   125 	{
   126 	__UHEAP_MARK;
   127 		{
   128 		bitset<5> b1 ( 6 );
   129 	    bitset<5> rb1;
   130 	    
   131 		CPPUNIT_ASSERT( b1.any() );
   132 		CPPUNIT_ASSERT( !b1.none() );
   133 		rb1 = b1.reset ( );
   134 	    CPPUNIT_ASSERT( !rb1.any() );
   135 	    CPPUNIT_ASSERT( rb1.none() );
   136 		}
   137 		{
   138 		bitset<5> b1 ( 7 );
   139 		unsigned long int i;
   140 		i = b1.to_ulong( );
   141 		CPPUNIT_ASSERT( i == 7 );
   142 		}
   143 		{
   144 		bitset<5> b1 ( 6 );
   145 		bitset<5> bs1;
   146 		bitset<5> b1s0;
   147 		unsigned long int i;
   148 		b1s0 = b1.set( 0 );
   149 		i = b1s0.to_ulong( );
   150 		CPPUNIT_ASSERT( i == 7 );
   151 
   152 		bs1 = b1.set( );
   153 		i = bs1.to_ulong( );
   154 		CPPUNIT_ASSERT( i == 31 );
   155 		}
   156 		{
   157 		bitset<5> b1 ( 6 );
   158 		bitset<5> fb1;
   159 		bitset<5> f3b1;
   160 		unsigned long int i;
   161 		
   162 		fb1 = b1.flip ( );
   163 		i = fb1.to_ulong( );
   164 		CPPUNIT_ASSERT( i == 25 );	
   165 		
   166 		f3b1 = b1.flip ( 3 );
   167 		i = f3b1.to_ulong( );
   168 		CPPUNIT_ASSERT( i == 17 );	
   169 		}
   170 		{
   171 		bitset<5> b1 ( 2 );
   172  	    bitset<5> b2 ( 6 );
   173  	    
   174  	    //x [i] = bool
   175  	    b1[ 0 ] = true;
   176  	    CPPUNIT_ASSERT( b1.to_ulong( ) == 3 );
   177  	    
   178  	    //x [i] = y [j]
   179  	    b2 [4] = b1 [0];
   180  	    CPPUNIT_ASSERT( b2.to_ulong( ) == 22 );
   181  	    
   182         //b = ~x [i]
   183  	    bool b = ~b2 [4];
   184  	    CPPUNIT_ASSERT( b == false );
   185 
   186  	    //b = x [i]
   187  	    b = b2 [4];
   188 	    CPPUNIT_ASSERT( b == true );
   189 
   190 	    //x [i] . flip ( )
   191 	    b2 [4].flip( );
   192 	    CPPUNIT_ASSERT( b2.to_ulong( ) == 6 );
   193 		}
   194 		__UHEAP_MARKEND;
   195 	}
   196 void BitsetTest::bitset_cov2()
   197 	{
   198 	__UHEAP_MARK;
   199 		{
   200 		bitset<5> b1 ( 7 );
   201 		bitset<5> b2;
   202 		unsigned long int i;
   203 		b2 = ~b1;
   204 		i = b2.to_ulong( );
   205 		CPPUNIT_ASSERT( i == 24 );
   206 		}
   207 		{
   208 		bitset<5> b1 ( 7 );
   209 		bitset<5> b2 ( 11 );
   210 		unsigned long int i;
   211 		b1 |= b2;
   212 		i = b1.to_ulong( );
   213 		CPPUNIT_ASSERT( i == 15 );
   214 		i = b2.to_ulong( );
   215 		CPPUNIT_ASSERT( i == 11 );
   216 		}
   217 		{
   218 		bool b;
   219 		bitset<2> b1 ( 2 );
   220 		bitset<2> b2;
   221 		b = b1[ 0 ];
   222 		CPPUNIT_ASSERT( b == 0 );
   223 		b = b1[ 1 ];
   224 		CPPUNIT_ASSERT( b == 1 );
   225 		b2[0] = b1[0];
   226 	    b2[1] = b1[1];
   227 	    CPPUNIT_ASSERT(b1 == b2);
   228 		}
   229 		{
   230 		bitset<5> b1 ( 28 );
   231 		b1 >>= 2;
   232 		CPPUNIT_ASSERT( b1.to_ulong( ) == 7 );
   233 		}
   234 		{
   235 		bitset<5> b1 ( 28 );
   236 		bitset<5> b3 = (b1 >> 1);
   237 		CPPUNIT_ASSERT( b3.to_ulong( ) == 14 );
   238 		}
   239 		{
   240 		bitset<5> b1 ( 7 );
   241 		bitset<5> b2 ( 11 );
   242 		b1 &= b2;
   243 		CPPUNIT_ASSERT( b1.to_ulong( ) == 3 );
   244 		CPPUNIT_ASSERT( b2.to_ulong( ) == 11 );
   245 		}
   246 		{
   247 		bitset<5> b1 ( 7 );
   248 		bitset<5> b2 ( 2 );
   249 		CPPUNIT_ASSERT( b1 != b2 );
   250 		}
   251 		__UHEAP_MARKEND;
   252 	}
   253 void BitsetTest::bitset_cov3()
   254 	{
   255 	__UHEAP_MARK;
   256 		{
   257 		bitset<5> b1 ( 13 );
   258 		bitset<5> b1r3;
   259 		b1r3 = b1.reset( 2 );
   260 		CPPUNIT_ASSERT( b1r3.to_ulong( ) == 9 );
   261 		}
   262 		{
   263 		string bitval1 ( "00011" );
   264 		bitset<5> b1 ( bitval1 );
   265 		CPPUNIT_ASSERT( b1.to_ulong( ) == 3 );
   266 		string bitval2 ("11110011011");
   267 		bitset<6> b2 ( bitval2, 3, 6 );
   268 		CPPUNIT_ASSERT( b2.to_ulong( ) == 38 );
   269 		bitset<9> b3 ( bitval2, 2 );
   270 		CPPUNIT_ASSERT( b3.to_ulong( ) == 411 );
   271 		}
   272 		{
   273 		bitset<5> b1 ( 7 );
   274 		bitset<5> b2 ( 11 );
   275 		unsigned long int i;
   276 		b1 = b1 | b2;
   277 		i = b1.to_ulong( );
   278 		CPPUNIT_ASSERT( i == 15 );
   279 		i = b2.to_ulong( );
   280 		CPPUNIT_ASSERT( i == 11 );
   281 		}
   282 		{
   283 		bitset<5> b1 ( 7 );
   284 		bitset<5> b2 ( 11 );
   285 		b1 = b1 & b2;
   286 		CPPUNIT_ASSERT( b1.to_ulong( ) == 3 );
   287 		CPPUNIT_ASSERT( b2.to_ulong( ) == 11 );
   288 		}	
   289 		__UHEAP_MARKEND;
   290 	}