feat(memory): add TInlineAllocator and the corresponding testing

This commit is contained in:
2023-02-22 23:33:10 +08:00
parent bc3cc3d2cc
commit e8c9f9cc23
2 changed files with 154 additions and 38 deletions

View File

@ -14,35 +14,38 @@ void TestContainers()
TestArray();
}
void TestArray()
NAMESPACE_UNNAMED_BEGIN
template <typename Allocator, size_t Capacity>
void TestArrayTemplate()
{
{
TArray<int32> ArrayA;
TArray<int32> ArrayB(4);
TArray<int32> ArrayC(4, 4);
TArray<int32> ArrayD(ArrayC);
TArray<int32> ArrayE(MoveTemp(ArrayB));
TArray<int32> ArrayF({ 0, 1, 2, 3 });
TArray<int32, Allocator> ArrayA;
TArray<int32, Allocator> ArrayB(4);
TArray<int32, Allocator> ArrayC(4, 4);
TArray<int32, Allocator> ArrayD(ArrayC);
TArray<int32, Allocator> ArrayE(MoveTemp(ArrayB));
TArray<int32, Allocator> ArrayF({ 0, 1, 2, 3 });
TArray<int32> ArrayG;
TArray<int32> ArrayH;
TArray<int32> ArrayI;
TArray<int32, Allocator> ArrayG;
TArray<int32, Allocator> ArrayH;
TArray<int32, Allocator> ArrayI;
ArrayG = ArrayD;
ArrayH = MoveTemp(ArrayE);
ArrayI = { 0, 1, 2, 3 };
always_check((ArrayC == TArray<int32>({ 4, 4, 4, 4 })));
always_check((ArrayD == TArray<int32>({ 4, 4, 4, 4 })));
always_check((ArrayG == TArray<int32>({ 4, 4, 4, 4 })));
always_check((ArrayF == TArray<int32>({ 0, 1, 2, 3 })));
always_check((ArrayI == TArray<int32>({ 0, 1, 2, 3 })));
always_check((ArrayC == TArray<int32, Allocator>({ 4, 4, 4, 4 })));
always_check((ArrayD == TArray<int32, Allocator>({ 4, 4, 4, 4 })));
always_check((ArrayG == TArray<int32, Allocator>({ 4, 4, 4, 4 })));
always_check((ArrayF == TArray<int32, Allocator>({ 0, 1, 2, 3 })));
always_check((ArrayI == TArray<int32, Allocator>({ 0, 1, 2, 3 })));
}
{
TArray<int32> ArrayA = { 1, 2, 3 };
TArray<int32> ArrayB = { 7, 8, 9, 10 };
TArray<int32> ArrayC = { 1, 2, 3 };
TArray<int32, Allocator> ArrayA = { 1, 2, 3 };
TArray<int32, Allocator> ArrayB = { 7, 8, 9, 10 };
TArray<int32, Allocator> ArrayC = { 1, 2, 3 };
always_check((!(ArrayA == ArrayB)));
always_check(( (ArrayA != ArrayB)));
@ -60,25 +63,25 @@ void TestArray()
}
{
TArray<int32> Array = { 1, 2, 3 };
TArray<int32, Allocator> Array = { 1, 2, 3 };
Array.Insert(Array.Begin() + 1, 2);
always_check((Array == TArray<int32>({ 1, 2, 2, 3 })));
always_check((Array == TArray<int32, Allocator>({ 1, 2, 2, 3 })));
Array.Insert(Array.End(), 2, 4);
always_check((Array == TArray<int32>({ 1, 2, 2, 3, 4, 4 })));
always_check((Array == TArray<int32, Allocator>({ 1, 2, 2, 3, 4, 4 })));
Array.Insert(Array.Begin(), { 1, 1, 4, 5, 1, 4 });
always_check((Array == TArray<int32>({ 1, 1, 4, 5, 1, 4, 1, 2, 2, 3, 4, 4 })));
always_check((Array == TArray<int32, Allocator>({ 1, 1, 4, 5, 1, 4, 1, 2, 2, 3, 4, 4 })));
Array.Emplace(Array.End(), 5);
always_check((Array == TArray<int32>({ 1, 1, 4, 5, 1, 4, 1, 2, 2, 3, 4, 4, 5 })));
always_check((Array == TArray<int32, Allocator>({ 1, 1, 4, 5, 1, 4, 1, 2, 2, 3, 4, 4, 5 })));
Array.StableErase(Array.End() - 1);
always_check((Array == TArray<int32>({ 1, 1, 4, 5, 1, 4, 1, 2, 2, 3, 4, 4 })));
always_check((Array == TArray<int32, Allocator>({ 1, 1, 4, 5, 1, 4, 1, 2, 2, 3, 4, 4 })));
Array.StableErase(Array.End() - 2, Array.End());
always_check((Array == TArray<int32>({ 1, 1, 4, 5, 1, 4, 1, 2, 2, 3 })));
always_check((Array == TArray<int32, Allocator>({ 1, 1, 4, 5, 1, 4, 1, 2, 2, 3 })));
Array.Erase(Array.End() - 2);
always_check((Array.Num() == 9));
@ -88,33 +91,43 @@ void TestArray()
}
{
TArray<int32> Array = { 1, 2, 3 };
TArray<int32, Allocator> Array = { 1, 2, 3 };
Array.PushBack(4);
always_check((Array == TArray<int32>({ 1, 2, 3, 4 })));
always_check((Array == TArray<int32, Allocator>({ 1, 2, 3, 4 })));
Array.EmplaceBack(5);
always_check((Array == TArray<int32>({ 1, 2, 3, 4, 5 })));
always_check((Array == TArray<int32, Allocator>({ 1, 2, 3, 4, 5 })));
Array.EmplaceBack(5) = 6;
always_check((Array == TArray<int32>({ 1, 2, 3, 4, 5, 6 })));
always_check((Array == TArray<int32, Allocator>({ 1, 2, 3, 4, 5, 6 })));
Array.PopBack();
always_check((Array == TArray<int32>({ 1, 2, 3, 4, 5 })));
always_check((Array == TArray<int32, Allocator>({ 1, 2, 3, 4, 5 })));
Array.SetNum(4);
always_check((Array == TArray<int32>({ 1, 2, 3, 4 })));
always_check((Array == TArray<int32, Allocator>({ 1, 2, 3, 4 })));
Array.Reserve(64);
always_check((Array.Num() == 4));
always_check((Array.Max() == 64));
always_check((Array.Max() == 64 || Array.Max() == Capacity));
Array.Shrink();
always_check((Array.Num() == 4));
always_check((Array.Max() == 4));
always_check((Array.Max() == 4 || Array.Max() == Capacity));
}
}
NAMESPACE_UNNAMED_END
void TestArray()
{
TestArrayTemplate<FDefaultAllocator, 0>();
TestArrayTemplate<FHeapAllocator, 0>();
TestArrayTemplate<TInlineAllocator<8>, 8>();
TestArrayTemplate<TFixedAllocator<64>, 64>();
}
NAMESPACE_END(Testing)
NAMESPACE_MODULE_END(Utility)