brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · d30de99 Raw
57 lines · cpp
1//===- PerThreadBumpPtrAllocatorTest.cpp ----------------------------------===//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 "llvm/Support/PerThreadBumpPtrAllocator.h"10#include "llvm/Support/Parallel.h"11#include "gtest/gtest.h"12#include <cstdlib>13 14using namespace llvm;15using namespace parallel;16 17namespace {18 19TEST(PerThreadBumpPtrAllocatorTest, Simple) {20  PerThreadBumpPtrAllocator Allocator;21 22  parallel::TaskGroup tg;23 24  tg.spawn([&]() {25    uint64_t *Var =26        (uint64_t *)Allocator.Allocate(sizeof(uint64_t), alignof(uint64_t));27    *Var = 0xFE;28    EXPECT_EQ(0xFEul, *Var);29    EXPECT_EQ(sizeof(uint64_t), Allocator.getBytesAllocated());30    EXPECT_TRUE(Allocator.getBytesAllocated() <= Allocator.getTotalMemory());31 32    PerThreadBumpPtrAllocator Allocator2(std::move(Allocator));33 34    EXPECT_EQ(sizeof(uint64_t), Allocator2.getBytesAllocated());35    EXPECT_TRUE(Allocator2.getBytesAllocated() <= Allocator2.getTotalMemory());36 37    EXPECT_EQ(0xFEul, *Var);38  });39}40 41TEST(PerThreadBumpPtrAllocatorTest, ParallelAllocation) {42  PerThreadBumpPtrAllocator Allocator;43 44  static size_t constexpr NumAllocations = 1000;45 46  parallelFor(0, NumAllocations, [&](size_t Idx) {47    uint64_t *ptr =48        (uint64_t *)Allocator.Allocate(sizeof(uint64_t), alignof(uint64_t));49    *ptr = Idx;50  });51 52  EXPECT_EQ(sizeof(uint64_t) * NumAllocations, Allocator.getBytesAllocated());53  EXPECT_EQ(Allocator.getNumberOfAllocators(), parallel::getThreadCount());54}55 56} // anonymous namespace57