|
8 | 8 | using namespace test_utils; |
9 | 9 | using namespace rtl; |
10 | 10 |
|
| 11 | +// TODO: Refine these, remove moot cases after this-> UPDATE: MOVING DISALLOWED NOW. |
| 12 | + |
11 | 13 | namespace rtl::unit_test |
12 | 14 | { |
13 | 15 | TEST(RObject_reflecting_unique_ptr, clone_on__heap_stack) |
@@ -63,10 +65,8 @@ namespace rtl::unit_test |
63 | 65 | // Access the moved-out value |
64 | 66 | EXPECT_EQ(*uptr, NUM); |
65 | 67 |
|
| 68 | + // this is compile error now. |
66 | 69 | //int* ptr = uptr.release(); |
67 | | - //// Addresses must be same. |
68 | | - //EXPECT_EQ(numPtr, ptr); |
69 | | - //delete ptr; //RTL must not delete again, once 'robj' out of scope. |
70 | 70 | } |
71 | 71 | // there must not be any crash. |
72 | 72 | ASSERT_TRUE(rtl::getRtlManagedHeapInstanceCount() == 0); |
@@ -151,33 +151,6 @@ namespace rtl::unit_test |
151 | 151 |
|
152 | 152 | // RTL still owns it |
153 | 153 | ASSERT_TRUE(rtl::getRtlManagedHeapInstanceCount() == 1); |
154 | | - |
155 | | - // RObject still exists with correct metadata, but the stored unique_ptr is now empty |
156 | | - ASSERT_FALSE(robj.isEmpty()); |
157 | | - |
158 | | - // UPDATE: MOVING DISALLOWED NOW. |
159 | | - // Any subsequent view will still be obtainable |
160 | | - auto view3 = robj.view<std::unique_ptr<int>>(); |
161 | | - ASSERT_TRUE(view3); |
162 | | - |
163 | | - // UPDATE: MOVING DISALLOWED NOW. |
164 | | - // But the unique_ptr inside is now empty due to the earlier move |
165 | | - const std::unique_ptr<int>& uptr3 = view3->get(); |
166 | | - //ASSERT_TRUE(uptr3 == nullptr); |
167 | | - |
168 | | - // UPDATE: MOVING DISALLOWED NOW. |
169 | | - // All earlier views now yield empty unique_ptrs as well- no dangling pointers, no UB |
170 | | - const std::unique_ptr<int>& uptr2 = view2->get(); |
171 | | - //ASSERT_TRUE(uptr3 == nullptr); |
172 | | - |
173 | | - // UPDATE: MOVING DISALLOWED NOW. |
174 | | - const std::unique_ptr<int>& uptr1 = view1->get(); |
175 | | - //ASSERT_TRUE(uptr3 == nullptr); |
176 | | - |
177 | | - // UPDATE: MOVING DISALLOWED NOW. |
178 | | - // Even reusing the moved-from view0 is safe- just returns empty |
179 | | - const std::unique_ptr<int>& uptr00 = view0->get(); |
180 | | - //ASSERT_TRUE(uptr00 == nullptr); |
181 | 154 | } |
182 | 155 |
|
183 | 156 |
|
@@ -235,29 +208,6 @@ namespace rtl::unit_test |
235 | 208 | ASSERT_TRUE(rtl::getRtlManagedHeapInstanceCount() == 1); |
236 | 209 | // Node still exists. |
237 | 210 | EXPECT_TRUE(Node::instanceCount() == 1); |
238 | | - |
239 | | - // Any subsequent view will still be obtainable |
240 | | - auto view3 = robj.view<std::unique_ptr<Node>>(); |
241 | | - ASSERT_TRUE(view3); |
242 | | - |
243 | | - // UPDATE: MOVING DISALLOWED NOW. |
244 | | - // But the unique_ptr inside is now empty due to the earlier move |
245 | | - const std::unique_ptr<Node>& uptr3 = view3->get(); |
246 | | - //ASSERT_TRUE(uptr3 == nullptr); |
247 | | - |
248 | | - // UPDATE: MOVING DISALLOWED NOW. |
249 | | - // All earlier views now yield empty unique_ptrs as well- no dangling pointers, no UB |
250 | | - const std::unique_ptr<Node>& uptr2 = view2->get(); |
251 | | - //ASSERT_TRUE(uptr3 == nullptr); |
252 | | - |
253 | | - // UPDATE: MOVING DISALLOWED NOW. |
254 | | - const std::unique_ptr<Node>& uptr1 = view1->get(); |
255 | | - //ASSERT_TRUE(uptr3 == nullptr); |
256 | | - |
257 | | - // UPDATE: MOVING DISALLOWED NOW. |
258 | | - // Even reusing the moved-from view0 is safe- just returns empty |
259 | | - const std::unique_ptr<Node>& uptr00 = view0->get(); |
260 | | - //ASSERT_TRUE(uptr00 == nullptr); |
261 | 211 | } |
262 | 212 | EXPECT_TRUE(Node::instanceCount() == 1); |
263 | 213 | ASSERT_TRUE(rtl::getRtlManagedHeapInstanceCount() == 1); |
@@ -293,19 +243,14 @@ namespace rtl::unit_test |
293 | 243 | { |
294 | 244 | // Get a view of the view as `shared_ptr<int>` |
295 | 245 | auto view = robj.view<std::shared_ptr<Node>>(); |
296 | | - ASSERT_FALSE(view); |
| 246 | + EXPECT_FALSE(view); |
297 | 247 | } |
298 | 248 | // Check if RObject can reflect as `unique_ptr<Node>` |
299 | 249 | EXPECT_TRUE(robj.canViewAs<std::unique_ptr<Node>>()); |
300 | 250 | { |
301 | 251 | // Get a view of the view as `shared_ptr<int>` |
302 | 252 | auto view = robj.view<std::unique_ptr<Node>>(); |
303 | 253 | EXPECT_TRUE(view); |
304 | | - ASSERT_TRUE(rtl::getRtlManagedHeapInstanceCount() != 0); |
305 | | - { |
306 | | - // UPDATE: MOVING DISALLOWED NOW. |
307 | | - const std::unique_ptr<Node>& movedOutPtr = view->get(); |
308 | | - } |
309 | 254 | EXPECT_TRUE(rtl::getRtlManagedHeapInstanceCount() == 1); |
310 | 255 | EXPECT_TRUE(Node::instanceCount() == 1); |
311 | 256 | } |
@@ -347,11 +292,6 @@ namespace rtl::unit_test |
347 | 292 | // Get a view of the view as `shared_ptr<int>` |
348 | 293 | auto view = robj.view<std::unique_ptr<Node>>(); |
349 | 294 | EXPECT_TRUE(view); |
350 | | - ASSERT_TRUE(rtl::getRtlManagedHeapInstanceCount() != 0); |
351 | | - { |
352 | | - // UPDATE: MOVING DISALLOWED NOW. |
353 | | - const std::unique_ptr<Node>& movedOutPtr = view->get(); |
354 | | - } |
355 | 295 | EXPECT_TRUE(rtl::getRtlManagedHeapInstanceCount() == 1); |
356 | 296 | EXPECT_TRUE(Node::instanceCount() == 1); |
357 | 297 | } |
@@ -386,7 +326,7 @@ namespace rtl::unit_test |
386 | 326 | ASSERT_FALSE(robj.isEmpty()); |
387 | 327 |
|
388 | 328 | // UPDATE: MOVING DISALLOWED NOW. |
389 | | - const std::unique_ptr<Node>& uptrNode = std::move(view->get()); |
| 329 | + const std::unique_ptr<Node>& uptrNode = view->get(); |
390 | 330 | EXPECT_EQ(uptrNode->data(), NUM); |
391 | 331 | } |
392 | 332 | } |
|
0 commit comments