132 lines
5.8 KiB
C++
132 lines
5.8 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "AITypes.h"
|
|
#include "AITestsCommon.h"
|
|
|
|
//----------------------------------------------------------------------//
|
|
// FAITest_ResourceIDBasic
|
|
//----------------------------------------------------------------------//
|
|
struct FAITest_ResourceIDBasic : public FAITestBase
|
|
{
|
|
virtual bool InstantTest() override
|
|
{
|
|
AITEST_TRUE("There are always some resources as long as AIModule is present", FAIResources::GetResourcesCount() > 0);
|
|
|
|
const FAIResourceID& MovementID = FAIResources::GetResource(FAIResources::Movement);
|
|
AITEST_TRUE("Resource ID's indexes are broken!", FAIResources::Movement == MovementID);
|
|
|
|
return true;
|
|
}
|
|
};
|
|
IMPLEMENT_AI_INSTANT_TEST(FAITest_ResourceIDBasic, "System.AI.Resource ID.Basic operations")
|
|
|
|
//----------------------------------------------------------------------//
|
|
// FAITest_ResourceLock
|
|
//----------------------------------------------------------------------//
|
|
struct FAITest_ResourceLock : public FAITestBase
|
|
{
|
|
virtual bool InstantTest() override
|
|
{
|
|
FAIResourceLock MockLock;
|
|
|
|
// basic locking
|
|
MockLock.SetLock(EAIRequestPriority::HardScript);
|
|
AITEST_TRUE("Resource should be locked", MockLock.IsLocked());
|
|
AITEST_TRUE("Resource should be locked with specified priority", MockLock.IsLockedBy(EAIRequestPriority::HardScript));
|
|
AITEST_FALSE("Resource should not be available for lower priorities", MockLock.IsAvailableFor(EAIRequestPriority::Logic));
|
|
AITEST_TRUE("Resource should be available for higher priorities", MockLock.IsAvailableFor(EAIRequestPriority::Reaction));
|
|
|
|
// clearing lock:
|
|
// try clearing with lower priority
|
|
MockLock.ClearLock(EAIRequestPriority::Logic);
|
|
AITEST_TRUE("Resource should be still locked", MockLock.IsLocked());
|
|
AITEST_FALSE("Resource should still not be available for lower priorities", MockLock.IsAvailableFor(EAIRequestPriority::Logic));
|
|
AITEST_TRUE("Resource should still be available for higher priorities", MockLock.IsAvailableFor(EAIRequestPriority::Reaction));
|
|
|
|
// releasing the actual lock
|
|
MockLock.ClearLock(EAIRequestPriority::HardScript);
|
|
AITEST_FALSE("Resource should be available now", MockLock.IsLocked());
|
|
|
|
// clearing all locks at one go
|
|
MockLock.SetLock(EAIRequestPriority::HardScript);
|
|
MockLock.SetLock(EAIRequestPriority::Logic);
|
|
MockLock.SetLock(EAIRequestPriority::Reaction);
|
|
bool bWasLocked = MockLock.IsLocked();
|
|
MockLock.ForceClearAllLocks();
|
|
AITEST_TRUE("Resource should no longer be locked", bWasLocked == true && MockLock.IsLocked() == false);
|
|
|
|
// merging
|
|
FAIResourceLock MockLock2;
|
|
MockLock.SetLock(EAIRequestPriority::HardScript);
|
|
MockLock2.SetLock(EAIRequestPriority::Logic);
|
|
// merge
|
|
MockLock2 += MockLock;
|
|
AITEST_TRUE("Resource should be locked on both priorities", MockLock2.IsLockedBy(EAIRequestPriority::Logic) && MockLock2.IsLockedBy(EAIRequestPriority::HardScript));
|
|
MockLock2.ClearLock(EAIRequestPriority::Logic);
|
|
AITEST_TRUE("At this point both locks should be identical", MockLock == MockLock2);
|
|
|
|
return true;
|
|
}
|
|
};
|
|
IMPLEMENT_AI_INSTANT_TEST(FAITest_ResourceLock, "System.AI.Resource ID.Resource locking")
|
|
|
|
//----------------------------------------------------------------------//
|
|
// FAITest_ResourceSet
|
|
//----------------------------------------------------------------------//
|
|
struct FAITest_ResourceSet : public FAITestBase
|
|
{
|
|
virtual bool InstantTest() override
|
|
{
|
|
{
|
|
FAIResourcesSet ResourceSet;
|
|
AITEST_TRUE("Resource Set should be empty by default", ResourceSet.IsEmpty());
|
|
for (uint8 FlagIndex = 0; FlagIndex < FAIResourcesSet::MaxFlags; ++FlagIndex)
|
|
{
|
|
AITEST_FALSE("Resource Set should not contain any resources when empty", ResourceSet.ContainsResourceIndex(FlagIndex));
|
|
}
|
|
}
|
|
|
|
{
|
|
FAIResourcesSet ResourceSet(FAIResourcesSet::AllResources);
|
|
AITEST_FALSE("Resource Set should be empty by default", ResourceSet.IsEmpty());
|
|
for (uint8 FlagIndex = 0; FlagIndex < FAIResourcesSet::MaxFlags; ++FlagIndex)
|
|
{
|
|
AITEST_TRUE("Full Resource Set should contain every resource", ResourceSet.ContainsResourceIndex(FlagIndex) == true);
|
|
}
|
|
}
|
|
|
|
{
|
|
const FAIResourceID& MovementResource = FAIResources::GetResource(FAIResources::Movement);
|
|
const FAIResourceID& PerceptionResource = FAIResources::GetResource(FAIResources::Perception);
|
|
|
|
FAIResourcesSet ResourceSet;
|
|
ResourceSet.AddResource(PerceptionResource);
|
|
AITEST_TRUE("Resource Set should contain added resource", ResourceSet.ContainsResource(PerceptionResource));
|
|
AITEST_TRUE("Resource Set should contain added resource given by Index", ResourceSet.ContainsResourceIndex(PerceptionResource.Index));
|
|
for (uint8 FlagIndex = 0; FlagIndex < FAIResourcesSet::MaxFlags; ++FlagIndex)
|
|
{
|
|
if (FlagIndex != PerceptionResource.Index)
|
|
{
|
|
AITEST_FALSE("Resource Set should not contain any other resources", ResourceSet.ContainsResourceIndex(FlagIndex));
|
|
}
|
|
}
|
|
AITEST_FALSE("Resource Set should not be empty after adding a resource", ResourceSet.IsEmpty());
|
|
|
|
ResourceSet.AddResourceIndex(MovementResource.Index);
|
|
AITEST_TRUE("Resource Set should contain second added resource", ResourceSet.ContainsResource(MovementResource));
|
|
AITEST_TRUE("Resource Set should contain second added resource given by Index", ResourceSet.ContainsResourceIndex(MovementResource.Index));
|
|
|
|
ResourceSet.RemoveResource(MovementResource);
|
|
AITEST_FALSE("Resource Set should no longer contain second added resource", ResourceSet.ContainsResource(MovementResource));
|
|
AITEST_FALSE("Resource Set should still be not empty after removing one resource", ResourceSet.IsEmpty());
|
|
|
|
ResourceSet.RemoveResourceIndex(PerceptionResource.Index);
|
|
AITEST_TRUE("Resource Set should be empty after removing last resource", ResourceSet.IsEmpty() == true);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
};
|
|
IMPLEMENT_AI_INSTANT_TEST(FAITest_ResourceSet, "System.AI.Resource ID.Resource locking")
|