[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