1413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom/*
2413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom * Copyright (C) 2013 The Android Open Source Project
3413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom *
4413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom * Licensed under the Apache License, Version 2.0 (the "License");
5413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom * you may not use this file except in compliance with the License.
6413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom * You may obtain a copy of the License at
7413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom *
8413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom *      http://www.apache.org/licenses/LICENSE-2.0
9413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom *
10413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom * Unless required by applicable law or agreed to in writing, software
11413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom * distributed under the License is distributed on an "AS IS" BASIS,
12413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom * See the License for the specific language governing permissions and
14413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom * limitations under the License.
15413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom */
16413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
17700a402244a1a423da4f3ba8032459f4b65fa18fIan Rogers#include <memory>
18700a402244a1a423da4f3ba8032459f4b65fa18fIan Rogers
19e77493c7217efdd1a0ecef521a6845a13da0305bIan Rogers#include "allocator.h"
20e77493c7217efdd1a0ecef521a6845a13da0305bIan Rogers#include "bit_vector-inl.h"
21ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom#include "gtest/gtest.h"
22413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
23413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstromnamespace art {
24413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
25413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian CarlstromTEST(BitVector, Test) {
26413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  const size_t kBits = 32;
27413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
28413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  BitVector bv(kBits, false, Allocator::GetMallocAllocator());
29413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_EQ(1U, bv.GetStorageSize());
30ef7d42fca18c16fbaf103822ad16f23246e2905dIan Rogers  EXPECT_EQ(sizeof(uint32_t), bv.GetSizeOf());
31413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_FALSE(bv.IsExpandable());
32413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
33ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom  EXPECT_EQ(0U, bv.NumSetBits());
34d3c5bebcb52a67cb06e7ab303eaf45f230c08b60Vladimir Marko  EXPECT_EQ(0U, bv.NumSetBits(1));
35d3c5bebcb52a67cb06e7ab303eaf45f230c08b60Vladimir Marko  EXPECT_EQ(0U, bv.NumSetBits(kBits));
36413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  for (size_t i = 0; i < kBits; i++) {
37413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom    EXPECT_FALSE(bv.IsBitSet(i));
38413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  }
39413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_EQ(0U, bv.GetRawStorageWord(0));
40413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_EQ(0U, *bv.GetRawStorage());
41413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
42a5b8fde2d2bc3167078694fad417fddfe442a6fdVladimir Marko  EXPECT_TRUE(bv.Indexes().begin().Done());
43a5b8fde2d2bc3167078694fad417fddfe442a6fdVladimir Marko  EXPECT_TRUE(bv.Indexes().begin() == bv.Indexes().end());
44413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
45413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  bv.SetBit(0);
46413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  bv.SetBit(kBits - 1);
47ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom  EXPECT_EQ(2U, bv.NumSetBits());
48d3c5bebcb52a67cb06e7ab303eaf45f230c08b60Vladimir Marko  EXPECT_EQ(1U, bv.NumSetBits(1));
49d3c5bebcb52a67cb06e7ab303eaf45f230c08b60Vladimir Marko  EXPECT_EQ(2U, bv.NumSetBits(kBits));
50413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_TRUE(bv.IsBitSet(0));
51413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  for (size_t i = 1; i < kBits - 1; i++) {
52413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom    EXPECT_FALSE(bv.IsBitSet(i));
53413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  }
54413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_TRUE(bv.IsBitSet(kBits - 1));
55413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_EQ(0x80000001U, bv.GetRawStorageWord(0));
56413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_EQ(0x80000001U, *bv.GetRawStorage());
57413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
58a5b8fde2d2bc3167078694fad417fddfe442a6fdVladimir Marko  BitVector::IndexIterator iterator = bv.Indexes().begin();
59a5b8fde2d2bc3167078694fad417fddfe442a6fdVladimir Marko  EXPECT_TRUE(iterator != bv.Indexes().end());
60040719630f33019693b5c4d9b573311b2f935c39Vladimir Marko  EXPECT_EQ(0u, *iterator);
61a5b8fde2d2bc3167078694fad417fddfe442a6fdVladimir Marko  ++iterator;
62a5b8fde2d2bc3167078694fad417fddfe442a6fdVladimir Marko  EXPECT_TRUE(iterator != bv.Indexes().end());
63040719630f33019693b5c4d9b573311b2f935c39Vladimir Marko  EXPECT_EQ(kBits - 1u, *iterator);
64a5b8fde2d2bc3167078694fad417fddfe442a6fdVladimir Marko  ++iterator;
65a5b8fde2d2bc3167078694fad417fddfe442a6fdVladimir Marko  EXPECT_TRUE(iterator == bv.Indexes().end());
66413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom}
67413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
68413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian CarlstromTEST(BitVector, NoopAllocator) {
69413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  const uint32_t kWords = 2;
70413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
71413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  uint32_t bits[kWords];
72413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  memset(bits, 0, sizeof(bits));
73413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
74f695a009725c8c840d916d01c14998f5c5f816d2Andreas Gampe  BitVector bv(false, Allocator::GetNoopAllocator(), kWords, bits);
75413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_EQ(kWords, bv.GetStorageSize());
76ef7d42fca18c16fbaf103822ad16f23246e2905dIan Rogers  EXPECT_EQ(kWords * sizeof(uint32_t), bv.GetSizeOf());
77413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_EQ(bits, bv.GetRawStorage());
78ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom  EXPECT_EQ(0U, bv.NumSetBits());
79413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
80413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  bv.SetBit(8);
81ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom  EXPECT_EQ(1U, bv.NumSetBits());
82413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_EQ(0x00000100U, bv.GetRawStorageWord(0));
83413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_EQ(0x00000000U, bv.GetRawStorageWord(1));
84ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom  EXPECT_EQ(1U, bv.NumSetBits());
85413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
86413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  bv.SetBit(16);
87ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom  EXPECT_EQ(2U, bv.NumSetBits());
88413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_EQ(0x00010100U, bv.GetRawStorageWord(0));
89413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_EQ(0x00000000U, bv.GetRawStorageWord(1));
90ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom  EXPECT_EQ(2U, bv.NumSetBits());
91413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
92413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  bv.SetBit(32);
93ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom  EXPECT_EQ(3U, bv.NumSetBits());
94413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_EQ(0x00010100U, bv.GetRawStorageWord(0));
95413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_EQ(0x00000001U, bv.GetRawStorageWord(1));
96ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom  EXPECT_EQ(3U, bv.NumSetBits());
97413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
98413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  bv.SetBit(48);
99ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom  EXPECT_EQ(4U, bv.NumSetBits());
100413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_EQ(0x00010100U, bv.GetRawStorageWord(0));
101413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom  EXPECT_EQ(0x00010001U, bv.GetRawStorageWord(1));
102ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom  EXPECT_EQ(4U, bv.NumSetBits());
103ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom
104d3c5bebcb52a67cb06e7ab303eaf45f230c08b60Vladimir Marko  EXPECT_EQ(0U, bv.NumSetBits(1));
105ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom
106d3c5bebcb52a67cb06e7ab303eaf45f230c08b60Vladimir Marko  EXPECT_EQ(0U, bv.NumSetBits(8));
107ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom  EXPECT_EQ(1U, bv.NumSetBits(9));
108d3c5bebcb52a67cb06e7ab303eaf45f230c08b60Vladimir Marko  EXPECT_EQ(1U, bv.NumSetBits(10));
109ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom
110d3c5bebcb52a67cb06e7ab303eaf45f230c08b60Vladimir Marko  EXPECT_EQ(1U, bv.NumSetBits(16));
111ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom  EXPECT_EQ(2U, bv.NumSetBits(17));
112d3c5bebcb52a67cb06e7ab303eaf45f230c08b60Vladimir Marko  EXPECT_EQ(2U, bv.NumSetBits(18));
113ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom
114d3c5bebcb52a67cb06e7ab303eaf45f230c08b60Vladimir Marko  EXPECT_EQ(2U, bv.NumSetBits(32));
115ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom  EXPECT_EQ(3U, bv.NumSetBits(33));
116d3c5bebcb52a67cb06e7ab303eaf45f230c08b60Vladimir Marko  EXPECT_EQ(3U, bv.NumSetBits(34));
117ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom
118d3c5bebcb52a67cb06e7ab303eaf45f230c08b60Vladimir Marko  EXPECT_EQ(3U, bv.NumSetBits(48));
119ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom  EXPECT_EQ(4U, bv.NumSetBits(49));
120d3c5bebcb52a67cb06e7ab303eaf45f230c08b60Vladimir Marko  EXPECT_EQ(4U, bv.NumSetBits(50));
121ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom
122d3c5bebcb52a67cb06e7ab303eaf45f230c08b60Vladimir Marko  EXPECT_EQ(4U, bv.NumSetBits(64));
123413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom}
124413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom
1254812d436ebf538043a7827253b2e940a52a43fcbVladimir MarkoTEST(BitVector, SetInitialBits) {
1264812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko  const uint32_t kWords = 2;
1274812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko
1284812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko  uint32_t bits[kWords];
1294812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko  memset(bits, 0, sizeof(bits));
1304812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko
131f695a009725c8c840d916d01c14998f5c5f816d2Andreas Gampe  BitVector bv(false, Allocator::GetNoopAllocator(), kWords, bits);
1324812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko  bv.SetInitialBits(0u);
1334812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko  EXPECT_EQ(0u, bv.NumSetBits());
1344812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko  bv.SetInitialBits(1u);
1354812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko  EXPECT_EQ(1u, bv.NumSetBits());
1364812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko  bv.SetInitialBits(32u);
1374812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko  EXPECT_EQ(32u, bv.NumSetBits());
1384812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko  bv.SetInitialBits(63u);
1394812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko  EXPECT_EQ(63u, bv.NumSetBits());
1404812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko  bv.SetInitialBits(64u);
1414812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko  EXPECT_EQ(64u, bv.NumSetBits());
1424812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko}
1434812d436ebf538043a7827253b2e940a52a43fcbVladimir Marko
144b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas GeoffrayTEST(BitVector, UnionIfNotIn) {
145b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray  {
146b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    BitVector first(2, true, Allocator::GetMallocAllocator());
147b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    BitVector second(5, true, Allocator::GetMallocAllocator());
148b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    BitVector third(5, true, Allocator::GetMallocAllocator());
149b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray
150b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    second.SetBit(64);
151b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    third.SetBit(64);
152b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    bool changed = first.UnionIfNotIn(&second, &third);
153b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    EXPECT_EQ(0u, first.NumSetBits());
154b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    EXPECT_FALSE(changed);
155b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray  }
156b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray
157b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray  {
158b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    BitVector first(2, true, Allocator::GetMallocAllocator());
159b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    BitVector second(5, true, Allocator::GetMallocAllocator());
160b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    BitVector third(5, true, Allocator::GetMallocAllocator());
161b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray
162b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    second.SetBit(64);
163b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    bool changed = first.UnionIfNotIn(&second, &third);
164b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    EXPECT_EQ(1u, first.NumSetBits());
165b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    EXPECT_TRUE(changed);
166b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray    EXPECT_TRUE(first.IsBitSet(64));
167b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray  }
168b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray}
169b556761d14e8dd0d41f1cc0f7d19726fe3497e8fNicolas Geoffray
1707d275379bf490a87805852129e3fe2e8afe961e7David BrazdilTEST(BitVector, Subset) {
1717d275379bf490a87805852129e3fe2e8afe961e7David Brazdil  {
1727d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    BitVector first(2, true, Allocator::GetMallocAllocator());
1737d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    BitVector second(5, true, Allocator::GetMallocAllocator());
1747d275379bf490a87805852129e3fe2e8afe961e7David Brazdil
1757d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    EXPECT_TRUE(first.IsSubsetOf(&second));
1767d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    second.SetBit(4);
1777d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    EXPECT_TRUE(first.IsSubsetOf(&second));
1787d275379bf490a87805852129e3fe2e8afe961e7David Brazdil  }
1797d275379bf490a87805852129e3fe2e8afe961e7David Brazdil
1807d275379bf490a87805852129e3fe2e8afe961e7David Brazdil  {
1817d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    BitVector first(5, true, Allocator::GetMallocAllocator());
1827d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    BitVector second(5, true, Allocator::GetMallocAllocator());
1837d275379bf490a87805852129e3fe2e8afe961e7David Brazdil
1847d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    first.SetBit(5);
1857d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    EXPECT_FALSE(first.IsSubsetOf(&second));
1867d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    second.SetBit(4);
1877d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    EXPECT_FALSE(first.IsSubsetOf(&second));
1887d275379bf490a87805852129e3fe2e8afe961e7David Brazdil  }
1897d275379bf490a87805852129e3fe2e8afe961e7David Brazdil
1907d275379bf490a87805852129e3fe2e8afe961e7David Brazdil  {
1917d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    BitVector first(5, true, Allocator::GetMallocAllocator());
1927d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    BitVector second(5, true, Allocator::GetMallocAllocator());
1937d275379bf490a87805852129e3fe2e8afe961e7David Brazdil
1947d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    first.SetBit(16);
1957d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    first.SetBit(32);
1967d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    first.SetBit(48);
1977d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    second.SetBit(16);
1987d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    second.SetBit(32);
1997d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    second.SetBit(48);
2007d275379bf490a87805852129e3fe2e8afe961e7David Brazdil
2017d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    EXPECT_TRUE(first.IsSubsetOf(&second));
2027d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    second.SetBit(8);
2037d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    EXPECT_TRUE(first.IsSubsetOf(&second));
2047d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    second.SetBit(40);
2057d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    EXPECT_TRUE(first.IsSubsetOf(&second));
2067d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    second.SetBit(52);
2077d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    EXPECT_TRUE(first.IsSubsetOf(&second));
2087d275379bf490a87805852129e3fe2e8afe961e7David Brazdil
2097d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    first.SetBit(9);
2107d275379bf490a87805852129e3fe2e8afe961e7David Brazdil    EXPECT_FALSE(first.IsSubsetOf(&second));
2117d275379bf490a87805852129e3fe2e8afe961e7David Brazdil  }
2127d275379bf490a87805852129e3fe2e8afe961e7David Brazdil}
2137d275379bf490a87805852129e3fe2e8afe961e7David Brazdil
214413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian Carlstrom}  // namespace art
215