From f3f2aea33e99dd037b47b363805b5ec89d3aff08 Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 23 Apr 2026 23:31:17 +0900 Subject: [PATCH 1/4] Update ECS duplicate-emplace test to debug-only assertion behavior --- editor/Project.cpp | 9 +++++---- src/Game.cpp | 3 ++- tests/ECS_testCases.cpp | 16 ++++------------ 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/editor/Project.cpp b/editor/Project.cpp index d23f23f..7b0e3d6 100644 --- a/editor/Project.cpp +++ b/editor/Project.cpp @@ -101,11 +101,12 @@ Project::Project() GE::Game::Descriptor Project::makeGameDescriptor() const { + std::map scenes; + for (const auto& [_, sceneDescriptor] : m_scenes) + scenes.emplace(sceneDescriptor.name, sceneDescriptor); + return { - .scenes = std::map( - std::from_range, - m_scenes | std::views::transform([](const auto& pair){ return std::make_pair(pair.second.name, pair.second); }) - ), + .scenes = std::move(scenes), .activeScene = startScene().second.name }; } diff --git a/src/Game.cpp b/src/Game.cpp index feea4ad..c7c3e62 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -71,9 +71,10 @@ Game::Game( ) : m_makeScriptInstance(std::move(makeScriptInstance)) , m_listScriptParameters(std::move(listScriptParameters)) - , m_scenes(std::from_range, descriptor.scenes | std::views::transform([&](const auto& sceneDesc){ return std::make_pair(sceneDesc.first, Scene(assetManager, sceneDesc.second)); })) , m_inputContext(descriptor.inputContext) { + for (const auto& [name, sceneDescriptor] : descriptor.scenes) + m_scenes.emplace(name, Scene(assetManager, sceneDescriptor)); setActiveScene(descriptor.activeScene); } diff --git a/tests/ECS_testCases.cpp b/tests/ECS_testCases.cpp index 21e5baf..883d454 100644 --- a/tests/ECS_testCases.cpp +++ b/tests/ECS_testCases.cpp @@ -108,30 +108,22 @@ TEST(ECSTest, twoComponent) EXPECT_EQ(world.archetypeCount(), 2); EXPECT_EQ(world.componentCount(), 1); - #ifdef NDEBUG - EXPECT_ANY_THROW({ - world.emplace(entity, 1); - }); - #else +#ifndef NDEBUG EXPECT_DEATH({ world.emplace(entity, 1); }, ""); - #endif +#endif EXPECT_EQ(world.emplace(entity, 2).val(), 2); EXPECT_EQ(world.entityCount(), 1); EXPECT_EQ(world.archetypeCount(), 3); EXPECT_EQ(world.componentCount(), 2); - #ifdef NDEBUG - EXPECT_ANY_THROW({ - world.emplace(entity, 2); - }); - #else +#ifndef NDEBUG EXPECT_DEATH({ world.emplace(entity, 2); }, ""); - #endif +#endif EXPECT_EQ(world.get(entity).val(), 1); EXPECT_EQ(world.get(entity).val(), 2); From a7925a32720dedfa5e569187dcc2b2d5e07161d1 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 24 Apr 2026 07:42:11 +0900 Subject: [PATCH 2/4] Use std::ranges::to for Game scene map construction --- src/Game.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Game.cpp b/src/Game.cpp index c7c3e62..5e53867 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -71,10 +71,12 @@ Game::Game( ) : m_makeScriptInstance(std::move(makeScriptInstance)) , m_listScriptParameters(std::move(listScriptParameters)) + , m_scenes(std::ranges::to>( + descriptor.scenes | std::views::transform([&](const auto& sceneDesc) { + return std::make_pair(sceneDesc.first, Scene(assetManager, sceneDesc.second)); + }))) , m_inputContext(descriptor.inputContext) { - for (const auto& [name, sceneDescriptor] : descriptor.scenes) - m_scenes.emplace(name, Scene(assetManager, sceneDescriptor)); setActiveScene(descriptor.activeScene); } From 0b796c09f23e902e7ea54ffb8ce8f1a7849578de Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 24 Apr 2026 10:19:13 +0900 Subject: [PATCH 3/4] Use pipe-style ranges::to map conversion in Game ctor --- src/Game.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Game.cpp b/src/Game.cpp index 5e53867..d82d0cc 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -71,10 +71,11 @@ Game::Game( ) : m_makeScriptInstance(std::move(makeScriptInstance)) , m_listScriptParameters(std::move(listScriptParameters)) - , m_scenes(std::ranges::to>( - descriptor.scenes | std::views::transform([&](const auto& sceneDesc) { - return std::make_pair(sceneDesc.first, Scene(assetManager, sceneDesc.second)); - }))) + , m_scenes(descriptor.scenes + | std::views::transform([&](const auto& sceneDesc) { + return std::make_pair(sceneDesc.first, Scene(assetManager, sceneDesc.second)); + }) + | std::ranges::to>()) , m_inputContext(descriptor.inputContext) { setActiveScene(descriptor.activeScene); From 92d4b67272ae3cbb22cdf171c75dda54ea107eed Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 24 Apr 2026 10:19:27 +0900 Subject: [PATCH 4/4] Use pipe-style ranges::to map conversion in Project descriptor --- editor/Project.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/editor/Project.cpp b/editor/Project.cpp index 7b0e3d6..d76e755 100644 --- a/editor/Project.cpp +++ b/editor/Project.cpp @@ -101,12 +101,13 @@ Project::Project() GE::Game::Descriptor Project::makeGameDescriptor() const { - std::map scenes; - for (const auto& [_, sceneDescriptor] : m_scenes) - scenes.emplace(sceneDescriptor.name, sceneDescriptor); - return { - .scenes = std::move(scenes), + .scenes = m_scenes + | std::views::values + | std::views::transform([](const GE::Scene::Descriptor& sceneDescriptor) { + return std::make_pair(sceneDescriptor.name, sceneDescriptor); + }) + | std::ranges::to>(), .activeScene = startScene().second.name }; }