#include "Testing/ContainersTesting.h" #include "Containers/Containers.h" #include "Miscellaneous/AssertionMacros.h" NAMESPACE_REDCRAFT_BEGIN NAMESPACE_MODULE_BEGIN(Redcraft) NAMESPACE_MODULE_BEGIN(Utility) NAMESPACE_BEGIN(Testing) void TestContainers() { TestArray(); } NAMESPACE_UNNAMED_BEGIN template void TestArrayTemplate() { { TArray ArrayA; TArray ArrayB(4); TArray ArrayC(4, 4); TArray ArrayD(ArrayC); TArray ArrayE(MoveTemp(ArrayB)); TArray ArrayF({ 0, 1, 2, 3 }); TArray ArrayG; TArray ArrayH; TArray ArrayI; ArrayG = ArrayD; ArrayH = MoveTemp(ArrayE); ArrayI = { 0, 1, 2, 3 }; always_check((ArrayC == TArray({ 4, 4, 4, 4 }))); always_check((ArrayD == TArray({ 4, 4, 4, 4 }))); always_check((ArrayG == TArray({ 4, 4, 4, 4 }))); always_check((ArrayF == TArray({ 0, 1, 2, 3 }))); always_check((ArrayI == TArray({ 0, 1, 2, 3 }))); } { TArray ArrayA = { 1, 2, 3 }; TArray ArrayB = { 7, 8, 9, 10 }; TArray ArrayC = { 1, 2, 3 }; always_check((!(ArrayA == ArrayB))); always_check(( (ArrayA != ArrayB))); always_check(( (ArrayA < ArrayB))); always_check(( (ArrayA <= ArrayB))); always_check((!(ArrayA > ArrayB))); always_check((!(ArrayA >= ArrayB))); always_check(( (ArrayA == ArrayC))); always_check((!(ArrayA != ArrayC))); always_check((!(ArrayA < ArrayC))); always_check(( (ArrayA <= ArrayC))); always_check((!(ArrayA > ArrayC))); always_check(( (ArrayA >= ArrayC))); } { TArray Array = { 1, 2, 3 }; Array.Insert(Array.Begin() + 1, 2); always_check((Array == TArray({ 1, 2, 2, 3 }))); Array.Insert(Array.End(), 2, 4); always_check((Array == TArray({ 1, 2, 2, 3, 4, 4 }))); Array.Insert(Array.Begin(), { 1, 1, 4, 5, 1, 4 }); always_check((Array == TArray({ 1, 1, 4, 5, 1, 4, 1, 2, 2, 3, 4, 4 }))); Array.Emplace(Array.End(), 5); always_check((Array == TArray({ 1, 1, 4, 5, 1, 4, 1, 2, 2, 3, 4, 4, 5 }))); Array.StableErase(Array.End() - 1); always_check((Array == TArray({ 1, 1, 4, 5, 1, 4, 1, 2, 2, 3, 4, 4 }))); Array.StableErase(Array.End() - 2, Array.End()); always_check((Array == TArray({ 1, 1, 4, 5, 1, 4, 1, 2, 2, 3 }))); Array.Erase(Array.End() - 2); always_check((Array.Num() == 9)); Array.Erase(Array.Begin(), Array.Begin() + 6); always_check((Array.Num() == 3)); } { TArray Array = { 1, 2, 3 }; Array.PushBack(4); always_check((Array == TArray({ 1, 2, 3, 4 }))); Array.EmplaceBack(5); always_check((Array == TArray({ 1, 2, 3, 4, 5 }))); Array.EmplaceBack(5) = 6; always_check((Array == TArray({ 1, 2, 3, 4, 5, 6 }))); Array.PopBack(); always_check((Array == TArray({ 1, 2, 3, 4, 5 }))); Array.SetNum(4); always_check((Array == TArray({ 1, 2, 3, 4 }))); Array.Reserve(64); always_check((Array.Num() == 4)); always_check((Array.Max() == 64 || Array.Max() == Capacity)); Array.Shrink(); always_check((Array.Num() == 4)); always_check((Array.Max() == 4 || Array.Max() == Capacity)); } } NAMESPACE_UNNAMED_END void TestArray() { TestArrayTemplate(); TestArrayTemplate(); TestArrayTemplate, 8>(); TestArrayTemplate, 64>(); } NAMESPACE_END(Testing) NAMESPACE_MODULE_END(Utility) NAMESPACE_MODULE_END(Redcraft) NAMESPACE_REDCRAFT_END