meta: add a test (and a fix) for a corner case of meta_reset

This commit is contained in:
Michele Caini
2022-09-06 15:54:57 +02:00
parent 336bcf4d11
commit 65ee240e8e
2 changed files with 14 additions and 2 deletions

View File

@@ -453,9 +453,11 @@ template<typename Type>
inline void meta_reset(const id_type id) noexcept {
auto &&context = internal::meta_context::from(locator<meta_ctx>::value_or());
for(auto it = context.value.begin(); it != context.value.end(); ++it) {
for(auto it = context.value.begin(); it != context.value.end();) {
if(it->second->id == id) {
it = context.value.erase(it);
} else {
++it;
}
}
}

View File

@@ -5,9 +5,9 @@
#include <vector>
#include <gtest/gtest.h>
#include <entt/core/hashed_string.hpp>
#include <entt/locator/locator.hpp>
#include <entt/core/type_info.hpp>
#include <entt/core/utility.hpp>
#include <entt/locator/locator.hpp>
#include <entt/meta/container.hpp>
#include <entt/meta/context.hpp>
#include <entt/meta/factory.hpp>
@@ -525,6 +525,16 @@ TEST_F(MetaType, Reset) {
ASSERT_TRUE(entt::resolve("clazz"_hs));
}
TEST_F(MetaType, ResetLast) {
auto id = (entt::resolve().cend() - 1u)->second.id();
ASSERT_TRUE(entt::resolve(id));
entt::meta_reset(id);
ASSERT_FALSE(entt::resolve(id));
}
TEST_F(MetaType, ResetAll) {
using namespace entt::literals;