82 lines
2.1 KiB
C++
82 lines
2.1 KiB
C++
//===-- allocator_test.cpp ------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file is a part of XRay, a function call tracing system.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "xray_allocator.h"
|
|
#include "xray_buffer_queue.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
namespace __xray {
|
|
namespace {
|
|
|
|
struct TestData {
|
|
s64 First;
|
|
s64 Second;
|
|
};
|
|
|
|
TEST(AllocatorTest, Construction) { Allocator<sizeof(TestData)> A(2 << 11); }
|
|
|
|
TEST(AllocatorTest, Allocate) {
|
|
Allocator<sizeof(TestData)> A(2 << 11);
|
|
auto B = A.Allocate();
|
|
ASSERT_NE(B.Data, nullptr);
|
|
}
|
|
|
|
TEST(AllocatorTest, OverAllocate) {
|
|
Allocator<sizeof(TestData)> A(sizeof(TestData));
|
|
auto B1 = A.Allocate();
|
|
ASSERT_NE(B1.Data, nullptr);
|
|
auto B2 = A.Allocate();
|
|
ASSERT_EQ(B2.Data, nullptr);
|
|
}
|
|
|
|
struct OddSizedData {
|
|
s64 A;
|
|
s32 B;
|
|
};
|
|
|
|
TEST(AllocatorTest, AllocateBoundaries) {
|
|
Allocator<sizeof(OddSizedData)> A(GetPageSizeCached());
|
|
|
|
// Keep allocating until we hit a nullptr block.
|
|
unsigned C = 0;
|
|
auto Expected =
|
|
GetPageSizeCached() / RoundUpTo(sizeof(OddSizedData), kCacheLineSize);
|
|
for (auto B = A.Allocate(); B.Data != nullptr; B = A.Allocate(), ++C)
|
|
;
|
|
|
|
ASSERT_EQ(C, Expected);
|
|
}
|
|
|
|
TEST(AllocatorTest, AllocateFromNonOwned) {
|
|
bool Success = false;
|
|
BufferQueue BQ(GetPageSizeCached(), 10, Success);
|
|
ASSERT_TRUE(Success);
|
|
BufferQueue::Buffer B;
|
|
ASSERT_EQ(BQ.getBuffer(B), BufferQueue::ErrorCode::Ok);
|
|
{
|
|
Allocator<sizeof(OddSizedData)> A(B.Data, B.Size);
|
|
|
|
// Keep allocating until we hit a nullptr block.
|
|
unsigned C = 0;
|
|
auto Expected =
|
|
GetPageSizeCached() / RoundUpTo(sizeof(OddSizedData), kCacheLineSize);
|
|
for (auto B = A.Allocate(); B.Data != nullptr; B = A.Allocate(), ++C)
|
|
;
|
|
|
|
ASSERT_EQ(C, Expected);
|
|
}
|
|
ASSERT_EQ(BQ.releaseBuffer(B), BufferQueue::ErrorCode::Ok);
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace __xray
|