feat(memory): add Memory/MemoryOperator.h and the corresponding testing
This commit is contained in:
@ -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)
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user