|
32 | 32 |
|
33 | 33 | using namespace chip;
|
34 | 34 | using namespace chip::app::DataModel;
|
| 35 | +using namespace chip::app::DataModel::detail; |
35 | 36 |
|
36 | 37 | namespace {
|
37 | 38 |
|
@@ -204,4 +205,65 @@ TEST_F(TestMetadataList, ListBuilderConvertersWorks)
|
204 | 205 | }
|
205 | 206 | }
|
206 | 207 |
|
| 208 | +TEST_F(TestMetadataList, BufferMoveOperationsWork) |
| 209 | +{ |
| 210 | + |
| 211 | + { |
| 212 | + ListBuilder<int> list; |
| 213 | + |
| 214 | + ASSERT_EQ(list.EnsureAppendCapacity(3), CHIP_NO_ERROR); |
| 215 | + |
| 216 | + list.Append(10); |
| 217 | + list.Append(11); |
| 218 | + list.Append(12); |
| 219 | + |
| 220 | + // Get a ListBuilder base class object |
| 221 | + GenericAppendOnlyBuffer originalBuffer{ static_cast<GenericAppendOnlyBuffer &&>(std::move(list)) }; |
| 222 | + |
| 223 | + ASSERT_EQ(originalBuffer.Size(), size_t{ 3 }); |
| 224 | + ASSERT_FALSE(originalBuffer.IsEmpty()); |
| 225 | + |
| 226 | + /// move constructor called for the second time here |
| 227 | + GenericAppendOnlyBuffer newBuffer{ std::move(originalBuffer) }; |
| 228 | + |
| 229 | + ASSERT_EQ(originalBuffer.Size(), size_t{ 0 }); |
| 230 | + ASSERT_TRUE(originalBuffer.IsEmpty()); |
| 231 | + |
| 232 | + ASSERT_EQ(newBuffer.Size(), size_t{ 3 }); |
| 233 | + ASSERT_FALSE(newBuffer.IsEmpty()); |
| 234 | + } |
| 235 | + |
| 236 | + { |
| 237 | + ListBuilder<int> list1; |
| 238 | + |
| 239 | + ASSERT_EQ(list1.EnsureAppendCapacity(3), CHIP_NO_ERROR); |
| 240 | + |
| 241 | + list1.Append(10); |
| 242 | + list1.Append(11); |
| 243 | + list1.Append(12); |
| 244 | + |
| 245 | + ListBuilder<int> list2; |
| 246 | + |
| 247 | + ASSERT_EQ(list2.EnsureAppendCapacity(2), CHIP_NO_ERROR); |
| 248 | + |
| 249 | + list2.Append(20); |
| 250 | + list2.Append(21); |
| 251 | + |
| 252 | + // Get a ListBuilder base class object |
| 253 | + GenericAppendOnlyBuffer originalBuffer{ static_cast<GenericAppendOnlyBuffer &&>(std::move(list1)) }; |
| 254 | + |
| 255 | + // Get another ListBuilder base class object |
| 256 | + GenericAppendOnlyBuffer anotherBuffer{ static_cast<GenericAppendOnlyBuffer &&>(std::move(list2)) }; |
| 257 | + |
| 258 | + ASSERT_EQ(originalBuffer.Size(), size_t{ 3 }); |
| 259 | + ASSERT_EQ(anotherBuffer.Size(), size_t{ 2 }); |
| 260 | + |
| 261 | + // move assignemnt operator called here |
| 262 | + originalBuffer = std::move(anotherBuffer); |
| 263 | + |
| 264 | + ASSERT_EQ(originalBuffer.Size(), size_t{ 2 }); |
| 265 | + ASSERT_EQ(anotherBuffer.Size(), size_t{ 0 }); |
| 266 | + ASSERT_TRUE(anotherBuffer.IsEmpty()); |
| 267 | + } |
| 268 | +} |
207 | 269 | } // namespace
|
0 commit comments