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