Files
UnrealEngineUWP/Engine/Source/Developer/StructUtilsTestSuite/Private/StructArrayViewTest.cpp
yoan stamant dacfa4f383 Moved StructUtils types (InstancedStruct, StructView, PropertyBag, etc.) to CoreUObject
StructUtilsTestSuite has been moved to Developper
StructUtilsEditor has been moved to Engine/Editor
NetSerialization for FInstancedStruct not using native serialization has been moved to the engine module since FRepLayout is not available in CoreUObject module.
Old plugins and modules are kept temporarily and will be remove in a different CL
Temporary header files added to facilitate transition to the new include path
#jira UE-216472
#rb Devin.Doucette, Francis.Hurteau

[CL 34509881 by yoan stamant in ue5-main branch]
2024-06-19 15:22:25 -04:00

281 lines
10 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "AITestsCommon.h"
#include "StructUtils/StructArrayView.h"
#include "StructUtilsTestTypes.h"
#define LOCTEXT_NAMESPACE "StructUtilsTests"
namespace FStructArrayViewTest
{
struct FTest_ArrayViewChangeElements : FAITestBase
{
virtual bool InstantTest() override
{
constexpr float Increment = 10.f;
TArray<float> OriginalValues = { 1,2,3,4,5,6,7,8,9,10 };
TArray<FTestStructSimple> ValuesF;
for (float Value : OriginalValues)
{
ValuesF.Add(Value);
}
FStructArrayView ViewF(ValuesF);
for (int32 i = 0; i < ValuesF.Num(); ++i)
{
ViewF.GetAt<FTestStructSimple>(i).Float += 10.f;
}
{
int32 i = 0;
for (FStructView StructViewTest : ViewF)
{
AITEST_EQUAL(TEXT("FStructView should have the same value as TArray"), ValuesF[i].Float, StructViewTest.Get<FTestStructSimple>().Float);
AITEST_EQUAL(TEXT("FStructArrayView GetAt() should have the same value as TArray"), ValuesF[i].Float, ViewF.GetAt< FTestStructSimple>(i).Float);
AITEST_TRUE(TEXT("FStructArrayView GetPtrAt() should be non Null"), ViewF.GetPtrAt< FTestStructSimple>(i) != nullptr);
AITEST_EQUAL(TEXT("FStructArrayView GetPtrAt() should have the same value as TArray"), ValuesF[i].Float, ViewF.GetPtrAt< FTestStructSimple>(i)->Float);
AITEST_EQUAL(TEXT("FStructArrayView operator[] should have the same value as TArray"), ValuesF[i].Float, ViewF[i].Get<FTestStructSimple>().Float);
AITEST_EQUAL(TEXT("FStructArrayView Element should reflect the change done to it"), ViewF.GetAt<FTestStructSimple>(i).Float, OriginalValues[i] + Increment);
AITEST_EQUAL(TEXT("FStructArrayView Element should point at the same adress in memory as TArray"), (void*)&ValuesF[i], ViewF.GetDataAt(i));
++i;
}
AITEST_EQUAL(TEXT("FStructArrayView should have the same number of elements value as TArray"), i, ValuesF.Num());
}
{
FStructArrayView ViewLeft(ViewF);
const int32 LeftNum = 3;
ViewLeft.LeftInline(LeftNum);
AITEST_EQUAL(TEXT("Incorrect LeftInline() modified FStructArrayView Num"), LeftNum, ViewLeft.Num());
int32 i = 0;
for (FStructView StructViewTest : ViewLeft)
{
AITEST_EQUAL(TEXT("LeftInline() modified FStructArrayView element should be the same as correpsonding element in TArray"), StructViewTest.Get<FTestStructSimple>().Float, ValuesF[i].Float);
++i;
}
}
{
FStructArrayView ViewLeftChop(ViewF);
const int32 LeftChopNum = 4;
ViewLeftChop.LeftChopInline(LeftChopNum);
AITEST_EQUAL(TEXT("Incorrect LeftChopInline() modified FStructArrayView Num"), ViewF.Num() - LeftChopNum, ViewLeftChop.Num());
int32 i = 0;
for (FStructView StructViewTest : ViewLeftChop)
{
AITEST_EQUAL(TEXT("LeftChopInline() modified FStructArrayView element should be the same as correpsonding element in TArray"), StructViewTest.Get<FTestStructSimple>().Float, ValuesF[i].Float);
++i;
}
}
{
FStructArrayView ViewRight(ViewF);
const int32 RightNum = 2;
ViewRight.RightInline(RightNum);
AITEST_EQUAL(TEXT("Incorrect RightInline() modified FStructArrayView Num"), RightNum, ViewRight.Num());
int32 i = ViewF.Num() - RightNum;
for (FStructView StructViewTest : ViewRight)
{
AITEST_EQUAL(TEXT("RightInline() modified FStructArrayView element should be the same as correpsonding element in TArray"), StructViewTest.Get<FTestStructSimple>().Float, ValuesF[i].Float);
++i;
}
}
{
FStructArrayView ViewRightChop(ViewF);
const int32 RightChopNum = 6;
ViewRightChop.RightChopInline(RightChopNum);
AITEST_EQUAL(TEXT("Incorrect RightChopInline() modified FStructArrayView Num"), ViewF.Num() - RightChopNum, ViewRightChop.Num());
int32 i = RightChopNum;
for (FStructView StructViewTest : ViewRightChop)
{
AITEST_EQUAL(TEXT("RightChopInline() modified FStructArrayView element should be the same as correpsonding element in TArray"), StructViewTest.Get<FTestStructSimple>().Float, ValuesF[i].Float);
++i;
}
}
{
FStructArrayView ViewMid(ViewF);
const int32 MidPositon = 3;
const int32 MidNum = 4;
ViewMid.MidInline(MidPositon, MidNum);
AITEST_EQUAL(TEXT("Incorrect MidInline() modified FStructArrayView Num"), MidNum, ViewMid.Num());
int32 i = MidPositon;
for (FStructView StructViewTest : ViewMid)
{
AITEST_EQUAL(TEXT("MidInline() modified FStructArrayView element should be the same as correpsonding element in TArray"), StructViewTest.Get<FTestStructSimple>().Float, ValuesF[i].Float);
++i;
}
}
{
FStructArrayView ViewSlice(ViewF);
const int32 SlicePositon = 2;
const int32 SliceNum = 5;
ViewSlice = ViewSlice.Slice(SlicePositon, SliceNum);
AITEST_EQUAL(TEXT("Incorrect Slice() modified FStructArrayView Num"), SliceNum, ViewSlice.Num());
int32 i = SlicePositon;
for (FStructView StructViewTest : ViewSlice)
{
AITEST_EQUAL(TEXT("Slice() modified FStructArrayView element should be the same as correpsonding element in TArray"), StructViewTest.Get<FTestStructSimple>().Float, ValuesF[i].Float);
++i;
}
}
return true;
}
};
IMPLEMENT_AI_INSTANT_TEST(FTest_ArrayViewChangeElements, "System.StructUtils.StructArrayView.ChangeElements");
struct FTest_ConstArrayViewChangeElements : FAITestBase
{
virtual bool InstantTest() override
{
constexpr float Increment = 10.f;
TArray<float> OriginalValues = { 1,2,3,4,5,6,7,8,9,10 };
TArray<FTestStructSimple> ValuesF;
for (float Value : OriginalValues)
{
ValuesF.Add(Value);
}
FStructArrayView ViewF(ValuesF);
FConstStructArrayView ViewConstF(ViewF);
for (int32 i = 0; i < ValuesF.Num(); ++i)
{
ViewF.GetAt<FTestStructSimple>(i).Float += 10.f;
}
{
int32 i = 0;
for (FConstStructView StructViewTest : ViewConstF)
{
AITEST_EQUAL(TEXT("FConstStructView should have the same value as TArray"), ValuesF[i].Float, StructViewTest.Get<const FTestStructSimple>().Float);
AITEST_EQUAL(TEXT("FConstStructArrayView GetAt() should have the same value as TArray"), ValuesF[i].Float, ViewConstF.GetAt<const FTestStructSimple>(i).Float);
AITEST_TRUE(TEXT("FConstStructArrayView GetPtrAt() should be non Null"), ViewConstF.GetPtrAt<const FTestStructSimple>(i) != nullptr);
AITEST_EQUAL(TEXT("FConstStructArrayView GetPtrAt() should have the same value as TArray"), ValuesF[i].Float, ViewConstF.GetPtrAt<const FTestStructSimple>(i)->Float);
AITEST_EQUAL(TEXT("FConstStructArrayView operator[] should have the same value as TArray"), ValuesF[i].Float, ViewConstF[i].Get<const FTestStructSimple>().Float);
AITEST_EQUAL(TEXT("FConstStructArrayView Element should reflect the change done to it"), ViewConstF.GetAt<const FTestStructSimple>(i).Float, OriginalValues[i] + Increment);
AITEST_EQUAL(TEXT("FConstStructArrayView Element should point at the same adress in memory as TArray"), (void*)&ValuesF[i], ViewConstF.GetDataAt(i));
++i;
}
AITEST_EQUAL(TEXT("FConstStructArrayView should have the same number of elements value as TArray"), i, ViewConstF.Num());
}
{
FConstStructArrayView ViewLeft(ViewF);
const int32 LeftNum = 3;
ViewLeft.LeftInline(LeftNum);
AITEST_EQUAL(TEXT("Incorrect LeftInline() modified FConstStructArrayView Num"), LeftNum, ViewLeft.Num());
int32 i = 0;
for (FConstStructView StructViewTest : ViewLeft)
{
AITEST_EQUAL(TEXT("LeftInline() modified FConstStructArrayView element should be the same as correpsonding element in TArray"), StructViewTest.Get<const FTestStructSimple>().Float, ValuesF[i].Float);
++i;
}
}
{
FConstStructArrayView ViewLeftChop(ViewF);
const int32 LeftChopNum = 4;
ViewLeftChop.LeftChopInline(LeftChopNum);
AITEST_EQUAL(TEXT("Incorrect LeftChopInline() modified FConstStructArrayView Num"), ViewF.Num() - LeftChopNum, ViewLeftChop.Num());
int32 i = 0;
for (FConstStructView StructViewTest : ViewLeftChop)
{
AITEST_EQUAL(TEXT("LeftChopInline() modified FConstStructArrayView element should be the same as correpsonding element in TArray"), StructViewTest.Get<const FTestStructSimple>().Float, ValuesF[i].Float);
++i;
}
}
{
FConstStructArrayView ViewRight(ViewF);
const int32 RightNum = 2;
ViewRight.RightInline(RightNum);
AITEST_EQUAL(TEXT("Incorrect RightInline() modified FConstStructArrayView Num"), RightNum, ViewRight.Num());
int32 i = ViewF.Num() - RightNum;
for (FConstStructView StructViewTest : ViewRight)
{
AITEST_EQUAL(TEXT("RightInline() modified FConstStructArrayView element should be the same as correpsonding element in TArray"), StructViewTest.Get<const FTestStructSimple>().Float, ValuesF[i].Float);
++i;
}
}
{
FConstStructArrayView ViewRightChop(ViewF);
const int32 RightChopNum = 6;
ViewRightChop.RightChopInline(RightChopNum);
AITEST_EQUAL(TEXT("Incorrect RightChopInline() modified FConstStructArrayView Num"), ViewF.Num() - RightChopNum, ViewRightChop.Num());
int32 i = RightChopNum;
for (FConstStructView StructViewTest : ViewRightChop)
{
AITEST_EQUAL(TEXT("RightChopInline() modified FConstStructArrayView element should be the same as correpsonding element in TArray"), StructViewTest.Get<const FTestStructSimple>().Float, ValuesF[i].Float);
++i;
}
}
{
FConstStructArrayView ViewMid(ViewF);
const int32 MidPositon = 3;
const int32 MidNum = 4;
ViewMid.MidInline(MidPositon, MidNum);
AITEST_EQUAL(TEXT("Incorrect MidInline() modified FConstStructArrayView Num"), MidNum, ViewMid.Num());
int32 i = MidPositon;
for (FConstStructView StructViewTest : ViewMid)
{
AITEST_EQUAL(TEXT("MidInline() modified FConstStructArrayView element should be the same as correpsonding element in TArray"), StructViewTest.Get<const FTestStructSimple>().Float, ValuesF[i].Float);
++i;
}
}
{
FConstStructArrayView ViewSlice(ViewF);
const int32 SlicePositon = 2;
const int32 SliceNum = 5;
ViewSlice = ViewSlice.Slice(SlicePositon, SliceNum);
AITEST_EQUAL(TEXT("Incorrect Slice() modified FConstStructArrayView Num"), SliceNum, ViewSlice.Num());
int32 i = SlicePositon;
for (FConstStructView StructViewTest : ViewSlice)
{
AITEST_EQUAL(TEXT("Slice() modified FConstStructArrayView element should be the same as correpsonding element in TArray"), StructViewTest.Get<const FTestStructSimple>().Float, ValuesF[i].Float);
++i;
}
}
return true;
}
};
IMPLEMENT_AI_INSTANT_TEST(FTest_ConstArrayViewChangeElements, "System.StructUtils.StructArrayView.ChangeElementsConst");
} // FStructArrayViewTest
#undef LOCTEXT_NAMESPACE