| Index: Source/heap/HeapTest.cpp
 | 
| diff --git a/Source/heap/HeapTest.cpp b/Source/heap/HeapTest.cpp
 | 
| index 23caa3aae064712c8e95941555759e545255528e..aef2706550a0da550e18ed3035d57eb237730e66 100644
 | 
| --- a/Source/heap/HeapTest.cpp
 | 
| +++ b/Source/heap/HeapTest.cpp
 | 
| @@ -2240,6 +2240,66 @@ TEST(HeapTest, VisitOffHeapCollections)
 | 
|      EXPECT_EQ(7, IntWrapper::s_destructorCalls);
 | 
|  }
 | 
|  
 | 
| +TEST(HeapTest, PersistentHeapCollectionTypes)
 | 
| +{
 | 
| +    HeapStats initialHeapSize;
 | 
| +    IntWrapper::s_destructorCalls = 0;
 | 
| +
 | 
| +    typedef HeapVector<Member<IntWrapper> > Vec;
 | 
| +    typedef PersistentHeapVector<Member<IntWrapper> > PVec;
 | 
| +    typedef PersistentHeapHashSet<Member<IntWrapper> > PSet;
 | 
| +    typedef PersistentHeapHashMap<Member<IntWrapper>, Member<IntWrapper> > PMap;
 | 
| +
 | 
| +    clearOutOldGarbage(&initialHeapSize);
 | 
| +    {
 | 
| +        PVec* pVec = new PVec();
 | 
| +        PSet* pSet = new PSet();
 | 
| +        PMap* pMap = new PMap();
 | 
| +
 | 
| +        IntWrapper* one(IntWrapper::create(1));
 | 
| +        IntWrapper* two(IntWrapper::create(2));
 | 
| +        IntWrapper* three(IntWrapper::create(3));
 | 
| +        IntWrapper* four(IntWrapper::create(4));
 | 
| +        IntWrapper* five(IntWrapper::create(5));
 | 
| +        IntWrapper* six(IntWrapper::create(6));
 | 
| +
 | 
| +        pVec->append(one);
 | 
| +        pVec->append(two);
 | 
| +
 | 
| +        Vec* vec = new Vec();
 | 
| +        vec->swap(*pVec);
 | 
| +
 | 
| +        pVec->append(two);
 | 
| +        pVec->append(three);
 | 
| +
 | 
| +        pSet->add(four);
 | 
| +        pMap->add(five, six);
 | 
| +
 | 
| +        // Collect |map| and |two|.
 | 
| +        vec = 0;
 | 
| +        Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
 | 
| +        EXPECT_EQ(1, IntWrapper::s_destructorCalls);
 | 
| +
 | 
| +        EXPECT_EQ(2u, pVec->size());
 | 
| +        EXPECT_TRUE(pVec->at(0) == two);
 | 
| +        EXPECT_TRUE(pVec->at(1) == three);
 | 
| +
 | 
| +        EXPECT_EQ(1u, pSet->size());
 | 
| +        EXPECT_TRUE(pSet->contains(four));
 | 
| +
 | 
| +        EXPECT_EQ(1u, pMap->size());
 | 
| +        EXPECT_TRUE(pMap->get(five) == six);
 | 
| +
 | 
| +        delete pVec;
 | 
| +        delete pSet;
 | 
| +        delete pMap;
 | 
| +    }
 | 
| +
 | 
| +    // Collect previous roots.
 | 
| +    Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
 | 
| +    EXPECT_EQ(6, IntWrapper::s_destructorCalls);
 | 
| +}
 | 
| +
 | 
|  DEFINE_GC_INFO(Bar);
 | 
|  DEFINE_GC_INFO(Baz);
 | 
|  DEFINE_GC_INFO(ClassWithMember);
 | 
| 
 |