aboutsummaryrefslogtreecommitdiff
path: root/src/trace_processor/db/bit_vector_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/trace_processor/db/bit_vector_unittest.cc')
-rw-r--r--src/trace_processor/db/bit_vector_unittest.cc433
1 files changed, 0 insertions, 433 deletions
diff --git a/src/trace_processor/db/bit_vector_unittest.cc b/src/trace_processor/db/bit_vector_unittest.cc
deleted file mode 100644
index 7b5aad7d2..000000000
--- a/src/trace_processor/db/bit_vector_unittest.cc
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "src/trace_processor/db/bit_vector.h"
-
-#include <random>
-
-#include "src/trace_processor/db/bit_vector_iterators.h"
-#include "test/gtest_and_gmock.h"
-
-namespace perfetto {
-namespace trace_processor {
-namespace {
-
-TEST(BitVectorUnittest, CreateAllTrue) {
- BitVector bv(2049, true);
-
- // Ensure that a selection of interesting bits are set.
- ASSERT_TRUE(bv.IsSet(0));
- ASSERT_TRUE(bv.IsSet(1));
- ASSERT_TRUE(bv.IsSet(511));
- ASSERT_TRUE(bv.IsSet(512));
- ASSERT_TRUE(bv.IsSet(2047));
- ASSERT_TRUE(bv.IsSet(2048));
-}
-
-TEST(BitVectorUnittest, CreateAllFalse) {
- BitVector bv(2049, false);
-
- // Ensure that a selection of interesting bits are cleared.
- ASSERT_FALSE(bv.IsSet(0));
- ASSERT_FALSE(bv.IsSet(1));
- ASSERT_FALSE(bv.IsSet(511));
- ASSERT_FALSE(bv.IsSet(512));
- ASSERT_FALSE(bv.IsSet(2047));
- ASSERT_FALSE(bv.IsSet(2048));
-}
-
-TEST(BitVectorUnittest, Set) {
- BitVector bv(2049, false);
- bv.Set(0);
- bv.Set(1);
- bv.Set(511);
- bv.Set(512);
- bv.Set(2047);
-
- // Ensure the bits we touched are set.
- ASSERT_TRUE(bv.IsSet(0));
- ASSERT_TRUE(bv.IsSet(1));
- ASSERT_TRUE(bv.IsSet(511));
- ASSERT_TRUE(bv.IsSet(512));
- ASSERT_TRUE(bv.IsSet(2047));
-
- // Ensure that a selection of other interestinng bits are
- // still cleared.
- ASSERT_FALSE(bv.IsSet(2));
- ASSERT_FALSE(bv.IsSet(63));
- ASSERT_FALSE(bv.IsSet(64));
- ASSERT_FALSE(bv.IsSet(510));
- ASSERT_FALSE(bv.IsSet(513));
- ASSERT_FALSE(bv.IsSet(1023));
- ASSERT_FALSE(bv.IsSet(1024));
- ASSERT_FALSE(bv.IsSet(2046));
- ASSERT_FALSE(bv.IsSet(2048));
- ASSERT_FALSE(bv.IsSet(2048));
-}
-
-TEST(BitVectorUnittest, Clear) {
- BitVector bv(2049, true);
- bv.Clear(0);
- bv.Clear(1);
- bv.Clear(511);
- bv.Clear(512);
- bv.Clear(2047);
-
- // Ensure the bits we touched are cleared.
- ASSERT_FALSE(bv.IsSet(0));
- ASSERT_FALSE(bv.IsSet(1));
- ASSERT_FALSE(bv.IsSet(511));
- ASSERT_FALSE(bv.IsSet(512));
- ASSERT_FALSE(bv.IsSet(2047));
-
- // Ensure that a selection of other interestinng bits are
- // still set.
- ASSERT_TRUE(bv.IsSet(2));
- ASSERT_TRUE(bv.IsSet(63));
- ASSERT_TRUE(bv.IsSet(64));
- ASSERT_TRUE(bv.IsSet(510));
- ASSERT_TRUE(bv.IsSet(513));
- ASSERT_TRUE(bv.IsSet(1023));
- ASSERT_TRUE(bv.IsSet(1024));
- ASSERT_TRUE(bv.IsSet(2046));
- ASSERT_TRUE(bv.IsSet(2048));
-}
-
-TEST(BitVectorUnittest, AppendToEmpty) {
- BitVector bv;
- bv.AppendTrue();
- bv.AppendFalse();
-
- ASSERT_EQ(bv.size(), 2u);
- ASSERT_TRUE(bv.IsSet(0));
- ASSERT_FALSE(bv.IsSet(1));
-}
-
-TEST(BitVectorUnittest, AppendToExisting) {
- BitVector bv(2046, false);
- bv.AppendTrue();
- bv.AppendFalse();
- bv.AppendTrue();
- bv.AppendTrue();
-
- ASSERT_EQ(bv.size(), 2050u);
- ASSERT_TRUE(bv.IsSet(2046));
- ASSERT_FALSE(bv.IsSet(2047));
- ASSERT_TRUE(bv.IsSet(2048));
- ASSERT_TRUE(bv.IsSet(2049));
-}
-
-TEST(BitVectorUnittest, GetNumBitsSet) {
- BitVector bv(2049, false);
- bv.Set(0);
- bv.Set(1);
- bv.Set(511);
- bv.Set(512);
- bv.Set(2047);
- bv.Set(2048);
-
- ASSERT_EQ(bv.GetNumBitsSet(), 6u);
-
- ASSERT_EQ(bv.GetNumBitsSet(0), 0u);
- ASSERT_EQ(bv.GetNumBitsSet(1), 1u);
- ASSERT_EQ(bv.GetNumBitsSet(2), 2u);
- ASSERT_EQ(bv.GetNumBitsSet(3), 2u);
- ASSERT_EQ(bv.GetNumBitsSet(511), 2u);
- ASSERT_EQ(bv.GetNumBitsSet(512), 3u);
- ASSERT_EQ(bv.GetNumBitsSet(1023), 4u);
- ASSERT_EQ(bv.GetNumBitsSet(1024), 4u);
- ASSERT_EQ(bv.GetNumBitsSet(2047), 4u);
- ASSERT_EQ(bv.GetNumBitsSet(2048), 5u);
- ASSERT_EQ(bv.GetNumBitsSet(2049), 6u);
-}
-
-TEST(BitVectorUnittest, IndexOfNthSet) {
- BitVector bv(2050, false);
- bv.Set(0);
- bv.Set(1);
- bv.Set(511);
- bv.Set(512);
- bv.Set(2047);
- bv.Set(2048);
-
- ASSERT_EQ(bv.IndexOfNthSet(0), 0u);
- ASSERT_EQ(bv.IndexOfNthSet(1), 1u);
- ASSERT_EQ(bv.IndexOfNthSet(2), 511u);
- ASSERT_EQ(bv.IndexOfNthSet(3), 512u);
- ASSERT_EQ(bv.IndexOfNthSet(4), 2047u);
- ASSERT_EQ(bv.IndexOfNthSet(5), 2048u);
-}
-
-TEST(BitVectorUnittest, Resize) {
- BitVector bv(1, false);
-
- bv.Resize(2, true);
- ASSERT_EQ(bv.size(), 2u);
- ASSERT_EQ(bv.IsSet(1), true);
-
- bv.Resize(2049, false);
- ASSERT_EQ(bv.size(), 2049u);
- ASSERT_EQ(bv.IsSet(2), false);
- ASSERT_EQ(bv.IsSet(2047), false);
- ASSERT_EQ(bv.IsSet(2048), false);
-
- // Set these two bits; the first should be preserved and the
- // second should disappear.
- bv.Set(512);
- bv.Set(513);
-
- bv.Resize(513, false);
- ASSERT_EQ(bv.size(), 513u);
- ASSERT_EQ(bv.IsSet(1), true);
- ASSERT_EQ(bv.IsSet(512), true);
- ASSERT_EQ(bv.GetNumBitsSet(), 2u);
-
- // When we resize up, we need to be sure that the set bit from
- // before we resized down is not still present as a garbage bit.
- bv.Resize(514, false);
- ASSERT_EQ(bv.size(), 514u);
- ASSERT_EQ(bv.IsSet(513), false);
- ASSERT_EQ(bv.GetNumBitsSet(), 2u);
-}
-
-TEST(BitVectorUnittest, ResizeHasCorrectCount) {
- BitVector bv(1, false);
- ASSERT_EQ(bv.GetNumBitsSet(), 0u);
-
- bv.Resize(1024, true);
- ASSERT_EQ(bv.GetNumBitsSet(), 1023u);
-}
-
-TEST(BitVectorUnittest, AppendAfterResizeDown) {
- BitVector bv(2049, false);
- bv.Set(2048);
-
- bv.Resize(2048);
- bv.AppendFalse();
- ASSERT_EQ(bv.IsSet(2048), false);
- ASSERT_EQ(bv.GetNumBitsSet(), 0u);
-}
-
-TEST(BitVectorUnittest, UpdateSetBits) {
- BitVector bv(6, false);
- bv.Set(1);
- bv.Set(2);
- bv.Set(4);
-
- BitVector picker(3u, true);
- picker.Clear(1);
-
- bv.UpdateSetBits(picker);
-
- ASSERT_TRUE(bv.IsSet(1));
- ASSERT_FALSE(bv.IsSet(2));
- ASSERT_TRUE(bv.IsSet(4));
-}
-
-TEST(BitVectorUnittest, IterateAllBitsConst) {
- BitVector bv;
- for (uint32_t i = 0; i < 12345; ++i) {
- if (i % 7 == 0 || i % 13 == 0) {
- bv.AppendTrue();
- } else {
- bv.AppendFalse();
- }
- }
-
- uint32_t i = 0;
- for (auto it = bv.IterateAllBits(); it; it.Next(), ++i) {
- ASSERT_EQ(it.IsSet(), i % 7 == 0 || i % 13 == 0);
- ASSERT_EQ(it.index(), i);
- }
-}
-
-TEST(BitVectorUnittest, IterateAllBitsSet) {
- BitVector bv;
- for (uint32_t i = 0; i < 12345; ++i) {
- if (i % 7 == 0 || i % 13 == 0) {
- bv.AppendTrue();
- } else {
- bv.AppendFalse();
- }
- }
-
- // Unset every 15th bit.
- for (auto it = bv.IterateAllBits(); it; it.Next()) {
- if (it.index() % 15 == 0) {
- it.Set();
- }
- }
-
- // Go through the iterator manually and check it has updated
- // to not have every 15th bit set.
- uint32_t count = 0;
- for (uint32_t i = 0; i < 12345; ++i) {
- bool is_set = i % 15 == 0 || i % 7 == 0 || i % 13 == 0;
-
- ASSERT_EQ(bv.IsSet(i), is_set);
- ASSERT_EQ(bv.GetNumBitsSet(i), count);
-
- if (is_set) {
- ASSERT_EQ(bv.IndexOfNthSet(count++), i);
- }
- }
-}
-
-TEST(BitVectorUnittest, IterateAllBitsClear) {
- BitVector bv;
- for (uint32_t i = 0; i < 12345; ++i) {
- if (i % 7 == 0 || i % 13 == 0) {
- bv.AppendTrue();
- } else {
- bv.AppendFalse();
- }
- }
-
- // Unset every 15th bit.
- for (auto it = bv.IterateAllBits(); it; it.Next()) {
- if (it.index() % 15 == 0) {
- it.Clear();
- }
- }
-
- // Go through the iterator manually and check it has updated
- // to not have every 15th bit set.
- uint32_t count = 0;
- for (uint32_t i = 0; i < 12345; ++i) {
- bool is_set = i % 15 != 0 && (i % 7 == 0 || i % 13 == 0);
-
- ASSERT_EQ(bv.IsSet(i), is_set);
- ASSERT_EQ(bv.GetNumBitsSet(i), count);
-
- if (is_set) {
- ASSERT_EQ(bv.IndexOfNthSet(count++), i);
- }
- }
-}
-
-TEST(BitVectorUnittest, IterateSetBitsConst) {
- BitVector bv;
- std::vector<uint32_t> set_indices;
- for (uint32_t i = 0; i < 12345; ++i) {
- if (i % 7 == 0 || i % 13 == 0) {
- bv.AppendTrue();
- set_indices.emplace_back(i);
- } else {
- bv.AppendFalse();
- }
- }
-
- uint32_t i = 0;
- for (auto it = bv.IterateSetBits(); it; it.Next(), ++i) {
- ASSERT_EQ(it.IsSet(), true);
- ASSERT_EQ(it.index(), set_indices[i]);
- }
- ASSERT_EQ(i, set_indices.size());
-}
-
-TEST(BitVectorUnittest, IterateSetBitsClear) {
- BitVector bv;
- for (uint32_t i = 0; i < 12345; ++i) {
- if (i % 7 == 0 || i % 13 == 0) {
- bv.AppendTrue();
- } else {
- bv.AppendFalse();
- }
- }
-
- for (auto it = bv.IterateSetBits(); it; it.Next()) {
- if (it.index() % 15 == 0) {
- it.Clear();
- }
- }
-
- // Go through the iterator manually and check it has updated
- // to not have every 15th bit set.
- uint32_t count = 0;
- for (uint32_t i = 0; i < 12345; ++i) {
- bool is_set = i % 15 != 0 && (i % 7 == 0 || i % 13 == 0);
-
- ASSERT_EQ(bv.IsSet(i), is_set);
- ASSERT_EQ(bv.GetNumBitsSet(i), count);
-
- if (is_set) {
- ASSERT_EQ(bv.IndexOfNthSet(count++), i);
- }
- }
-}
-
-TEST(BitVectorUnittest, IterateSetBitsStartsCorrectly) {
- BitVector bv;
- bv.AppendFalse();
- bv.AppendTrue();
-
- auto it = bv.IterateSetBits();
- ASSERT_TRUE(it);
- ASSERT_EQ(it.index(), 1u);
- ASSERT_TRUE(it.IsSet());
-
- it.Next();
- ASSERT_FALSE(it);
-}
-
-TEST(BitVectorUnittest, QueryStressTest) {
- BitVector bv;
- std::vector<bool> bool_vec;
- std::vector<uint32_t> int_vec;
-
- static constexpr uint32_t kCount = 4096;
- std::minstd_rand0 rand;
- for (uint32_t i = 0; i < kCount; ++i) {
- bool res = rand() % 2u;
- if (res) {
- bv.AppendTrue();
- } else {
- bv.AppendFalse();
- }
- bool_vec.push_back(res);
- if (res)
- int_vec.emplace_back(i);
- }
-
- auto all_it = bv.IterateAllBits();
- for (uint32_t i = 0; i < kCount; ++i) {
- uint32_t count = static_cast<uint32_t>(std::count(
- bool_vec.begin(), bool_vec.begin() + static_cast<int32_t>(i), true));
- ASSERT_EQ(bv.IsSet(i), bool_vec[i]);
- ASSERT_EQ(bv.GetNumBitsSet(i), count);
-
- ASSERT_TRUE(all_it);
- ASSERT_EQ(all_it.IsSet(), bool_vec[i]);
- ASSERT_EQ(all_it.index(), i);
- all_it.Next();
- }
- ASSERT_FALSE(all_it);
-
- auto set_it = bv.IterateSetBits();
- for (uint32_t i = 0; i < int_vec.size(); ++i) {
- ASSERT_EQ(bv.IndexOfNthSet(i), int_vec[i]);
-
- ASSERT_TRUE(set_it);
- ASSERT_EQ(set_it.IsSet(), true);
- ASSERT_EQ(set_it.index(), int_vec[i]);
- set_it.Next();
- }
- ASSERT_FALSE(set_it);
-}
-
-} // namespace
-} // namespace trace_processor
-} // namespace perfetto