// 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