示例#1
0
  void BitVector_Test::Test_bitVectorSetAndClearBits()
  {
    BitVector<256>* bits;
    bits = setup();

    assertUnchanged(0,7);
    bits->ClearBits(0,64);

    assertUnchanged(2,7);
    assert(bits->Read(0,32) == 0);
    assert(bits->Read(32,32) == 0);

    bits->SetBits(48,64);  // hits 1,2,3
    assert(bits->Read(0,32) == 0);
    assert(bits->Read(32,32) == 0x0000ffff);
    assert(bits->Read(64,32) == 0xffffffff);
    assert(bits->Read(96,32) == 0xffffdef0);

    bits = setup();
    bits->ClearBits(31,33);  // 0,1; unaligned start, aligned end

    assert(bits->Read(0,32) == 0x24681356);
    assert(bits->Read(32,32) == 0x0);
    assertUnchanged(2,7);

    bits = setup();
    bits->ClearBits(128,32+32+32+1);  // 4-7; aligned start, unaligned end

    assertUnchanged(0,3);
    assert(bits->Read(128,32) == 0x0);
    assert(bits->Read(160,32) == 0x0);
    assert(bits->Read(192,32) == 0x0);
    assert(bits->Read(224,32) == 0x7edbca09);

    bits = setup();
    bits->SetBits(128,32+32+32+32);  // 4-6; aligned start, aligned end

    assertUnchanged(0,3);
    assert(bits->Read(128,32) == 0xffffffff);
    assert(bits->Read(160,32) == 0xffffffff);
    assert(bits->Read(192,32) == 0xffffffff);
    assertUnchanged(7,7);

    bits = setup();
    bits->SetBits(100,48);        // 3-4; unaligned start, unaligned end, adjacent

    assertUnchanged(0,2);
    assert(bits->Read( 96,32) == 0x9fffffff);
    assert(bits->Read(128,32) == 0xfffffba9);
    assertUnchanged(5,7);

    bits = setup();
    bits->ClearBits(4,48); // 0-1; unaligned start&end, adjacent, first unit

    assert(bits->Read(  0,32) == 0x20000000);
    assert(bits->Read( 32,32) == 0x00000314);
    assertUnchanged(2,7);

    bits = setup();
    bits->ClearBits(192+16,32); // 6-7; unaligned start&end, adjacent, last unit

    assertUnchanged(0,5);
    assert(bits->Read(192,32) == 0x44330000);
    assert(bits->Read(224,32) == 0x0000ca09);

    bits = setup();
    bits->ClearBits(32+16,32*5); // 1-6; unaligned start&end, non-adjacent

    assertUnchanged(0,0);
    assert(bits->Read( 32,32) == 0x11120000);
    assert(bits->Read( 64,32) == 0x00000000);
    assert(bits->Read( 96,32) == 0x00000000);
    assert(bits->Read(128,32) == 0x00000000);
    assert(bits->Read(160,32) == 0x00000000);
    assert(bits->Read(192,32) == 0x00002211);
    assertUnchanged(7,7);

    bits = setup();
    bits->ClearBits(16,32*7); // 0-7; unaligned start&end, all units

    assert(bits->Read(  0,32) == 0x24680000);
    assert(bits->Read( 32,32) == 0x00000000);
    assert(bits->Read( 64,32) == 0x00000000);
    assert(bits->Read( 96,32) == 0x00000000);
    assert(bits->Read(128,32) == 0x00000000);
    assert(bits->Read(160,32) == 0x00000000);
    assert(bits->Read(192,32) == 0x00000000);
    assert(bits->Read(224,32) == 0x0000ca09);

    bits = setup();
    bits->ClearBits(0,32*8); // 0-7; all bits cleared

    for (u32 i = 0; i < 32*8; i += 32)
      assert(bits->Read(i,32) == 0x00000000);

    bits->SetBits(0,32*8); // 0-7; all bits set

    for (u32 i = 0; i < 32*8; i += 32)
      assert(bits->Read(i,32) == 0xffffffff);
  }