feat(memory): add Memory/MemoryOperator.h and the corresponding testing

This commit is contained in:
2022-03-19 16:05:47 +08:00
parent 465ce882b9
commit beaf5635ba
4 changed files with 260 additions and 13 deletions

View File

@ -2,6 +2,7 @@
#include "Memory/Memory.h"
#include "Memory/Alignment.h"
#include "Memory/MemoryOperator.h"
#include "Miscellaneous/AssertionMacros.h"
NAMESPACE_REDCRAFT_BEGIN
@ -15,6 +16,7 @@ void TestMemory()
TestAlignment();
TestMemoryBuffer();
TestMemoryMalloc();
TestMemoryOperator();
}
void TestAlignment()
@ -139,6 +141,67 @@ void TestMemoryMalloc()
}
NAMESPACE_UNNAMED_BEGIN
struct FTracker
{
static int32 Status;
FTracker() { always_check(Status == 0); Status = -1; }
FTracker(const FTracker&) { always_check(Status == 1); Status = -1; }
FTracker(FTracker&&) { always_check(Status == 2); Status = -1; }
~FTracker() { always_check(Status == 3); Status = -1; }
FTracker& operator=(const FTracker&) { always_check(Status == 4); Status = -1; return *this; }
FTracker& operator=(FTracker&&) { always_check(Status == 5); Status = -1; return *this; }
friend bool operator==(const FTracker&, const FTracker&) { always_check(Status == 6); Status = -1; return true; }
};
int32 FTracker::Status = -1;
NAMESPACE_UNNAMED_END
void TestMemoryOperator()
{
FTracker* PtrA = reinterpret_cast<FTracker*>(Memory::Malloc(sizeof(FTracker)));
FTracker* PtrB = reinterpret_cast<FTracker*>(Memory::Malloc(sizeof(FTracker)));
FTracker::Status = 0;
Memory::DefaultConstruct(PtrA);
always_check(FTracker::Status == -1);
FTracker::Status = 1;
Memory::Construct(PtrA, PtrB);
always_check(FTracker::Status == -1);
FTracker::Status = 2;
Memory::MoveConstruct(PtrA, PtrB);
always_check(FTracker::Status == -1);
FTracker::Status = -1;
Memory::RelocateConstruct(PtrA, PtrB);
always_check(FTracker::Status == -1);
FTracker::Status = 3;
Memory::Destruct(PtrA);
always_check(FTracker::Status == -1);
FTracker::Status = 4;
Memory::CopyAssign(PtrA, PtrB);
always_check(FTracker::Status == -1);
FTracker::Status = 5;
Memory::MoveAssign(PtrA, PtrB);
always_check(FTracker::Status == -1);
FTracker::Status = 6;
const bool bResult = Memory::Compare(PtrA, PtrB);
always_check(bResult);
always_check(FTracker::Status == -1);
Memory::Free(PtrA);
Memory::Free(PtrB);
}
NAMESPACE_END(Testing)
NAMESPACE_MODULE_END(Utility)

View File

@ -17,7 +17,7 @@ void TestMiscellaneous()
TestTypeInfo();
}
NAMESPACE_PRIVATE_BEGIN
NAMESPACE_UNNAMED_BEGIN
void TestNoEntry()
{
@ -47,7 +47,7 @@ void TestUnimplemented()
always_unimplemented();
}
NAMESPACE_PRIVATE_END
NAMESPACE_UNNAMED_END
void TestAssertionMacros()
{
@ -61,16 +61,16 @@ void TestAssertionMacros()
always_checkf(true, "True!");
//always_checkf(false, "False!");
//NAMESPACE_PRIVATE::TestNoEntry();
//TestNoEntry();
NAMESPACE_PRIVATE::TestNoReentry();
//NAMESPACE_PRIVATE::TestNoReentry();
TestNoReentry();
//TestNoReentry();
NAMESPACE_PRIVATE::TestNoRecursion(0);
NAMESPACE_PRIVATE::TestNoRecursion(0);
//NAMESPACE_PRIVATE::TestNoRecursion(1);
TestNoRecursion(0);
TestNoRecursion(0);
//TestNoRecursion(1);
//NAMESPACE_PRIVATE::TestUnimplemented();
//TestUnimplemented();
verify(true);
//verify(false);
@ -209,12 +209,12 @@ void TestCompare()
}
NAMESPACE_PRIVATE_BEGIN
NAMESPACE_UNNAMED_BEGIN
template <typename...>
struct TTestTemplateType { };
NAMESPACE_PRIVATE_END
NAMESPACE_UNNAMED_END
void TestTypeInfo()
{
@ -224,8 +224,8 @@ void TestTypeInfo()
always_check(TempA == TempB);
always_check(TempA == Typeid(void));
FTypeInfo TempC(Typeid(NAMESPACE_PRIVATE::TTestTemplateType<int8, int16>));
FTypeInfo TempD = Typeid(NAMESPACE_PRIVATE::TTestTemplateType<int8, int32>);
FTypeInfo TempC(Typeid(TTestTemplateType<int8, int16>));
FTypeInfo TempD = Typeid(TTestTemplateType<int8, int32>);
FTypeInfo TempE, TempF;
TempE = TempC;