[Bf-blender-cvs] [e48607a0c0a] soc-2021-adaptive-cloth: bli: generational_arena: extra insert() test case with fix
ishbosamiya
noreply at git.blender.org
Fri Jun 18 11:22:45 CEST 2021
Commit: e48607a0c0a68e6720874f3388e4d632b7c9a645
Author: ishbosamiya
Date: Wed Jun 16 14:53:11 2021 +0530
Branches: soc-2021-adaptive-cloth
https://developer.blender.org/rBe48607a0c0a68e6720874f3388e4d632b7c9a645
bli: generational_arena: extra insert() test case with fix
When the capacity of the `Arena` is 0, need to handle it specially.
===================================================================
M source/blender/blenlib/BLI_generational_arena.hh
M source/blender/blenlib/tests/BLI_generational_arena_test.cc
===================================================================
diff --git a/source/blender/blenlib/BLI_generational_arena.hh b/source/blender/blenlib/BLI_generational_arena.hh
index 330b9abec4d..c1cdb0ce01f 100644
--- a/source/blender/blenlib/BLI_generational_arena.hh
+++ b/source/blender/blenlib/BLI_generational_arena.hh
@@ -242,10 +242,9 @@ class Arena {
return *index;
}
else {
- /* couldn't insert the value within reserved memory space */
- /* TODO(ish): might be possible that `this->data.size()` is 0,
- * needs a special case for that */
- this->reserve(this->data.size() * 2);
+ /* couldn't insert the value within reserved memory space */
+ const auto reserve_cap = this->data.size() == 0 ? 1 : this->data.size();
+ this->reserve(reserve_cap * 2);
if (auto index = this->try_insert(value)) {
return *index;
}
diff --git a/source/blender/blenlib/tests/BLI_generational_arena_test.cc b/source/blender/blenlib/tests/BLI_generational_arena_test.cc
index fb827707110..4e0e668385a 100644
--- a/source/blender/blenlib/tests/BLI_generational_arena_test.cc
+++ b/source/blender/blenlib/tests/BLI_generational_arena_test.cc
@@ -37,6 +37,25 @@ TEST(generational_arena, Insert)
EXPECT_EQ(arena.get(i5), 5);
}
+TEST(generational_arena, Insert2)
+{
+ Arena<int> arena;
+ EXPECT_EQ(arena.capacity(), 0);
+ auto i1 = arena.insert(1);
+ auto i2 = arena.insert(2);
+ auto i3 = arena.insert(3);
+ auto i4 = arena.insert(4);
+ auto i5 = arena.insert(5);
+
+ EXPECT_EQ(arena.capacity(), 8);
+ EXPECT_EQ(arena.size(), 5);
+ EXPECT_EQ(arena.get(i1), 1);
+ EXPECT_EQ(arena.get(i2), 2);
+ EXPECT_EQ(arena.get(i3), 3);
+ EXPECT_EQ(arena.get(i4), 4);
+ EXPECT_EQ(arena.get(i5), 5);
+}
+
TEST(generational_arena, Remove)
{
Arena<int> arena(3);
More information about the Bf-blender-cvs
mailing list