diff --git a/Bigfoot/Sources/Engine/Include/Engine/Asset/Reference.hpp b/Bigfoot/Sources/Engine/Include/Engine/Asset/Reference.hpp index 0eaacae..5775f7e 100644 --- a/Bigfoot/Sources/Engine/Include/Engine/Asset/Reference.hpp +++ b/Bigfoot/Sources/Engine/Include/Engine/Asset/Reference.hpp @@ -118,7 +118,7 @@ class HardReference { m_handle = assetContainer->AcquireContainerHandle(m_uuid); } - m_handle->IncrementSoftRefCount(); + m_handle->IncrementHardRefCount(); } } diff --git a/Bigfoot/Tests/Engine/Asset/Reference.cpp b/Bigfoot/Tests/Engine/Asset/Reference.cpp index e8d1c4c..06d33a1 100644 --- a/Bigfoot/Tests/Engine/Asset/Reference.cpp +++ b/Bigfoot/Tests/Engine/Asset/Reference.cpp @@ -69,6 +69,43 @@ TEST_F(HardReferenceFixture, Get_ShouldReturnNullptrIfTheAssetDoesNotExist) /****************************************************************************************/ +TEST_F(HardReferenceFixture, Get_ShouldReturnNullptrAfterTheAssetIsRemovedFromTheContainer) +{ + const auto key = m_containerA.Insert(); + const UUID uuid = m_containerA.Get(key)->GetHeader().uuid; + + HardReference hardRef {uuid}; + + m_containerA.Remove(uuid); + + EXPECT_EQ(hardRef.Get(), nullptr); + EXPECT_EQ(std::as_const(hardRef).Get(), nullptr); +} + +/****************************************************************************************/ + +TEST_F(HardReferenceFixture, ShouldTouchTheHardRefCountOfTheHandle) +{ + UUID uuid; + const ContainerHandle* handle = m_containerA.AcquireContainerHandle(uuid); + + EXPECT_EQ(handle->GetHardRefCount(), 0); + + { + HardReference hardRef1 {uuid}; + EXPECT_EQ(handle->GetHardRefCount(), 1); + { + HardReference hardRef2 {uuid}; + EXPECT_EQ(handle->GetHardRefCount(), 2); + } + EXPECT_EQ(handle->GetHardRefCount(), 1); + } + + EXPECT_EQ(handle->GetHardRefCount(), 0); +} + +/****************************************************************************************/ + class SoftReferenceFixture: public ::testing::Test { protected: @@ -122,4 +159,41 @@ TEST_F(SoftReferenceFixture, Get_ShouldReturnNullptrIfTheAssetDoesNotExist) EXPECT_EQ(hardRef.Get(), nullptr); EXPECT_EQ(std::as_const(hardRef).Get(), nullptr); } + +/****************************************************************************************/ + +TEST_F(SoftReferenceFixture, Get_ShouldReturnNullptrAfterTheAssetIsRemovedFromTheContainer) +{ + const auto key = m_containerA.Insert(); + const UUID uuid = m_containerA.Get(key)->GetHeader().uuid; + + SoftReference hardRef {uuid}; + + m_containerA.Remove(uuid); + + EXPECT_EQ(hardRef.Get(), nullptr); + EXPECT_EQ(std::as_const(hardRef).Get(), nullptr); +} + +/****************************************************************************************/ + +TEST_F(SoftReferenceFixture, ShouldTouchTheSoftRefCountOfTheHandle) +{ + UUID uuid; + const ContainerHandle* handle = m_containerA.AcquireContainerHandle(uuid); + + EXPECT_EQ(handle->GetSoftRefCount(), 0); + + { + SoftReference softRef1 {uuid}; + EXPECT_EQ(handle->GetSoftRefCount(), 1); + { + SoftReference softRef2 {uuid}; + EXPECT_EQ(handle->GetSoftRefCount(), 2); + } + EXPECT_EQ(handle->GetSoftRefCount(), 1); + } + + EXPECT_EQ(handle->GetSoftRefCount(), 0); +} } // namespace Bigfoot