test_objmgr_mt.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:11k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: test_objmgr_mt.cpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/01 19:25:20  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.26
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: test_objmgr_mt.cpp,v 1000.3 2004/06/01 19:25:20 gouriano Exp $
  10. * ===========================================================================
  11. *
  12. *                            PUBLIC DOMAIN NOTICE
  13. *               National Center for Biotechnology Information
  14. *
  15. *  This software/database is a "United States Government Work" under the
  16. *  terms of the United States Copyright Act.  It was written as part of
  17. *  the author's official duties as a United States Government employee and
  18. *  thus cannot be copyrighted.  This software/database is freely available
  19. *  to the public for use. The National Library of Medicine and the U.S.
  20. *  Government have not placed any restriction on its use or reproduction.
  21. *
  22. *  Although all reasonable efforts have been taken to ensure the accuracy
  23. *  and reliability of the software and data, the NLM and the U.S.
  24. *  Government do not and cannot warrant the performance or results that
  25. *  may be obtained by using this software or data. The NLM and the U.S.
  26. *  Government disclaim all warranties, express or implied, including
  27. *  warranties of performance, merchantability or fitness for any particular
  28. *  purpose.
  29. *
  30. *  Please cite the author in any work or product based on this material.
  31. *
  32. * ===========================================================================
  33. *
  34. * Authors:  Eugene Vasilchenko, Aleksey Grichenko, Denis Vakatov
  35. *
  36. * File Description:
  37. *   Test the functionality of C++ object manager in MT mode
  38. *
  39. * ===========================================================================
  40. */
  41. #include <ncbi_pch.hpp>
  42. #include <corelib/ncbistd.hpp>
  43. #include <corelib/ncbiapp.hpp>
  44. #include <corelib/ncbienv.hpp>
  45. #include <corelib/ncbiargs.hpp>
  46. #include <corelib/ncbitime.hpp>
  47. #include <corelib/ncbithr.hpp>
  48. #include <corelib/test_mt.hpp>
  49. #include <objects/seqloc/Seq_id.hpp>
  50. #include <objects/seqset/Seq_entry.hpp>
  51. #include <objects/seq/Seq_annot.hpp>
  52. #include "test_helper.hpp"
  53. BEGIN_NCBI_SCOPE
  54. using namespace objects;
  55. /////////////////////////////////////////////////////////////////////////////
  56. //
  57. //  Test application
  58. //
  59. class CTestObjectManager : public CThreadedApp
  60. {
  61. protected:
  62.     virtual bool Thread_Run(int idx);
  63.     virtual bool TestApp_Init(void);
  64.     virtual bool TestApp_Exit(void);
  65.     virtual bool TestApp_Args(CArgDescriptions& args);
  66.     CRef<CObjectManager> m_ObjMgr;
  67.     CRef<CScope> m_Scope;
  68. };
  69. /////////////////////////////////////////////////////////////////////////////
  70. bool CTestObjectManager::Thread_Run(int idx)
  71. {
  72.     ++idx;
  73.     // Test global scope
  74.     // read data from a scope, which is shared by all threads
  75.     CTestHelper::TestDataRetrieval(*m_Scope, 0, 0);
  76.     // add more data to the global scope
  77.     CRef<CSeq_entry> entry1(&CDataGenerator::CreateTestEntry1(idx));
  78.     CRef<CSeq_entry> entry2(&CDataGenerator::CreateTestEntry2(idx));
  79.     m_Scope->AddTopLevelSeqEntry(*entry1);
  80.     m_Scope->AddTopLevelSeqEntry(*entry2);
  81.     CTestHelper::TestDataRetrieval(*m_Scope, idx, 0);
  82.     // Test local scope
  83.     // 1.2.5 add annotation to one sequence
  84.     // verify that others did not change
  85.     {
  86.         CScope scope(*m_ObjMgr);
  87.         // create new seq.entries - to be able to check unresolved lengths
  88.         CRef<CSeq_entry> entry1(&CDataGenerator::CreateTestEntry1(idx));
  89.         CRef<CSeq_entry> entry2(&CDataGenerator::CreateTestEntry2(idx));
  90.         scope.AddTopLevelSeqEntry(*entry1);
  91.         scope.AddTopLevelSeqEntry(*entry2);
  92.         CRef<CSeq_annot> annot(&CDataGenerator::CreateAnnotation1(idx));
  93.         scope.AttachAnnot(*entry1, *annot);
  94.         CTestHelper::TestDataRetrieval(scope, idx, 1);
  95.         // 1.2.6. Constructed bio sequences
  96.         CSeq_id id;
  97.         {{
  98.             CRef<CSeq_entry> constr_entry
  99.                 (&CDataGenerator::CreateConstructedEntry( idx, 1));
  100.             scope.AddTopLevelSeqEntry(*constr_entry);
  101.             id.SetLocal().SetStr("constructed1");
  102.             CTestHelper::ProcessBioseq(scope, id, 27,
  103.                 "GCGGTACAATAACCTCAGCAGCAACAA", "",
  104.                 0, 5, 0, 0, 0, 0, 0, 0, 0, 0);
  105.         }}
  106.         {{
  107.             CRef<CSeq_entry> constr_entry
  108.                 (&CDataGenerator::CreateConstructedEntry( idx, 2));
  109.             scope.AddTopLevelSeqEntry(*constr_entry);
  110.             id.SetLocal().SetStr("constructed2");
  111.             CTestHelper::ProcessBioseq(scope, id, 27,
  112.                 "TACCGCCAATAACCTCAGCAGCAACAA", "",
  113.                 0, 5, 0, 0, 0, 0, 0, 0, 0, 0);
  114.         }}
  115.     }
  116.     // 1.2.7. one entry in two scopes
  117.     {
  118.         CScope Scope1(*m_ObjMgr);
  119.         CRef<CScope> pScope2(new CScope(*m_ObjMgr));
  120.         CRef<CSeq_entry> entry1(&CDataGenerator::CreateTestEntry1(idx));
  121.         CRef<CSeq_entry> entry2(&CDataGenerator::CreateTestEntry2(idx));
  122.         Scope1.AddTopLevelSeqEntry(*entry1);
  123.         Scope1.AddTopLevelSeqEntry(*entry2);
  124.         pScope2->AddTopLevelSeqEntry(*entry2);
  125.         // Test with unresolvable references
  126.         CSeq_id id;
  127.         id.SetGi(21+idx*1000);
  128.         CTestHelper::ProcessBioseq(*pScope2, id, 22,
  129.           "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
  130.           "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
  131.           1, -1, 1, 1, 0, 0, 1, 1, 0, 0, false, true);
  132.         // add more data to the scope - to make references resolvable
  133.         CRef<CSeq_entry> entry1a(&CDataGenerator::CreateTestEntry1a(idx));
  134.         pScope2->AddTopLevelSeqEntry(*entry1a);
  135.         // Test with resolvable references
  136.         id.SetGi(21+idx*1000);
  137.         CTestHelper::ProcessBioseq(*pScope2, id, 62,
  138.             "AAAAATTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTAAAAATTTTTTTTTTTT",
  139.             "TTTTTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATTTTTAAAAAAAAAAAA",
  140.             1, 2, 2, 1, 0, 0, 1, 1, 0, 0);
  141.         // 1.2.8. Test scope history
  142.         CRef<CSeq_entry> entry1b(&CDataGenerator::CreateTestEntry1(idx));
  143.         pScope2->AddTopLevelSeqEntry(*entry1b);
  144.         id.SetLocal().SetStr("seq"+NStr::IntToString(11+idx*1000));
  145.         // gi|11 from entry1a must be selected
  146.         CTestHelper::ProcessBioseq(*pScope2, id, 40,
  147.             "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
  148.             "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT",
  149.             0, 2, 2, 1, 0, 0, 1, 1, 0, 0);
  150.     }
  151.     return true;
  152. }
  153. bool CTestObjectManager::TestApp_Init(void)
  154. {
  155.     const CArgs& args = GetArgs();
  156.     CDataGenerator::sm_DumpEntries = args["dump_entries"];
  157.     CTestHelper::sm_DumpFeatures = args["dump_features"];
  158.     NcbiCout << "Testing ObjectManager (" << s_NumThreads << " threads)..." << NcbiEndl;
  159.     m_ObjMgr = new CObjectManager;
  160.     // Scope shared by all threads
  161.     m_Scope = new CScope(*m_ObjMgr);
  162.     CRef<CSeq_entry> entry1(&CDataGenerator::CreateTestEntry1(0));
  163.     CRef<CSeq_entry> entry2(&CDataGenerator::CreateTestEntry2(0));
  164.     m_Scope->AddTopLevelSeqEntry(*entry1);
  165.     m_Scope->AddTopLevelSeqEntry(*entry2);
  166.     return true;
  167. }
  168. bool CTestObjectManager::TestApp_Exit(void)
  169. {
  170.     NcbiCout << " Passed" << NcbiEndl << NcbiEndl;
  171.     return true;
  172. }
  173. bool CTestObjectManager::TestApp_Args(CArgDescriptions& args)
  174. {
  175.     // Prepare command line descriptions
  176.     args.AddFlag("dump_entries", "print all generated seq entries");
  177.     args.AddFlag("dump_features", "print all found features");
  178.     return true;
  179. }
  180. END_NCBI_SCOPE
  181. /////////////////////////////////////////////////////////////////////////////
  182. //  MAIN
  183. USING_NCBI_SCOPE;
  184. int main(int argc, const char* argv[])
  185. {
  186.     return CTestObjectManager().AppMain(argc, argv, 0, eDS_Default, 0);
  187. }
  188. /*
  189. * ---------------------------------------------------------------------------
  190. * $Log: test_objmgr_mt.cpp,v $
  191. * Revision 1000.3  2004/06/01 19:25:20  gouriano
  192. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.26
  193. *
  194. * Revision 1.26  2004/05/21 21:42:14  gorelenk
  195. * Added PCH ncbi_pch.hpp
  196. *
  197. * Revision 1.25  2004/04/01 20:18:12  grichenk
  198. * Added initialization of m_MultiId member.
  199. *
  200. * Revision 1.24  2004/03/31 22:35:17  grichenk
  201. * Fixed number of features found
  202. *
  203. * Revision 1.23  2003/11/04 16:21:37  grichenk
  204. * Updated CAnnotTypes_CI to map whole features instead of splitting
  205. * them by sequence segments.
  206. *
  207. * Revision 1.22  2003/05/09 20:28:03  grichenk
  208. * Changed warnings to info
  209. *
  210. * Revision 1.21  2003/04/24 16:12:39  vasilche
  211. * Object manager internal structures are splitted more straightforward.
  212. * Removed excessive header dependencies.
  213. *
  214. * Revision 1.20  2003/03/04 16:43:53  grichenk
  215. * +Test CFeat_CI with eResolve_All flag
  216. *
  217. * Revision 1.19  2002/12/26 16:39:24  vasilche
  218. * Object manager class CSeqMap rewritten.
  219. *
  220. * Revision 1.18  2002/11/04 21:29:14  grichenk
  221. * Fixed usage of const CRef<> and CRef<> constructor
  222. *
  223. * Revision 1.17  2002/07/12 18:34:56  grichenk
  224. * m_ObjMgr member should live longer than m_Scope - fixed
  225. *
  226. * Revision 1.16  2002/05/09 14:21:50  grichenk
  227. * Turned GetTitle() test on, removed unresolved seq-map test
  228. *
  229. * Revision 1.15  2002/04/25 18:15:26  grichenk
  230. * Adjusted tests to work with the updated CSeqVector
  231. *
  232. * Revision 1.14  2002/04/23 15:26:47  gouriano
  233. * use test_mt library
  234. *
  235. * Revision 1.13  2002/04/22 20:07:45  grichenk
  236. * Commented calls to CBioseq::ConstructExcludedSequence()
  237. *
  238. * Revision 1.12  2002/04/21 05:16:59  vakatov
  239. * Decreased the # of threads from 40 to 34 to avoid triggering guard-bomb
  240. * on SCHROEDER
  241. *
  242. * Revision 1.11  2002/03/18 21:47:16  grichenk
  243. * Moved most includes to test_helper.cpp
  244. * Added test for CBioseq::ConstructExcludedSequence()
  245. *
  246. * Revision 1.10  2002/03/13 18:06:31  gouriano
  247. * restructured MT test. Put common functions into a separate file
  248. *
  249. * Revision 1.9  2002/03/07 21:42:06  grichenk
  250. * +Test for GetSeq_annot()
  251. *
  252. * Revision 1.8  2002/03/05 16:08:16  grichenk
  253. * Moved TSE-restriction to new constructors
  254. *
  255. * Revision 1.7  2002/03/04 17:07:19  grichenk
  256. * +Testing feature iterators with single TSE restriction
  257. *
  258. * Revision 1.6  2002/02/25 21:05:31  grichenk
  259. * Removed seq-data references caching. Increased MT-safety. Fixed typos.
  260. *
  261. * Revision 1.5  2002/02/07 21:27:36  grichenk
  262. * Redesigned CDataSource indexing: seq-id handle -> TSE -> seq/annot
  263. *
  264. * Revision 1.4  2002/01/23 21:59:34  grichenk
  265. * Redesigned seq-id handles and mapper
  266. *
  267. * Revision 1.3  2002/01/16 18:56:30  grichenk
  268. * Removed CRef<> argument from choice variant setter, updated sources to
  269. * use references instead of CRef<>s
  270. *
  271. * Revision 1.2  2002/01/16 16:28:47  gouriano
  272. * restructured objmgr
  273. *
  274. * Revision 1.1  2002/01/11 19:06:29  gouriano
  275. * restructured objmgr
  276. *
  277. * Revision 1.4  2001/12/20 20:00:30  grichenk
  278. * CObjectManager::ConstructBioseq(CSeq_loc) -> CBioseq::CBioseq(CSeq_loc ...)
  279. *
  280. * Revision 1.3  2001/12/12 22:39:12  grichenk
  281. * Added test for minus-strand intervals in constructed bioseqs
  282. *
  283. * Revision 1.2  2001/12/12 17:48:45  grichenk
  284. * Fixed code using generated classes to work with the updated datatool
  285. *
  286. * Revision 1.1  2001/12/07 19:08:58  grichenk
  287. * Initial revision
  288. *
  289. *
  290. * ===========================================================================
  291. */