//--------------------------------------------------------------------------- // @function: // CJoinOrderDP::DConnectedness // // @doc: // Return connectedness measure of given component // //--------------------------------------------------------------------------- CDouble CJoinOrderDP::DConnectedness ( ULONG ulComp ) { CBitSet *pbsConnected = GPOS_NEW(m_pmp) CBitSet(m_pmp); for (ULONG ul = 0; ul < m_ulEdges; ul++) { SEdge *pedge = m_rgpedge[ul]; if (pedge->m_pbs->FBit(ulComp)) { pbsConnected->Union(pedge->m_pbs); } } (void) pbsConnected->FExchangeClear(ulComp); DOUBLE dConnectedness = (DOUBLE) pbsConnected->CElements() / m_ulComps; pbsConnected->Release(); return CDouble(dConnectedness); }
//--------------------------------------------------------------------------- // @function: // CBitSetTest::EresUnittest_Removal // // @doc: // Cleanup test // //--------------------------------------------------------------------------- GPOS_RESULT CBitSetTest::EresUnittest_Removal() { // create memory pool CAutoMemoryPool amp; IMemoryPool *pmp = amp.Pmp(); ULONG cSizeBits = 32; CBitSet *pbs = GPOS_NEW(pmp) CBitSet(pmp, cSizeBits); CBitSet *pbsEmpty = GPOS_NEW(pmp) CBitSet(pmp, cSizeBits); GPOS_ASSERT(pbs->FEqual(pbsEmpty)); GPOS_ASSERT(pbsEmpty->FEqual(pbs)); ULONG cInserts = 10; for (ULONG i = 0; i < cInserts; i++) { pbs->FExchangeSet(i * cSizeBits); GPOS_ASSERT(i + 1 == pbs->CElements()); } for (ULONG i = 0; i < cInserts; i++) { // cleans up empty links pbs->FExchangeClear(i * cSizeBits); GPOS_ASSERT(cInserts - i - 1 == pbs->CElements()); } GPOS_ASSERT(pbs->FEqual(pbsEmpty)); GPOS_ASSERT(pbsEmpty->FEqual(pbs)); pbs->Release(); pbsEmpty->Release(); return GPOS_OK; }