feat(memory): add InOutPtr and the corresponding testing

This commit is contained in:
2023-01-21 14:34:57 +08:00
parent 73b5305d34
commit c634c2757c
3 changed files with 108 additions and 0 deletions

View File

@ -7,6 +7,7 @@
#include "Memory/SharedPointer.h"
#include "Memory/MemoryOperator.h"
#include "Memory/ObserverPointer.h"
#include "Memory/InOutPointer.h"
#include "Miscellaneous/AssertionMacros.h"
NAMESPACE_REDCRAFT_BEGIN
@ -25,6 +26,7 @@ void TestMemory()
TestUniquePointer();
TestSharedPointer();
TestObserverPointer();
TestInOutPointer();
}
void TestAlignment()
@ -1098,6 +1100,33 @@ void TestObserverPointer()
}
}
void TestInOutPointer()
{
{
TUniquePtr<int64> Temp;
[](int64** InPtr) { *InPtr = new int64; } (OutPtr(Temp));
always_check(Temp.IsValid());
Temp.Reset();
[](int64** InPtr) { *InPtr = new int64; } (OutPtr(Temp, TDefaultDelete<int64>()));
always_check(Temp.IsValid());
}
{
TUniquePtr<int64> Temp = MakeUnique<int64>(2485800585);
[](int64** InPtr) { always_check(**InPtr == 2485800585); delete* InPtr; *InPtr = new int64; } (InOutPtr(Temp));
always_check(Temp.IsValid());
Temp = MakeUnique<int64>(2821859274);
[](int64** InPtr) { always_check(**InPtr == 2821859274); delete* InPtr; *InPtr = new int64; } (InOutPtr(Temp, TDefaultDelete<int64>()));
always_check(Temp.IsValid());
}
}
NAMESPACE_END(Testing)
NAMESPACE_MODULE_END(Utility)