diff options
author | Jacques Lucke <jacques@blender.org> | 2020-10-29 17:19:32 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2020-10-29 17:19:43 +0300 |
commit | 09be2a83580faaf4fa9b87da2632ab51d0934235 (patch) | |
tree | c18459dc024d1efef8848cb1873b0479c295b4b3 /source/blender/blenlib/tests/BLI_map_test.cc | |
parent | 569b7c28212b2c77ca4c6b530131de5fa8e73a95 (diff) |
BLI: use forwarding reference in Map
The is necessary when Map.add_or_modify is called with callbacks that
return a reference.
Diffstat (limited to 'source/blender/blenlib/tests/BLI_map_test.cc')
-rw-r--r-- | source/blender/blenlib/tests/BLI_map_test.cc | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/source/blender/blenlib/tests/BLI_map_test.cc b/source/blender/blenlib/tests/BLI_map_test.cc index 91c6335b949..e61d638c681 100644 --- a/source/blender/blenlib/tests/BLI_map_test.cc +++ b/source/blender/blenlib/tests/BLI_map_test.cc @@ -295,6 +295,24 @@ TEST(map, AddOrModify) EXPECT_EQ(map.lookup(1), 15.0f); } +TEST(map, AddOrModifyReference) +{ + Map<int, std::unique_ptr<int>> map; + auto create_func = [](std::unique_ptr<int> *value) -> int & { + new (value) std::unique_ptr<int>(new int{10}); + return **value; + }; + auto modify_func = [](std::unique_ptr<int> *value) -> int & { + **value += 5; + return **value; + }; + EXPECT_EQ(map.add_or_modify(1, create_func, modify_func), 10); + int &a = map.add_or_modify(1, create_func, modify_func); + EXPECT_EQ(a, 15); + a = 100; + EXPECT_EQ(*map.lookup(1), 100); +} + TEST(map, AddOverwrite) { Map<int, float> map; |