[Bf-blender-cvs] [7de7ac55d2b] soc-2021-adaptive-cloth: bli: generational_arena: get related tests and respective fixes
ishbosamiya
noreply at git.blender.org
Fri Jun 18 11:22:45 CEST 2021
Commit: 7de7ac55d2b0a42dc037276583a5471da626a28f
Author: ishbosamiya
Date: Wed Jun 16 13:56:28 2021 +0530
Branches: soc-2021-adaptive-cloth
https://developer.blender.org/rB7de7ac55d2b0a42dc037276583a5471da626a28f
bli: generational_arena: get related tests and respective fixes
===================================================================
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 05ca740a06e..c009bec750a 100644
--- a/source/blender/blenlib/BLI_generational_arena.hh
+++ b/source/blender/blenlib/BLI_generational_arena.hh
@@ -85,6 +85,11 @@ class Index {
this->generation = generation;
}
+ inline bool operator==(const Index &other) const
+ {
+ return (this->index == other.index) && (this->generation == other.generation);
+ }
+
static inline Index invalid()
{
return Index(std::numeric_limits<usize>::max(), std::numeric_limits<usize>::max());
@@ -299,7 +304,12 @@ class Arena {
return std::nullopt;
}
- return std::cref(this->data[index]);
+ if (auto entry = std::get_if<EntryExist>(&this->data[index])) {
+ return std::cref(entry->value);
+ }
+ else {
+ return std::nullopt;
+ }
}
std::optional<std::reference_wrapper<T>> get_no_gen(usize index)
@@ -309,7 +319,12 @@ class Arena {
return std::nullopt;
}
- return std::ref(this->data[index]);
+ if (auto entry = std::get_if<EntryExist>(&this->data[index])) {
+ return std::ref(entry->value);
+ }
+ else {
+ return std::nullopt;
+ }
}
std::optional<Index> get_no_gen_index(usize index) const
@@ -320,12 +335,12 @@ class Arena {
}
std::optional<Index> res;
- std::visit(extra::overloaded{
- [&res](EntryNoExist &entry) { res = std::nullopt; },
- [&res, index](EntryExist &entry) { res = Index(index, entry.generation); }},
- this->data[index]);
-
- return res;
+ if (auto entry = std::get_if<EntryExist>(&this->data[index])) {
+ return Index(index, entry->generation);
+ }
+ else {
+ return std::nullopt;
+ }
}
isize capacity() const
diff --git a/source/blender/blenlib/tests/BLI_generational_arena_test.cc b/source/blender/blenlib/tests/BLI_generational_arena_test.cc
index 0e5730046f8..b58d91982af 100644
--- a/source/blender/blenlib/tests/BLI_generational_arena_test.cc
+++ b/source/blender/blenlib/tests/BLI_generational_arena_test.cc
@@ -37,4 +37,45 @@ TEST(generational_arena, Insert)
EXPECT_EQ(arena.get(i5), 5);
}
+TEST(generational_arena, Get)
+{
+ Arena<int> arena(3);
+ EXPECT_EQ(arena.capacity(), 3);
+ auto i1 = arena.insert(1);
+ auto i2 = arena.insert(2);
+ EXPECT_EQ(arena.capacity(), 3);
+ EXPECT_EQ(arena.size(), 2);
+ (*arena.get(i1)).get() = 5;
+ EXPECT_EQ(arena.get(i1), 5);
+ EXPECT_EQ(arena.get(i2), 2);
+}
+
+TEST(generational_arena, GetNoGen)
+{
+ Arena<int> arena(3);
+ EXPECT_EQ(arena.capacity(), 3);
+ auto i1 = arena.insert(1);
+ auto i2 = arena.insert(2);
+ EXPECT_EQ(arena.capacity(), 3);
+ EXPECT_EQ(arena.size(), 2);
+ (*arena.get_no_gen(0)).get() = 5;
+ EXPECT_EQ(arena.get(i1), 5);
+ EXPECT_EQ(arena.get(i2), 2);
+ EXPECT_EQ(arena.get_no_gen(1), 2);
+ EXPECT_EQ(arena.get_no_gen(2), std::nullopt);
+}
+
+TEST(generational_arena, GetNoGenIndex)
+{
+ Arena<int> arena(3);
+ EXPECT_EQ(arena.capacity(), 3);
+ auto i1 = arena.insert(1);
+ auto i2 = arena.insert(2);
+ EXPECT_EQ(arena.capacity(), 3);
+ EXPECT_EQ(arena.size(), 2);
+ EXPECT_EQ(arena.get_no_gen_index(0), i1);
+ EXPECT_EQ(arena.get_no_gen_index(1), i2);
+ EXPECT_EQ(arena.get_no_gen(2), std::nullopt);
+}
+
} /* namespace blender::tests */
More information about the Bf-blender-cvs
mailing list