brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 49953f3 Raw
71 lines · cpp
1//===-- iterate.cpp ---------------------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "gwp_asan/tests/harness.h"10 11#include <algorithm>12#include <set>13#include <vector>14 15TEST_F(CustomGuardedPoolAllocator, Iterate) {16  InitNumSlots(7);17  std::vector<std::pair<void *, size_t>> Allocated;18  auto alloc = [&](size_t size) {19    Allocated.push_back({GPA.allocate(size), size});20  };21 22  void *Ptr = GPA.allocate(5);23  alloc(2);24  alloc(1);25  alloc(100);26  GPA.deallocate(Ptr);27  alloc(42);28  std::sort(Allocated.begin(), Allocated.end());29 30  GPA.disable();31  void *Base = Allocated[0].first;32  size_t Size = reinterpret_cast<size_t>(Allocated.back().first) -33                reinterpret_cast<size_t>(Base) + 1;34  std::vector<std::pair<void *, size_t>> Found;35  GPA.iterate(36      Base, Size,37      [](uintptr_t Addr, size_t Size, void *Arg) {38        reinterpret_cast<std::vector<std::pair<void *, size_t>> *>(Arg)39            ->push_back({(void *)Addr, Size});40      },41      reinterpret_cast<void *>(&Found));42  GPA.enable();43 44  std::sort(Found.begin(), Found.end());45  EXPECT_EQ(Allocated, Found);46 47  // Now without the last allocation.48  GPA.disable();49  Size = reinterpret_cast<size_t>(Allocated.back().first) -50         reinterpret_cast<size_t>(Base); // Allocated.back() is out of range.51  Found.clear();52  GPA.iterate(53      Base, Size,54      [](uintptr_t Addr, size_t Size, void *Arg) {55        reinterpret_cast<std::vector<std::pair<void *, size_t>> *>(Arg)56            ->push_back({(void *)Addr, Size});57      },58      reinterpret_cast<void *>(&Found));59  GPA.enable();60 61  // We should have found every allocation but the last.62  // Remove it and compare the rest.63  std::sort(Found.begin(), Found.end());64  GPA.deallocate(Allocated.back().first);65  Allocated.pop_back();66  EXPECT_EQ(Allocated, Found);67 68  for (auto PS : Allocated)69    GPA.deallocate(PS.first);70}71