| // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| #include "vm/bit_vector.h" |
| #include "platform/assert.h" |
| #include "vm/unit_test.h" |
| |
| namespace dart { |
| |
| #define Z (thread->zone()) |
| |
| TEST_CASE(BitVector) { |
| { |
| BitVector* v = new BitVector(Z, 15); |
| v->Add(1); |
| EXPECT_EQ(true, v->Contains(1)); |
| EXPECT_EQ(false, v->Contains(0)); |
| { |
| BitVector::Iterator iter(v); |
| EXPECT_EQ(1, iter.Current()); |
| iter.Advance(); |
| EXPECT(iter.Done()); |
| } |
| v->Add(0); |
| v->Add(1); |
| EXPECT_EQ(true, v->Contains(0)); |
| EXPECT_EQ(true, v->Contains(1)); |
| { |
| BitVector::Iterator iter(v); |
| EXPECT_EQ(0, iter.Current()); |
| iter.Advance(); |
| EXPECT_EQ(1, iter.Current()); |
| iter.Advance(); |
| EXPECT(iter.Done()); |
| } |
| } |
| |
| { |
| BitVector* v = new BitVector(Z, 128); |
| v->Add(49); |
| v->Add(62); |
| v->Add(63); |
| v->Add(65); |
| EXPECT_EQ(true, v->Contains(49)); |
| EXPECT_EQ(true, v->Contains(62)); |
| EXPECT_EQ(true, v->Contains(63)); |
| EXPECT_EQ(true, v->Contains(65)); |
| EXPECT_EQ(false, v->Contains(64)); |
| BitVector::Iterator iter(v); |
| EXPECT_EQ(49, iter.Current()); |
| iter.Advance(); |
| EXPECT_EQ(62, iter.Current()); |
| iter.Advance(); |
| EXPECT_EQ(63, iter.Current()); |
| iter.Advance(); |
| EXPECT_EQ(65, iter.Current()); |
| iter.Advance(); |
| EXPECT(iter.Done()); |
| } |
| |
| { |
| BitVector* a = new BitVector(Z, 128); |
| BitVector* b = new BitVector(Z, 128); |
| BitVector* c = new BitVector(Z, 128); |
| b->Add(0); |
| b->Add(32); |
| b->Add(64); |
| a->AddAll(b); |
| EXPECT_EQ(true, a->Contains(0)); |
| EXPECT_EQ(true, a->Contains(32)); |
| EXPECT_EQ(true, a->Contains(64)); |
| EXPECT_EQ(false, a->Contains(96)); |
| EXPECT_EQ(false, a->Contains(127)); |
| b->Add(96); |
| b->Add(127); |
| c->Add(127); |
| a->KillAndAdd(c, b); |
| EXPECT_EQ(true, a->Contains(0)); |
| EXPECT_EQ(true, a->Contains(32)); |
| EXPECT_EQ(true, a->Contains(64)); |
| EXPECT_EQ(true, a->Contains(96)); |
| EXPECT_EQ(false, a->Contains(127)); |
| a->Remove(0); |
| a->Remove(32); |
| a->Remove(64); |
| a->Remove(96); |
| EXPECT_EQ(false, a->Contains(0)); |
| EXPECT_EQ(false, a->Contains(32)); |
| EXPECT_EQ(false, a->Contains(64)); |
| EXPECT_EQ(false, a->Contains(96)); |
| } |
| |
| { |
| BitVector* a = new BitVector(Z, 34); |
| BitVector* b = new BitVector(Z, 34); |
| a->SetAll(); |
| b->Add(0); |
| b->Add(1); |
| b->Add(31); |
| b->Add(32); |
| a->Intersect(b); |
| EXPECT_EQ(true, a->Equals(*b)); |
| } |
| |
| { |
| BitVector* a = new BitVector(Z, 2); |
| BitVector* b = new BitVector(Z, 2); |
| a->SetAll(); |
| a->Remove(0); |
| a->Remove(1); |
| EXPECT_EQ(true, a->Equals(*b)); |
| } |
| |
| { |
| BitVector* a = new BitVector(Z, 128); |
| BitVector* b = new BitVector(Z, 128); |
| b->Add(0); |
| b->Add(32); |
| b->Add(64); |
| a->Add(0); |
| a->Add(64); |
| b->RemoveAll(a); |
| EXPECT_EQ(false, b->Contains(0)); |
| EXPECT_EQ(true, b->Contains(32)); |
| EXPECT_EQ(false, b->Contains(64)); |
| } |
| } |
| |
| } // namespace dart |