summaryrefslogtreecommitdiff
path: root/deps/v8/test/unittests/heap/cppgc/member-unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/unittests/heap/cppgc/member-unittest.cc')
-rw-r--r--deps/v8/test/unittests/heap/cppgc/member-unittest.cc35
1 files changed, 35 insertions, 0 deletions
diff --git a/deps/v8/test/unittests/heap/cppgc/member-unittest.cc b/deps/v8/test/unittests/heap/cppgc/member-unittest.cc
index bddac760a5..64934d69cd 100644
--- a/deps/v8/test/unittests/heap/cppgc/member-unittest.cc
+++ b/deps/v8/test/unittests/heap/cppgc/member-unittest.cc
@@ -147,6 +147,41 @@ TEST_F(MemberTest, Swap) {
template <template <typename> class MemberType1,
template <typename> class MemberType2>
+void MoveTest(cppgc::Heap* heap) {
+ {
+ GCed* gced1 = MakeGarbageCollected<GCed>(heap->GetAllocationHandle());
+ MemberType1<GCed> member1 = gced1;
+ MemberType2<GCed> member2(std::move(member1));
+ // Move-from member must be in empty state.
+ EXPECT_FALSE(member1);
+ EXPECT_EQ(gced1, member2.Get());
+ }
+ {
+ GCed* gced1 = MakeGarbageCollected<GCed>(heap->GetAllocationHandle());
+ MemberType1<GCed> member1 = gced1;
+ MemberType2<GCed> member2;
+ member2 = std::move(member1);
+ // Move-from member must be in empty state.
+ EXPECT_FALSE(member1);
+ EXPECT_EQ(gced1, member2.Get());
+ }
+}
+
+TEST_F(MemberTest, Move) {
+ cppgc::Heap* heap = GetHeap();
+ MoveTest<Member, Member>(heap);
+ MoveTest<Member, WeakMember>(heap);
+ MoveTest<Member, UntracedMember>(heap);
+ MoveTest<WeakMember, Member>(heap);
+ MoveTest<WeakMember, WeakMember>(heap);
+ MoveTest<WeakMember, UntracedMember>(heap);
+ MoveTest<UntracedMember, Member>(heap);
+ MoveTest<UntracedMember, WeakMember>(heap);
+ MoveTest<UntracedMember, UntracedMember>(heap);
+}
+
+template <template <typename> class MemberType1,
+ template <typename> class MemberType2>
void HeterogeneousConversionTest(cppgc::Heap* heap) {
{
MemberType1<GCed> member1 =