123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // Copyright 2019 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "base/android/reached_addresses_bitset.h"
- #include <utility>
- #include "testing/gmock/include/gmock/gmock.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace base {
- namespace android {
- using testing::ElementsAre;
- using testing::ElementsAreArray;
- constexpr uintptr_t kStartAddress = 0x1000;
- constexpr uintptr_t kEndAddress = 0x2000;
- constexpr size_t kStorageSize = 512;
- class ReachedAddressesBitsetTest : public testing::Test {
- public:
- ReachedAddressesBitsetTest()
- : bitset_(kStartAddress, kEndAddress, storage_, kStorageSize) {
- memset(storage_, 0, kStorageSize * sizeof(uint32_t));
- EXPECT_TRUE(bitset()->GetReachedOffsets().empty());
- }
- ReachedAddressesBitset* bitset() { return &bitset_; }
- private:
- std::atomic<uint32_t> storage_[kStorageSize];
- ReachedAddressesBitset bitset_;
- };
- TEST_F(ReachedAddressesBitsetTest, RecordStartAddress) {
- bitset()->RecordAddress(kStartAddress);
- EXPECT_THAT(bitset()->GetReachedOffsets(), ElementsAre(0));
- }
- TEST_F(ReachedAddressesBitsetTest, RecordLastAddress) {
- bitset()->RecordAddress(kEndAddress - 4);
- EXPECT_THAT(bitset()->GetReachedOffsets(),
- ElementsAre(kEndAddress - 4 - kStartAddress));
- }
- TEST_F(ReachedAddressesBitsetTest, RecordAddressOutsideOfRange_Small) {
- bitset()->RecordAddress(kStartAddress - 4);
- EXPECT_THAT(bitset()->GetReachedOffsets(), ElementsAre());
- }
- TEST_F(ReachedAddressesBitsetTest, RecordAddressOutsideOfRange_Large) {
- bitset()->RecordAddress(kEndAddress);
- EXPECT_THAT(bitset()->GetReachedOffsets(), ElementsAre());
- }
- TEST_F(ReachedAddressesBitsetTest, RecordUnalignedAddresses) {
- constexpr uint32_t aligned_offset = 0x100;
- bitset()->RecordAddress(kStartAddress + aligned_offset + 1);
- bitset()->RecordAddress(kStartAddress + aligned_offset + 2);
- bitset()->RecordAddress(kStartAddress + aligned_offset + 3);
- EXPECT_THAT(bitset()->GetReachedOffsets(), ElementsAre(aligned_offset));
- }
- TEST_F(ReachedAddressesBitsetTest, FillBitsetOneByOne) {
- std::vector<uint32_t> expected_offsets;
- for (uintptr_t address = kStartAddress; address < kEndAddress; address += 4) {
- bitset()->RecordAddress(address);
- expected_offsets.push_back(address - kStartAddress);
- ASSERT_THAT(bitset()->GetReachedOffsets(),
- ElementsAreArray(expected_offsets))
- << "Last added: " << address;
- }
- }
- } // namespace android
- } // namespace base
|