Exemple #1
0
void TestDetSet::inserting() {

  DSTV detsets(2);
  unsigned int ntot=0;
  for (unsigned int n=1;n<5;++n) {
    ntot+=n;
    unsigned int id=20+n;
    DST df = detsets.insert(id,n);
    CPPUNIT_ASSERT(detsets.size()==n);
    CPPUNIT_ASSERT(detsets.dataSize()==ntot);
    CPPUNIT_ASSERT(detsets.detsetSize(n-1)==n);
    CPPUNIT_ASSERT(df.size()==n);
    CPPUNIT_ASSERT(df.id()==id);

    std::copy(sv.begin(),sv.begin()+n,df.begin());

    std::vector<DST::data_type> v1(n);
    std::vector<DST::data_type> v2(n);
    std::copy(detsets.m_data.begin()+ntot-n,detsets.m_data.begin()+ntot,v2.begin());
    std::copy(sv.begin(),sv.begin()+n,v1.begin());
    CPPUNIT_ASSERT(v1==v2);
  }

  // test error conditions
  try {
    detsets.insert(22,6);
    CPPUNIT_ASSERT("insert did not throw"==0);
  }
  catch (edm::Exception const & err) {
    CPPUNIT_ASSERT(err.categoryCode()==edm::errors::InvalidReference);
  }
}
Exemple #2
0
bool RegionInfo::isRegion(BasicBlock *entry, BasicBlock *exit) const {
  assert(entry && exit && "entry and exit must not be null!");
  typedef DominanceFrontier::DomSetType DST;

  DST *entrySuccs = &DF->find(entry)->second;

  // Exit is the header of a loop that contains the entry. In this case,
  // the dominance frontier must only contain the exit.
  if (!DT->dominates(entry, exit)) {
    for (DST::iterator SI = entrySuccs->begin(), SE = entrySuccs->end();
         SI != SE; ++SI)
      if (*SI != exit && *SI != entry)
        return false;

    return true;
  }

  DST *exitSuccs = &DF->find(exit)->second;

  // Do not allow edges leaving the region.
  for (DST::iterator SI = entrySuccs->begin(), SE = entrySuccs->end();
       SI != SE; ++SI) {
    if (*SI == exit || *SI == entry)
      continue;
    if (exitSuccs->find(*SI) == exitSuccs->end())
      return false;
    if (!isCommonDomFrontier(*SI, entry, exit))
      return false;
  }

  // Do not allow edges pointing into the region.
  for (DST::iterator SI = exitSuccs->begin(), SE = exitSuccs->end();
       SI != SE; ++SI)
    if (DT->properlyDominates(entry, *SI) && *SI != exit)
      return false;


  return true;
}
Exemple #3
0
void TestDetSet::toRangeMap() {
  DSTV detsets(2);
  for (unsigned int n=1;n<5;++n) {
    unsigned int id=20+n;
    FF ff(detsets,id);
    ff.resize(n);
    std::copy(sv.begin(),sv.begin()+n,ff.begin());
  }
  {
    FF ff(detsets,31);
    ff.resize(2);
    std::copy(sv.begin(),sv.begin()+2,ff.begin());
  }
  {
    FF ff(detsets,11);
    ff.resize(2);
    std::copy(sv.begin(),sv.begin()+2,ff.begin());
  }
  {
    FF ff(detsets,34);
    ff.resize(4);
    std::copy(sv.begin(),sv.begin()+4,ff.begin());
  }

  typedef edm::RangeMap<det_id_type, edm::OwnVector<B> > RM;
  edm::RangeMap<det_id_type, edm::OwnVector<B> > rm;
  try {
    edmNew::copy(detsets,rm);
    rm.post_insert();
    std::vector<det_id_type> ids = rm.ids();
    CPPUNIT_ASSERT(ids.size()==detsets.size());
    CPPUNIT_ASSERT(rm.size()==detsets.dataSize());
    for (int i=0; i<int(ids.size()); i++) {
      RM::range r = rm.get(ids[i]);
      DST df = *detsets.find(ids[i]);
      //      DST df = *detsets.find(ids[i],true);
      CPPUNIT_ASSERT(static_cast<unsigned long>(r.second-r.first)==df.size());
      CPPUNIT_ASSERT(std::equal(r.first,r.second,df.begin()));
    }
  }
  catch (edm::Exception const & err) {
    std::cout << err.what() << std::endl;
    CPPUNIT_ASSERT(err.what()==0);
  }
}