Ejemplo n.º 1
0
CSeq_entry_Handle
CBioseq_Handle::GetExactComplexityLevel(CBioseq_set::EClass cls) const
{
    CSeq_entry_Handle ret = GetComplexityLevel(cls);
    if ( ret  &&
         (!ret.IsSet()  ||  !ret.GetSet().IsSetClass()  ||
         ret.GetSet().GetClass() != cls) ) {
        ret.Reset();
    }
    return ret;
}
Ejemplo n.º 2
0
int CTestApplication::Run()
//---------------------------------------------------------------------------
{
    int error = 0;

    string name1("DL_1"), name2("DL_2");

NcbiCout << "1.1.1 Creating CScope ==============================" << NcbiEndl;
{
    {
        CRef< CObjectManager> pOm = CObjectManager::GetInstance();
        {
            CTestDataLoader::RegisterInObjectManager
                (*pOm, name1, CObjectManager::eNonDefault);
            CTestDataLoader::RegisterInObjectManager
                (*pOm, name2, CObjectManager::eDefault);

            // scope in CRef container
            CRef< CScope> pScope1(new CScope(*pOm));
            pScope1->AddDefaults(); // loader 2 added
            pScope1->AddDataLoader(name1);
            // scope on the stack
            CScope scope2(*pOm);
            scope2.AddDefaults(); // loader 2 added
            // scope on the heap
            CScope* pScope3 = new CScope(*pOm);
            pScope3->AddDefaults(); // loader 2 added
            delete pScope3; //  loader 2 alive
        }
        // scopes deleted, all dataloaders alive
        pOm->RevokeDataLoader(name1);
        pOm->RevokeDataLoader(name2);
    }
// objmgr deleted, all dataloaders deleted
}
NcbiCout << "1.1.2 Adding Seq_entry to the scope=================" << NcbiEndl;
{
    {
        CRef< CObjectManager> pOm = CObjectManager::GetInstance();
        {
            // 3 scopes
            CRef< CScope> pScope1(new CScope(*pOm));
            CScope scope2(*pOm);
            CRef<CScope> pScope3(new CScope(*pOm));
            CRef< CSeq_entry> pEntry = CreateTestEntry();
            // add entry to all scopes
            pScope1->AddTopLevelSeqEntry( *pEntry);
            scope2.AddTopLevelSeqEntry( *pEntry);
            CSeq_entry_Handle eh = pScope3->AddTopLevelSeqEntry( *pEntry);

            pScope1.Reset();
            pScope3.Reset();
            eh.Reset();
            //delete pScope3; // data source and seq_entry alive
        }
        // scopes deleted, seq_entry and data source deleted
    }
// objmgr deleted
}
NcbiCout << "1.1.3 Handling Data loader==========================" << NcbiEndl;
{
    {
        CRef< CObjectManager> pOm = CObjectManager::GetInstance();
        {
            CScope* pScope1 = new CScope(*pOm);
            pScope1->AddDefaults(); // nothing added
            // must throw an exception: dataloader1 not found
            NcbiCout << "Expecting exception:" << NcbiEndl;
            try {
                pScope1->AddDataLoader( name1);
                NcbiCout << "ERROR: AddDataLoader has succeeded" << NcbiEndl;
                error += 1;
            }
            catch (exception& e) {
                NcbiCout << "Expected exception: " << e.what() << NcbiEndl;
            }
            CTestDataLoader::RegisterInObjectManager(*pOm, name1);
            pScope1->AddDefaults(); // nothing added
            pScope1->AddDataLoader( name1); // ok
            // must fail - dataloader1 is in use
            NcbiCout << "Expecting error:" << NcbiEndl;
            if (pOm->RevokeDataLoader( name1))
            {
                NcbiCout << "ERROR: RevokeDataLoader has succeeded" << NcbiEndl;
                error += 2;
            }
            delete pScope1; // loader1 alive
            // delete dataloader1
            pOm->RevokeDataLoader( name1); // ok
            // must throw an exception - dataloader1 not registered
            NcbiCout << "Expecting exception:" << NcbiEndl;
            try {
                pOm->RevokeDataLoader( name1);
                NcbiCout << "ERROR: RevokeDataLoader has succeeded" << NcbiEndl;
                error += 4;
            }
            catch (exception& e) {
                NcbiCout << "Expected exception: " << e.what() << NcbiEndl;
            }
        }
    }
}
{
    SAnnotSelector sel;
    map<string, set<int> > nav;
    vector<string> aa;
    for ( int i = 0; i < 100; ++i ) {
        string acc = "NA"+NStr::IntToString(rand()%1000);
        if ( nav.count(acc) ) continue;
        aa.push_back(acc);
        set<int>& vv = nav[acc];
        int nv = rand()%4;
        for ( int j = 0; j < nv; ++j ) {
            int v = rand()%10;
            vv.insert(v);
            string accv = acc+"."+NStr::IntToString(v);
            sel.IncludeNamedAnnotAccession(accv);
            //NcbiCout << "IncludeNamedAnnotAccession("<<accv<<")"<<NcbiEndl;
        }
        if ( nv == 0 ) {
            sel.IncludeNamedAnnotAccession(acc);
            //NcbiCout << "IncludeNamedAnnotAccession("<<acc<<")"<<NcbiEndl;
        }
    }
    for ( size_t t = 0; t < aa.size(); ++t ) {
        string acc = aa[t];
        acc[acc.size()-1]--;
        for ( int t1 = 0; t1 < 2; ++t1, acc[acc.size()-1]++ ) {
            const set<int>* vv = nav.count(acc)? &nav[acc]: 0;
            //NcbiCout << "IsIncludedNamedAnnotAccession("<<acc<<") "<< (vv?vv->size():0) <<NcbiEndl;
            if ( !vv || !vv->empty() ) {
                assert(!sel.IsIncludedNamedAnnotAccession(acc));
            }
            else {
                assert(sel.IsIncludedNamedAnnotAccession(acc));
            }
            for ( int s = 0; s < 100; ++s ) {
                int v = rand()%10;
                string accv = acc+"."+NStr::IntToString(v);
                //NcbiCout<<"IsIncludedNamedAnnotAccession("<<accv<<")"<<NcbiEndl;
                if ( !vv || (!vv->empty() && !vv->count(v)) ) {
                    assert(!sel.IsIncludedNamedAnnotAccession(accv));
                }
                else {
                    assert(sel.IsIncludedNamedAnnotAccession(accv));
                }
            }
        }
    }
}
if ( error > 0 ) {
NcbiCout << "==================================================" << NcbiEndl;
 NcbiCout << "ERROR " << error << ": Some tests failed." << NcbiEndl;
}
else {
NcbiCout << "==================================================" << NcbiEndl;
NcbiCout << "Test completed successfully" << NcbiEndl;
}
    return error;
}