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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: test_helper.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:42:11  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: test_helper.cpp,v 1000.1 2004/06/01 19:42:11 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. *   Bio sequence data generator to test Object Manager
  38. */
  39. #include <ncbi_pch.hpp>
  40. #include "test_helper.hpp"
  41. #include <objects/seqloc/Seq_point.hpp>
  42. #include <serial/object.hpp>
  43. #include <serial/objistr.hpp>
  44. #include <serial/objostr.hpp>
  45. #include <serial/objcopy.hpp>
  46. #include <serial/objectinfo.hpp>
  47. #include <serial/iterator.hpp>
  48. #include <serial/objectiter.hpp>
  49. #include <serial/serial.hpp>
  50. #include <objects/seq/Bioseq.hpp>
  51. #include <objects/seq/Seq_descr.hpp>
  52. #include <objects/seq/Seqdesc.hpp>
  53. #include <objects/seq/Seq_annot.hpp>
  54. #include <objects/seq/IUPACna.hpp>
  55. #include <objects/seq/NCBIeaa.hpp>
  56. #include <objects/seq/NCBI2na.hpp>
  57. #include <objects/seq/Seq_ext.hpp>
  58. #include <objects/seq/Seg_ext.hpp>
  59. #include <objects/seqset/Bioseq_set.hpp>
  60. #include <objects/seqloc/Seq_loc.hpp>
  61. #include <objects/seqloc/Seq_interval.hpp>
  62. #include <objects/seqfeat/Seq_feat.hpp>
  63. #include <objects/seqfeat/SeqFeatData.hpp>
  64. #include <objects/seqfeat/Feat_id.hpp>
  65. #include <objects/seqfeat/Cdregion.hpp>
  66. #include <objects/seqfeat/Genetic_code.hpp>
  67. #include <objects/seqalign/Dense_diag.hpp>
  68. #include <objects/seq/Seq_inst.hpp>
  69. #include <objects/seqalign/Seq_align.hpp>
  70. #include <objmgr/bioseq_handle.hpp>
  71. #include <objmgr/seq_vector.hpp>
  72. #include <objmgr/seq_vector_ci.hpp>
  73. #include <objmgr/seq_descr_ci.hpp>
  74. #include <objmgr/feat_ci.hpp>
  75. #include <objmgr/align_ci.hpp>
  76. #include <objects/seq/seqport_util.hpp>
  77. #include <objects/general/Date.hpp>
  78. // #include <objects/util/sequence.hpp>
  79. #include <test/test_assert.h>  /* This header must go last */
  80. BEGIN_NCBI_SCOPE
  81. BEGIN_SCOPE(objects)
  82. bool CDataGenerator::sm_DumpEntries = false;
  83. /************************************************************************
  84.     1.2.1.1. Bio sequences for testing
  85.     Test entry = 1 top-level entry + 2 sub-entries (continuous sequence)
  86.     TSE contains 1 description
  87.     each sub-entry has
  88.         two Seq_ids: local and GI, (local ids = 11+1000i, 12+1000i)
  89.         one description,
  90.         two annotations (Seq_feat)
  91.             first - for an interval, local Seq_id:
  92.                 "plus" strand for one sub-entry,
  93.                 "minus" strand for another one
  94.             second - for the whole seq, GI Seq_id
  95.     one sub-entry has also an alignment annotation
  96. ************************************************************************/
  97. CSeq_entry& CDataGenerator::CreateTestEntry1(int index)
  98. {
  99.     // create top level seq entry
  100.     CRef<CSeq_entry> entry(new CSeq_entry);
  101.     CBioseq_set& set = entry->SetSet();
  102.     // class = nucleic acid and coded proteins
  103.     set.SetClass(CBioseq_set::eClass_nuc_prot);
  104.     // add description (name)
  105.     list< CRef<CSeqdesc> >& descr = set.SetDescr().Set();
  106.     CRef<CSeqdesc> desc(new CSeqdesc);
  107.     desc->SetName("D1 from TSE1-"+NStr::IntToString(index));
  108.     descr.push_back(desc);
  109.     // list of sub-entries
  110.     list< CRef<CSeq_entry> >& seq_set = set.SetSeq_set();
  111.     // Sub-entry Seq 11
  112.     {{
  113.         CRef<CSeq_entry> sub_entry(new CSeq_entry);
  114.         CBioseq& seq = sub_entry->SetSeq();
  115.         CBioseq::TId& id_list = seq.SetId();
  116.         // list of Ids (local + gi)
  117.         CRef<CSeq_id> id(new CSeq_id);
  118.         id->SetLocal().SetStr("seq"+NStr::IntToString(11+index*1000));
  119.         id_list.push_back(id);
  120.         id.Reset(new CSeq_id);
  121.         id->SetGi(11+index*1000);
  122.         id_list.push_back(id);
  123.         // Description (name)
  124.         list< CRef<CSeqdesc> >& descr1 = seq.SetDescr().Set();
  125.         CRef<CSeqdesc> desc1(new CSeqdesc);
  126.         desc1->SetName("D1 from BS11-"+NStr::IntToString(index));
  127.         descr1.push_back(desc1);
  128.         // Instance (sequence data)
  129.         CSeq_inst& inst = seq.SetInst();
  130.         // representation class = continuous sequence
  131.         inst.SetRepr(CSeq_inst::eRepr_raw);
  132.         // molecule class in living organism = dna
  133.         inst.SetMol(CSeq_inst::eMol_dna);
  134.         // length of sequence in residues
  135.         inst.SetLength(40);
  136.         // seq data in Iupacna
  137.         inst.SetSeq_data().SetIupacna().Set(
  138.             "CAGCAGCGGTACAGGAGGGTGAGACATCCCAGAGCGGTGC");
  139.         // strandedness in living organism = double strand
  140.         inst.SetStrand(CSeq_inst::eStrand_ds);
  141.         // Annotations
  142.         list< CRef<CSeq_annot> >& annot_list = seq.SetAnnot();
  143.         CRef<CSeq_annot> annot(new CSeq_annot);
  144.         // list of features
  145.         list< CRef<CSeq_feat> >& ftable = annot->SetData().SetFtable();
  146.         {{
  147.             CRef<CSeq_feat> feat(new CSeq_feat);
  148.             // feature Id
  149.             feat->SetId().SetLocal().SetStr("F1: lcl|11");
  150.             // the specific data
  151.             CSeqFeatData& fdata = feat->SetData();
  152.             CCdregion& cdreg = fdata.SetCdregion();
  153.             cdreg.SetFrame(CCdregion::eFrame_one);
  154.             // genetic code used
  155.             list< CRef< CGenetic_code::C_E > >& gcode = cdreg.SetCode().Set();
  156.             CRef< CGenetic_code::C_E > ce(new CGenetic_code::C_E);
  157.             ce->SetId(111); // TSE=1; seq=1; feat=1
  158.             gcode.push_back(ce);
  159.             // feature location on the sequence: Seq_interval (local seq_Id)
  160.             CSeq_interval& floc = feat->SetLocation().SetInt();
  161.             floc.SetId().SetLocal().SetStr
  162.                 ("seq"+NStr::IntToString(11+index*1000));
  163.             floc.SetFrom(20);
  164.             floc.SetTo(30);
  165.             ftable.push_back(feat);
  166.         }}
  167.         {{
  168.             CRef<CSeq_feat> feat(new CSeq_feat);
  169.             // feature Id
  170.             feat->SetId().SetLocal().SetStr("F2: gi|11");
  171.             // the specific data
  172.             CSeqFeatData& fdata = feat->SetData();
  173.             CCdregion& cdreg = fdata.SetCdregion();
  174.             cdreg.SetFrame(CCdregion::eFrame_one);
  175.             // genetic code used
  176.             list< CRef< CGenetic_code::C_E > >& gcode = cdreg.SetCode().Set();
  177.             CRef< CGenetic_code::C_E > ce(new CGenetic_code::C_E);
  178.             ce->SetId(112); // TSE=1; seq=1; feat=2
  179.             gcode.push_back(ce);
  180.             // feature location on the sequence (seq_Id + "whole" sequence)
  181.             feat->SetLocation().SetWhole().SetGi(11+index*1000);
  182.             ftable.push_back(feat);
  183.         }}
  184.         annot_list.push_back(annot);
  185.         // Add sub-entry
  186.         seq_set.push_back(sub_entry);
  187.     }}
  188.     // Sub-entry Seq 12
  189.     {{
  190.         CRef<CSeq_entry> sub_entry(new CSeq_entry);
  191.         CBioseq& seq = sub_entry->SetSeq();
  192.         CBioseq::TId& id_list = seq.SetId();
  193.         // list of Ids (local + gi)
  194.         CRef<CSeq_id> id(new CSeq_id);
  195.         id->SetLocal().SetStr("seq"+NStr::IntToString(12+index*1000));
  196.         id_list.push_back(id);
  197.         id.Reset(new CSeq_id);
  198.         id->SetGi(12+index*1000);
  199.         id_list.push_back(id);
  200.         // Instance (sequence data)
  201.         CSeq_inst& inst = seq.SetInst();
  202.         // representation class = continuous sequence
  203.         inst.SetRepr(CSeq_inst::eRepr_raw);
  204.         // molecule class in living organism = dna
  205.         inst.SetMol(CSeq_inst::eMol_dna);
  206.         // length of sequence in residues
  207.         inst.SetLength(40);
  208.         // seq data in Iupacna
  209.         inst.SetSeq_data().SetIupacna().Set(
  210.             "CAATAACCTCAGCAGCAACAAGTGGCTTCCAGCGCCCTCC");
  211.         // strandedness in living organism = double strand
  212.         inst.SetStrand(CSeq_inst::eStrand_ds);
  213.         // Annotations
  214.         list< CRef<CSeq_annot> >& annot_list = seq.SetAnnot();
  215.         {{
  216.             CRef<CSeq_annot> annot(new CSeq_annot);
  217.             // list of features
  218.             list< CRef<CSeq_feat> >& ftable = annot->SetData().SetFtable();
  219.             {{
  220.                 CRef<CSeq_feat> feat(new CSeq_feat);
  221.                 // feature Id
  222.                 feat->SetId().SetLocal().SetStr("F3: gi|12");
  223.                 // the specific data
  224.                 CSeqFeatData& fdata = feat->SetData();
  225.                 CCdregion& cdreg = fdata.SetCdregion();
  226.                 cdreg.SetFrame(CCdregion::eFrame_one);
  227.                 // genetic code used
  228.                 list< CRef< CGenetic_code::C_E > >& gcode =
  229.                     cdreg.SetCode().Set();
  230.                 CRef< CGenetic_code::C_E > ce(new CGenetic_code::C_E);
  231.                 ce->SetId(123); // TSE=1; seq=2; feat=3
  232.                 gcode.push_back(ce);
  233.                 // feature location on the sequence: Seq_interval (gi seq_Id)
  234.                 CSeq_interval& floc = feat->SetLocation().SetInt();
  235.                 floc.SetId().SetGi(12+index*1000);
  236.                 floc.SetFrom(20);
  237.                 floc.SetTo(30);
  238.                 // minus strand
  239.                 floc.SetStrand(eNa_strand_minus);
  240.                 ftable.push_back(feat);
  241.             }}
  242.             {{
  243.                 CRef<CSeq_feat> feat(new CSeq_feat);
  244.                 // feature Id
  245.                 feat->SetId().SetLocal().SetStr("F4: lcl|12");
  246.                 // the specific data
  247.                 CSeqFeatData& fdata = feat->SetData();
  248.                 CCdregion& cdreg = fdata.SetCdregion();
  249.                 cdreg.SetFrame(CCdregion::eFrame_one);
  250.                 // genetic code used
  251.                 list< CRef< CGenetic_code::C_E > >& gcode =
  252.                     cdreg.SetCode().Set();
  253.                 CRef< CGenetic_code::C_E > ce(new CGenetic_code::C_E);
  254.                 ce->SetId(124); // TSE=1; seq=2; feat=4
  255.                 gcode.push_back(ce);
  256.                 // feature location on the sequence (seq_Id + "whole" sequence)
  257.                 feat->SetLocation().SetWhole().SetLocal().SetStr
  258.                     ("seq"+NStr::IntToString(12+index*1000));
  259.                 ftable.push_back(feat);
  260.             }}
  261.             annot_list.push_back(annot);
  262.         }}
  263.         {{
  264.             CRef<CSeq_annot> annot(new CSeq_annot);
  265.             // list of seq alignments
  266.             list< CRef<CSeq_align> >& atable = annot->SetData().SetAlign();
  267.             {{
  268.                 // CAGCAGC:
  269.                 // 11[0], 12[9]
  270.                 CRef<CSeq_align> align(new CSeq_align);
  271.                 align->SetType(CSeq_align::eType_not_set);
  272.                 // alignment data
  273.                 CSeq_align::C_Segs& segs = align->SetSegs();
  274.                 // for (multiway) diagonals
  275.                 CSeq_align::C_Segs::TDendiag& diag_list = segs.SetDendiag();
  276.                 CRef<CDense_diag> diag(new CDense_diag);
  277.                 // dimensionality = 2
  278.                 diag->SetDim(2);
  279.                 // list of Seq_ids (gi) (sequences in order)
  280.                 CDense_diag::TIds& id_list = diag->SetIds();
  281.                 CRef<CSeq_id> id(new CSeq_id);
  282.                 id->SetGi(11+index*1000);
  283.                 id_list.push_back(id);
  284.                 id.Reset(new CSeq_id);
  285.                 id->SetGi(12+index*1000);
  286.                 id_list.push_back(id);
  287.                 // start OFFSETS in ids order
  288.                 list<TSeqPos>& start_list = diag->SetStarts();
  289.                 start_list.push_back(0);
  290.                 start_list.push_back(9);
  291.                 diag->SetLen(7);
  292.                 diag_list.push_back(diag);
  293.                 atable.push_back(align);
  294.             }}
  295.             annot_list.push_back(annot);
  296.         }}
  297.         // Add sub-entry
  298.         seq_set.push_back(sub_entry);
  299.     }}
  300.     if ( sm_DumpEntries ) {
  301.         NcbiCout << "-------------------- "
  302.             "TestEntry1 --------------------" << NcbiEndl;
  303.         auto_ptr<CObjectOStream>
  304.             out(CObjectOStream::Open(eSerial_AsnText, NcbiCout));
  305.         *out << *entry;
  306.     }
  307.     return *entry.Release();
  308. }
  309. /************************************************************************
  310.     1.2.1.2. Bio sequences for testing
  311.     Test entry = 1 top-level entry + 2 sub-entries (continuous sequence)
  312.     each sub-entry has
  313.         two Seq_ids: local and GI, (local ids = 11+1000i, 12+1000i)
  314.     No descriptions, No annotations
  315. ************************************************************************/
  316. CSeq_entry& CDataGenerator::CreateTestEntry1a(int index)
  317. {
  318.     // create top level seq entry
  319.     CRef<CSeq_entry> entry(new CSeq_entry);
  320.     CBioseq_set& set = entry->SetSet();
  321.     // class = nucleic acid and coded proteins
  322.     set.SetClass(CBioseq_set::eClass_nuc_prot);
  323.     list< CRef<CSeq_entry> >& seq_set = set.SetSeq_set();
  324.     // Sub-entry Seq 11
  325.     {{
  326.         CRef<CSeq_entry> sub_entry(new CSeq_entry);
  327.         CBioseq& seq = sub_entry->SetSeq();
  328.         CBioseq::TId& id_list = seq.SetId();
  329.         // list of Ids (local + gi)
  330.         CRef<CSeq_id> id(new CSeq_id);
  331.         id->SetLocal().SetStr("seq"+NStr::IntToString(11+index*1000));
  332.         id_list.push_back(id);
  333.         id.Reset(new CSeq_id);
  334.         id->SetGi(11+index*1000);
  335.         id_list.push_back(id);
  336.         // Instance (sequence data)
  337.         CSeq_inst& inst = seq.SetInst();
  338.         // representation class = continuous sequence
  339.         inst.SetRepr(CSeq_inst::eRepr_raw);
  340.         // molecule class in living organism = dna
  341.         inst.SetMol(CSeq_inst::eMol_dna);
  342.         // length of sequence in residues
  343.         inst.SetLength(40);
  344.         // seq data in Iupacna
  345.         inst.SetSeq_data().SetIupacna().Set(
  346.             "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
  347.         // strandedness in living organism = double strand
  348.         inst.SetStrand(CSeq_inst::eStrand_ds);
  349.         // Add sub-entry
  350.         seq_set.push_back(sub_entry);
  351.     }}
  352.     // Sub-entry Seq 12
  353.     {{
  354.         CRef<CSeq_entry> sub_entry(new CSeq_entry);
  355.         CBioseq& seq = sub_entry->SetSeq();
  356.         CBioseq::TId& id_list = seq.SetId();
  357.         // list of Ids (local + gi)
  358.         CRef<CSeq_id> id(new CSeq_id);
  359.         id->SetLocal().SetStr("seq"+NStr::IntToString(12+index*1000));
  360.         id_list.push_back(id);
  361.         id.Reset(new CSeq_id);
  362.         id->SetGi(12+index*1000);
  363.         id_list.push_back(id);
  364.         // Instance (sequence data)
  365.         CSeq_inst& inst = seq.SetInst();
  366.         inst.SetRepr(CSeq_inst::eRepr_raw);
  367.         inst.SetMol(CSeq_inst::eMol_dna);
  368.         // length of sequence in residues
  369.         inst.SetLength(40);
  370.         // seq data in Iupacna
  371.         inst.SetSeq_data().SetIupacna().Set(
  372.             "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT");
  373.         inst.SetStrand(CSeq_inst::eStrand_ds);
  374.         // Add sub-entry
  375.         seq_set.push_back(sub_entry);
  376.     }}
  377.     if ( sm_DumpEntries ) {
  378.         NcbiCout << "-------------------- "
  379.             "TestEntry1a --------------------" << NcbiEndl;
  380.         auto_ptr<CObjectOStream>
  381.             out(CObjectOStream::Open(eSerial_AsnText, NcbiCout));
  382.         *out << *entry;
  383.     }
  384.     return *entry.Release();
  385. }
  386. /************************************************************************
  387.     1.2.1.3. Bio sequences for testing
  388.     Test entry = 1 top-level entry + 3 sub-entries
  389.     TSE
  390.         one annotation (Seq_feat), which refers to ids 12+1000i and 21+1000i
  391.     1 sub-entry
  392.         two Seq_ids: local and GI, (local id = 21+1000i)
  393.         one description
  394.         segmented sequence: references to
  395.             an interval, ( id= 11+1000i)
  396.             whole seq,   ( id= 12+1000i)
  397.             self         ( id= 21+1000i)
  398.         two annotations (Seq_feat)
  399.             both - for an interval,  local Seq_id = 11+1000i
  400.     2 sub-entry
  401.         two Seq_ids: local and GI, (local id = 22+1000i)
  402.         continuous sequence
  403.     3 sub-entry
  404.         two Seq_ids: local and GI, (local id = 23+1000i)
  405.         continuous sequence
  406.         conversion from one seq.data format to another
  407. ************************************************************************/
  408. CSeq_entry& CDataGenerator::CreateTestEntry2(int index)
  409. {
  410.     // create top level seq entry
  411.     CRef<CSeq_entry> entry(new CSeq_entry);
  412.     CBioseq_set& set = entry->SetSet();
  413.     // class = nucleic acid and coded proteins
  414.     set.SetClass(CBioseq_set::eClass_nuc_prot);
  415.     list< CRef<CSeq_entry> >& seq_set = set.SetSeq_set();
  416.     // Sub-entry Seq 21
  417.     {{
  418.         CRef<CSeq_entry> sub_entry(new CSeq_entry);
  419.         CBioseq& seq = sub_entry->SetSeq();
  420.         CBioseq::TId& id_list = seq.SetId();
  421.         // list of Ids (local + gi)
  422.         CRef<CSeq_id> id(new CSeq_id);
  423.         id->SetLocal().SetStr("seq"+NStr::IntToString(21+index*1000));
  424.         id_list.push_back(id);
  425.         id.Reset(new CSeq_id);
  426.         id->SetGi(21+index*1000);
  427.         id_list.push_back(id);
  428.         // Description (name)
  429.         list< CRef<CSeqdesc> >& descr1 = seq.SetDescr().Set();
  430.         CRef<CSeqdesc> desc1(new CSeqdesc);
  431.         desc1->SetName("D3 from bioseq 21-"+NStr::IntToString(index));
  432.         descr1.push_back(desc1);
  433.         // Instance (sequence data)
  434.         CSeq_inst& inst = seq.SetInst();
  435.         // representation class = segmented sequence
  436.         inst.SetRepr(CSeq_inst::eRepr_seg);
  437.         // molecule class in living organism = dna
  438.         inst.SetMol(CSeq_inst::eMol_dna);
  439.         // segments = list of Seq_locs
  440.         CSeg_ext::Tdata& seg_list = inst.SetExt().SetSeg();
  441.         // Seq_interval (gi)
  442.         CRef<CSeq_loc> loc(new CSeq_loc);
  443.         CSeq_interval& ref_loc = loc->SetInt();
  444.         ref_loc.SetId().SetGi(11+index*1000);
  445.         ref_loc.SetFrom(0);
  446.         ref_loc.SetTo(4);
  447.         seg_list.push_back(loc);
  448.         // whole sequence (gi)
  449.         loc = new CSeq_loc;
  450.         loc->SetWhole().SetGi(12+index*1000);
  451.         seg_list.push_back(loc);
  452.         // Seq_interval (gi)
  453.         loc = new CSeq_loc;
  454.         CSeq_interval& ref_loc2 = loc->SetInt();
  455.         // "simple" self-reference
  456.         ref_loc2.SetId().SetGi(21+index*1000);
  457.         ref_loc2.SetFrom(0);
  458.         ref_loc2.SetTo(9);
  459.         seg_list.push_back(loc);
  460.         // More complicated self-reference
  461.         loc = new CSeq_loc;
  462.         CSeq_interval& ref_loc3 = loc->SetInt();
  463.         ref_loc3.SetId().SetGi(21+index*1000);
  464.         ref_loc3.SetFrom(54);
  465.         ref_loc3.SetTo(60);
  466.         seg_list.push_back(loc);
  467.         inst.SetStrand(CSeq_inst::eStrand_ds);
  468.         // Annotations
  469.         list< CRef<CSeq_annot> >& annot_list = seq.SetAnnot();
  470.         CRef<CSeq_annot> annot(new CSeq_annot);
  471.         // list of features
  472.         list< CRef<CSeq_feat> >& ftable = annot->SetData().SetFtable();
  473.         {{
  474.             CRef<CSeq_feat> feat(new CSeq_feat);
  475.             // feature Id
  476.             feat->SetId().SetLocal().SetStr("F5: lcl|11");
  477.             // the specific data
  478.             CSeqFeatData& fdata = feat->SetData();
  479.             CCdregion& cdreg = fdata.SetCdregion();
  480.             cdreg.SetFrame(CCdregion::eFrame_one);
  481.             // genetic code used
  482.             list< CRef< CGenetic_code::C_E > >& gcode = cdreg.SetCode().Set();
  483.             CRef< CGenetic_code::C_E > ce(new CGenetic_code::C_E);
  484.             ce->SetId(215); // TSE=2; seq=1; feat=5
  485.             gcode.push_back(ce);
  486.             // feature location on the sequence: Seq_interval (local seq_Id)
  487.             CSeq_interval& floc = feat->SetLocation().SetInt();
  488.             floc.SetId().SetLocal().SetStr
  489.                 ("seq"+NStr::IntToString(11+index*1000));
  490.             floc.SetFrom(20);
  491.             floc.SetTo(30);
  492.             // plus strand
  493.             floc.SetStrand(eNa_strand_plus);
  494.             ftable.push_back(feat);
  495.         }}
  496.         {{
  497.             CRef<CSeq_feat> feat(new CSeq_feat);
  498.             // feature Id
  499.             feat->SetId().SetLocal().SetStr("F6: gi|11");
  500.             // the specific data
  501.             CSeqFeatData& fdata = feat->SetData();
  502.             CCdregion& cdreg = fdata.SetCdregion();
  503.             cdreg.SetFrame(CCdregion::eFrame_one);
  504.             // genetic code used
  505.             list< CRef< CGenetic_code::C_E > >& gcode = cdreg.SetCode().Set();
  506.             CRef< CGenetic_code::C_E > ce(new CGenetic_code::C_E);
  507.             ce->SetId(216); // TSE=2; seq=1; feat=6
  508.             gcode.push_back(ce);
  509.             // feature location on the sequence: Seq_interval (gi seq_Id)
  510.             CSeq_interval& floc = feat->SetLocation().SetInt();
  511.             floc.SetId().SetGi(11+index*1000);
  512.             floc.SetFrom(5);
  513.             floc.SetTo(15);
  514.             ftable.push_back(feat);
  515.         }}
  516.         annot_list.push_back(annot);
  517.         // Add sub-entry
  518.         seq_set.push_back(sub_entry);
  519.     }}
  520.     // Sub-entry Seq 22
  521.     {{
  522.         CRef<CSeq_entry> sub_entry(new CSeq_entry);
  523.         CBioseq& seq = sub_entry->SetSeq();
  524.         CBioseq::TId& id_list = seq.SetId();
  525.         // list of Ids (local + gi)
  526.         CRef<CSeq_id> id(new CSeq_id);
  527.         id->SetLocal().SetStr
  528.             ("seq"+NStr::IntToString(22+index*1000));
  529.         id_list.push_back(id);
  530.         id.Reset(new CSeq_id);
  531.         id->SetGi(22+index*1000);
  532.         id_list.push_back(id);
  533.         // Instance (sequence data)
  534.         CSeq_inst& inst = seq.SetInst();
  535.         // representation class = continuous sequence
  536.         inst.SetRepr(CSeq_inst::eRepr_raw);
  537.         // molecule class in living organism = aa (amino acid)
  538.         inst.SetMol(CSeq_inst::eMol_aa);
  539.         // length of sequence in residues
  540.         inst.SetLength(20);
  541.         // seq data in Ncbieaa
  542.         inst.SetSeq_data().SetNcbieaa().Set("QGCGEQTMTLLAPTLAASRY");
  543.         // single strand
  544.         inst.SetStrand(CSeq_inst::eStrand_ss);
  545.         // Add sub-entry
  546.         seq_set.push_back(sub_entry);
  547.     }}
  548.     // Sub-entry Seq 23
  549.     {{
  550.         CRef<CSeq_entry> sub_entry(new CSeq_entry);
  551.         CBioseq& seq = sub_entry->SetSeq();
  552.         CBioseq::TId& id_list = seq.SetId();
  553.         // list of Ids (local + gi)
  554.         CRef<CSeq_id> id(new CSeq_id);
  555.         id->SetLocal().SetStr
  556.             ("seq"+NStr::IntToString(23+index*1000));
  557.         id_list.push_back(id);
  558.         id.Reset(new CSeq_id);
  559.         id->SetGi(23+index*1000);
  560.         id_list.push_back(id);
  561.         // Instance (sequence data)
  562.         CSeq_inst& inst = seq.SetInst();
  563.         // representation class = continuous sequence
  564.         inst.SetRepr(CSeq_inst::eRepr_raw);
  565.         // molecule class in living organism = dna
  566.         inst.SetMol(CSeq_inst::eMol_dna);
  567.         // length of sequence in residues
  568.         inst.SetLength(13);
  569.         // seq data in Iupacna
  570.         inst.SetSeq_data().SetIupacna().Set("ATGCAGCTGTACG");
  571.         // double strand
  572.         inst.SetStrand(CSeq_inst::eStrand_ds);
  573.         CRef<CSeq_data> packed_data(new CSeq_data);
  574.         // convert seq data to another format
  575.         // (NCBI2na = 2 bit nucleic acid code)
  576.         CSeqportUtil::Convert(inst.GetSeq_data(),
  577.                               packed_data,
  578.                               CSeq_data::e_Ncbi2na);
  579.         inst.SetSeq_data(*packed_data);
  580.         // Add sub-entry
  581.         seq_set.push_back(sub_entry);
  582.     }}
  583.     // Annotations
  584.     list< CRef<CSeq_annot> >& set_annot_list = set.SetAnnot();
  585.     CRef<CSeq_annot> annot(new CSeq_annot);
  586.     // list of features
  587.     list< CRef<CSeq_feat> >& ftable = annot->SetData().SetFtable();
  588.     {{
  589.         CRef<CSeq_feat> feat(new CSeq_feat);
  590.         // feature Id
  591.         feat->SetId().SetLocal().SetStr("F7: lcl|21 + gi|12");
  592.         // the specific data
  593.         CSeqFeatData& fdata = feat->SetData();
  594.         CCdregion& cdreg = fdata.SetCdregion();
  595.         cdreg.SetFrame(CCdregion::eFrame_one);
  596.         // genetic code used
  597.         list< CRef< CGenetic_code::C_E > >& gcode = cdreg.SetCode().Set();
  598.         CRef< CGenetic_code::C_E > ce(new CGenetic_code::C_E);
  599.         ce->SetId(207); // TSE=2; no seq; feat=7
  600.         gcode.push_back(ce);
  601.         // feature location on the sequence: Seq_interval (local seq_Id)
  602.         CSeq_interval& floc = feat->SetLocation().SetInt();
  603.         floc.SetId().SetLocal().SetStr
  604.             ("seq"+NStr::IntToString(21+index*1000));
  605.         floc.SetFrom(1);
  606.         floc.SetTo(20);
  607.         // product of process (seq_loc = whole, gi)
  608.         feat->SetProduct().SetWhole().SetGi(12+index*1000);
  609.         ftable.push_back(feat);
  610.     }}
  611.     set_annot_list.push_back(annot);
  612.     if ( sm_DumpEntries ) {
  613.         NcbiCout << "-------------------- "
  614.             "TestEntry2 --------------------" << NcbiEndl;
  615.         auto_ptr<CObjectOStream>
  616.             out(CObjectOStream::Open(eSerial_AsnText, NcbiCout));
  617.         *out << *entry;
  618.     }
  619.     return *entry.Release();
  620. }
  621. /************************************************************************
  622.     1.2.1.4. Bio sequences for testing
  623.     Test entry = 1 top-level entry
  624.     TSE
  625.         only contains references to other sequences
  626. ************************************************************************/
  627. CSeq_entry& CDataGenerator::CreateConstructedEntry(int idx, int index)
  628. {
  629.     CSeq_loc constr_loc;
  630.     list< CRef<CSeq_interval> >& int_list = constr_loc.SetPacked_int();
  631.     CRef<CSeq_interval> int_ref(new CSeq_interval);
  632.     int_ref->SetId().SetGi(11+idx*1000);
  633.     int_ref->SetFrom(5);
  634.     int_ref->SetTo(10);
  635.     if (index == 2) {
  636.         int_ref->SetStrand(eNa_strand_minus);
  637.     }
  638.     int_list.push_back(int_ref);
  639.     int_ref.Reset(new CSeq_interval);
  640.     int_ref->SetId().SetGi(12+idx*1000);
  641.     int_ref->SetFrom(0);
  642.     int_ref->SetTo(20);
  643.     int_list.push_back(int_ref);
  644.     CRef<CBioseq> constr_seq(new CBioseq(constr_loc,
  645.         "constructed"+NStr::IntToString(index)));
  646.     CRef<CSeq_entry> constr_entry(new CSeq_entry);
  647.     constr_entry->SetSeq(*constr_seq);
  648.     if ( sm_DumpEntries ) {
  649.         NcbiCout << "-------------------- "
  650.             "ConstructedEntry --------------------" << NcbiEndl;
  651.         auto_ptr<CObjectOStream>
  652.             out(CObjectOStream::Open(eSerial_AsnText, NcbiCout));
  653.         *out << *constr_entry;
  654.     }
  655.     return *constr_entry.Release();
  656. }
  657. /************************************************************************
  658.     1.2.1.4. Bio sequences for testing
  659.     Test entry = 1 top-level entry
  660.     TSE
  661.         Construct bioseq by excluding the seq-loc
  662. ************************************************************************/
  663. /*
  664. CSeq_entry& CDataGenerator::CreateConstructedExclusionEntry(int idx, int index)
  665. {
  666.     CSeq_loc loc;
  667.     CSeq_loc_mix::Tdata& mix = loc.SetMix().Set();
  668.     CRef<CSeq_loc> sl;
  669.     sl.Reset(new CSeq_loc);
  670.     sl->SetPnt().SetId().SetGi(11+idx*1000);
  671.     sl->SetPnt().SetPoint(0);
  672.     mix.push_back(sl);
  673.     sl.Reset(new CSeq_loc);
  674.     sl->SetInt().SetId().SetGi(11+idx*1000);
  675.     sl->SetInt().SetFrom(0);
  676.     sl->SetInt().SetTo(4);
  677.     mix.push_back(sl);
  678.     sl.Reset(new CSeq_loc);
  679.     sl->SetInt().SetId().SetGi(11+idx*1000);
  680.     sl->SetInt().SetFrom(10);
  681.     sl->SetInt().SetTo(15);
  682.     mix.push_back(sl);
  683.     sl.Reset(new CSeq_loc);
  684.     sl->SetInt().SetId().SetGi(11+idx*1000);
  685.     sl->SetInt().SetFrom(10);
  686.     sl->SetInt().SetTo(12);
  687.     mix.push_back(sl);
  688.     sl.Reset(new CSeq_loc);
  689.     sl->SetInt().SetId().SetGi(11+idx*1000);
  690.     sl->SetInt().SetFrom(13);
  691.     sl->SetInt().SetTo(15);
  692.     mix.push_back(sl);
  693.     sl.Reset(new CSeq_loc);
  694.     sl->SetInt().SetId().SetGi(11+idx*1000);
  695.     sl->SetInt().SetFrom(8);
  696.     sl->SetInt().SetTo(18);
  697.     mix.push_back(sl);
  698.     sl.Reset(new CSeq_loc);
  699.     sl->SetPnt().SetId().SetGi(11+idx*1000);
  700.     sl->SetPnt().SetPoint(20);
  701.     mix.push_back(sl);
  702.     sl.Reset(new CSeq_loc);
  703.     sl->SetPnt().SetId().SetGi(11+idx*1000);
  704.     sl->SetPnt().SetPoint(39);
  705.     mix.push_back(sl);
  706.     CRef<CBioseq> constr_ex_seq(&CBioseq::ConstructExcludedSequence(loc, 40,
  707.         "construct_exclusion"+NStr::IntToString(index)));
  708.     CRef<CSeq_entry> constr_ex_entry(new CSeq_entry);
  709.     constr_ex_entry->SetSeq(*constr_ex_seq);
  710.     return *constr_ex_entry.Release();
  711. }
  712. */
  713. CSeq_annot& CDataGenerator::CreateAnnotation1(int index)
  714. {
  715.     CRef<CSeq_annot> annot(new CSeq_annot);
  716.     list< CRef<CSeq_feat> >& ftable = annot->SetData().SetFtable();
  717.     {{
  718.         CRef<CSeq_feat> feat(new CSeq_feat);
  719.         feat->SetId().SetLocal().SetStr("attached feature");
  720.         CSeqFeatData& fdata = feat->SetData();
  721.         CCdregion& cdreg = fdata.SetCdregion();
  722.         cdreg.SetFrame(CCdregion::eFrame_one);
  723.         list< CRef< CGenetic_code::C_E > >& gcode = cdreg.SetCode().Set();
  724.         CRef< CGenetic_code::C_E > ce(new CGenetic_code::C_E);
  725.         ce->SetId(999);
  726.         gcode.push_back(ce);
  727.         feat->SetComment() = "Feature attached after indexing the entry";
  728.         //feat->SetLocation().SetWhole().SetGi(11+index*1000);
  729.         CSeq_interval& interval = feat->SetLocation().SetInt();
  730.         interval.SetId().SetGi(11+index*1000);
  731.         interval.SetFrom(1);
  732.         interval.SetTo(9);
  733.         interval.SetStrand(eNa_strand_unknown);
  734.         ftable.push_back(feat);
  735.     }}
  736.     if ( sm_DumpEntries ) {
  737.         NcbiCout << "-------------------- "
  738.             "Annotation1 --------------------" << NcbiEndl;
  739.         auto_ptr<CObjectOStream>
  740.             out(CObjectOStream::Open(eSerial_AsnText, NcbiCout));
  741.         *out << *annot;
  742.     }
  743.     return *annot.Release();
  744. }
  745. /////////////////////////////////////////////////////////////////////////////
  746. /************************************************************************
  747.     1.2.2. Test function
  748.     Input: scope + seq_id
  749.         other parameters - only to verify results.
  750.     Operations:
  751.         investigate SeqMap, verify lengths
  752.         investigate SeqVector, verify seq.data (as strings)
  753.         investigate SeqMap again - some references may be resolved now
  754.         enumerate descriptions
  755.         enumerate features for the whole sequence
  756.         enumerate features for an interval
  757.         enumerate alignments for the whole sequence
  758.         enumerate alignments for an interval
  759. ************************************************************************/
  760. #define CHECK_WRAP() 
  761.     {{ 
  762.         bool got_exception = false; 
  763.         try {
  764. #define CHECK_END2(MSG, have_errors) 
  765.         } catch (exception) { 
  766.             got_exception = true; 
  767.             if ( !have_errors ) { 
  768.                 LOG_POST("Can not " MSG); throw; 
  769.             } 
  770.         } 
  771.         if ( have_errors && !got_exception ) { 
  772.             THROW1_TRACE(runtime_error, 
  773.                          "Managed to " MSG " of erroneous sequence"); 
  774.         } 
  775.     }}
  776. #define CHECK_END(MSG)         CHECK_END2(MSG, have_errors)
  777. #define CHECK_END_ALWAYS(MSG)  CHECK_END2(MSG, false)
  778. bool CTestHelper::sm_DumpFeatures = false;
  779. void CTestHelper::ProcessBioseq(CScope& scope, CSeq_id& id,
  780.                                 TSeqPos seq_len,
  781.                                 string seq_str, string seq_str_compl,
  782.                                 int seq_desc_cnt,
  783.                                 int seq_feat_ra_cnt, // resolve-all method
  784.                                 int seq_feat_cnt, int seq_featrg_cnt,
  785.                                 int seq_align_cnt, int seq_alignrg_cnt,
  786.                                 size_t feat_annots_cnt,
  787.                                 size_t featrg_annots_cnt,
  788.                                 size_t align_annots_cnt,
  789.                                 size_t alignrg_annots_cnt,
  790.                                 bool tse_feat_test,
  791.                                 bool have_errors)
  792. {
  793.     CBioseq_Handle handle = scope.GetBioseqHandle(id);
  794.     if ( !handle ) {
  795.         LOG_POST("No seq-id found");
  796.         return;
  797.     }
  798.     handle.GetTopLevelSeqEntry();
  799. #if 0 // build order issues
  800.     CHECK_WRAP();
  801.     sequence::GetTitle(handle);
  802.     CHECK_END("get sequence title");
  803. #endif
  804.     CBioseq_Handle::TBioseqCore seq_core = handle.GetBioseqCore();
  805.     CHECK_WRAP();
  806.     CConstRef<CSeqMap> seq_map(&handle.GetSeqMap());
  807.     TSeqPos len = 0;
  808.     _TRACE("ProcessBioseq("<<id.AsFastaString()<<") seq_len="<<seq_len<<"):");
  809.     // Iterate seq-map except the last element
  810.     len = 0;
  811.     CSeqMap::const_iterator seg = seq_map->begin(&scope);
  812.     vector<CSeqMap::const_iterator> itrs;
  813.     for ( ; seg != seq_map->end(&scope); ++seg ) {
  814.         _ASSERT(seg);
  815.         itrs.push_back(seg);
  816.         switch (seg.GetType()) {
  817.         case CSeqMap::eSeqData:
  818.             _TRACE('@'<<len<<": seqData("<<seg.GetLength()<<")");
  819.             len += seg.GetLength();
  820.             break;
  821.         case CSeqMap::eSeqRef:
  822.             _TRACE('@'<<len<<": seqRef("<<seg.GetLength()<<
  823.                    ", id="<<seg.GetRefSeqid().AsString()<<
  824.                    ", pos="<<seg.GetRefPosition()<<
  825.                    ", minus="<<seg.GetRefMinusStrand()<<")");
  826.             len += seg.GetLength();
  827.             break;
  828.         case CSeqMap::eSeqGap:
  829.             _TRACE('@'<<len<<": seqGap("<<seg.GetLength()<<")");
  830.             len += seg.GetLength();
  831.             break;
  832.         case CSeqMap::eSeqEnd:
  833.             _ASSERT("Unexpected END segment" && 0);
  834.             break;
  835.         default:
  836.             _ASSERT("Unexpected segment type" && 0);
  837.             break;
  838.         }
  839.     }
  840.     _ASSERT(!seg);
  841.     for ( int i = itrs.size()-1; i >= 0; --i ) {
  842.         --seg;
  843.         _ASSERT(seg);
  844.         _ASSERT(seg == itrs[i]);
  845.     }
  846.     --seg;
  847.     _ASSERT(!seg);
  848.     _TRACE("ProcessBioseq("<<id.AsFastaString()<<") len="<<len<<")");
  849.     _ASSERT(len == seq_len);
  850.     CHECK_END("get sequence map");
  851.     CHECK_WRAP();
  852.     CConstRef<CSeqMap> seq_map(&handle.GetSeqMap());
  853.     TSeqPos len = 0;
  854.     _TRACE("ProcessBioseq("<<id.AsFastaString()<<") - depth-restricted");
  855.     // Iterate seq-map except the last element
  856.     len = 0;
  857.     CSeqMap::const_iterator seg(seq_map, &scope, SSeqMapSelector()
  858.         .SetResolveCount(2));
  859.     vector<CSeqMap::const_iterator> itrs;
  860.     for ( ; seg != seq_map->end(&scope); ++seg ) {
  861.         _ASSERT(seg);
  862.         itrs.push_back(seg);
  863.         switch (seg.GetType()) {
  864.         case CSeqMap::eSeqData:
  865.             _TRACE('@'<<len<<": seqData("<<seg.GetLength()<<")");
  866.             len += seg.GetLength();
  867.             break;
  868.         case CSeqMap::eSeqRef:
  869.             _TRACE('@'<<len<<": seqRef("<<seg.GetLength()<<
  870.                    ", id="<<seg.GetRefSeqid().AsString()<<
  871.                    ", pos="<<seg.GetRefPosition()<<
  872.                    ", minus="<<seg.GetRefMinusStrand()<<")");
  873.             len += seg.GetLength();
  874.             break;
  875.         case CSeqMap::eSeqGap:
  876.             _TRACE('@'<<len<<": seqGap("<<seg.GetLength()<<")");
  877.             len += seg.GetLength();
  878.             break;
  879.         case CSeqMap::eSeqEnd:
  880.             _ASSERT("Unexpected END segment" && 0);
  881.             break;
  882.         default:
  883.             _ASSERT("Unexpected segment type" && 0);
  884.             break;
  885.         }
  886.     }
  887.     _ASSERT(!seg);
  888.     for ( int i = itrs.size()-1; i >= 0; --i ) {
  889.         --seg;
  890.         _ASSERT(seg);
  891.         _ASSERT(seg == itrs[i]);
  892.     }
  893.     --seg;
  894.     _ASSERT(!seg);
  895.     CHECK_END("get restricted sequence map");
  896.     CHECK_WRAP();
  897.     CConstRef<CSeqMap> seq_map(&handle.GetSeqMap());
  898.     TSeqPos len = 0;
  899.     _TRACE("ProcessBioseq("<<id.AsFastaString()<<") - TSE-restricted");
  900.     // Iterate seq-map except the last element
  901.     len = 0;
  902.     CSeqMap::const_iterator seg(seq_map, &scope, SSeqMapSelector()
  903.         .SetLimitTSE(&handle.GetTopLevelSeqEntry())
  904.         .SetResolveCount(kInvalidSeqPos)
  905.         .SetFlags(CSeqMap::fFindAny));
  906.     vector<CSeqMap::const_iterator> itrs;
  907.     for ( ; seg != seq_map->end(&scope); ++seg ) {
  908.         _ASSERT(seg);
  909.         itrs.push_back(seg);
  910.         switch (seg.GetType()) {
  911.         case CSeqMap::eSeqData:
  912.             _TRACE('@'<<len<<": seqData("<<seg.GetLength()<<")");
  913.             len += seg.GetLength();
  914.             break;
  915.         case CSeqMap::eSeqRef:
  916.             _TRACE('@'<<len<<": seqRef("<<seg.GetLength()<<
  917.                    ", id="<<seg.GetRefSeqid().AsString()<<
  918.                    ", pos="<<seg.GetRefPosition()<<
  919.                    ", minus="<<seg.GetRefMinusStrand()<<")");
  920.             len += seg.GetLength();
  921.             break;
  922.         case CSeqMap::eSeqGap:
  923.             _TRACE('@'<<len<<": seqGap("<<seg.GetLength()<<")");
  924.             len += seg.GetLength();
  925.             break;
  926.         case CSeqMap::eSeqEnd:
  927.             _ASSERT("Unexpected END segment" && 0);
  928.             break;
  929.         default:
  930.             _ASSERT("Unexpected segment type" && 0);
  931.             break;
  932.         }
  933.     }
  934.     _ASSERT(!seg);
  935.     for ( int i = itrs.size()-1; i >= 0; --i ) {
  936.         --seg;
  937.         _ASSERT(seg);
  938.         _ASSERT(seg == itrs[i]);
  939.     }
  940.     --seg;
  941.     _ASSERT(!seg);
  942.     CHECK_END("get restricted sequence map");
  943.     CHECK_WRAP();
  944.     CConstRef<CSeqMap> seq_map(&handle.GetSeqMap());
  945.     TSeqPos len = 0;
  946.     _TRACE("ProcessBioseq("<<id.AsFastaString()<<
  947.            ") seq_len="<<seq_len<<") resolved:");
  948.     // Iterate seq-map except the last element
  949.     len = 0;
  950.     CSeqMap::const_iterator seg = seq_map->begin_resolved(&scope);
  951.     vector<CSeqMap::const_iterator> itrs;
  952.     for ( ; seg != seq_map->end_resolved(&scope); ++seg ) {
  953.         _ASSERT(seg);
  954.         itrs.push_back(seg);
  955.         switch (seg.GetType()) {
  956.         case CSeqMap::eSeqData:
  957.             _TRACE('@'<<len<<": seqData("<<seg.GetLength()<<")");
  958.             len += seg.GetLength();
  959.             break;
  960.         case CSeqMap::eSeqRef:
  961.             _TRACE('@'<<len<<": seqRef("<<seg.GetLength()<<
  962.                    ", id="<<seg.GetRefSeqid().AsString()<<
  963.                    ", pos="<<seg.GetRefPosition()<<
  964.                    ", minus="<<seg.GetRefMinusStrand()<<")");
  965.             _ASSERT("Unexpected REF segment" && 0);
  966.             //len += seg.GetLength();
  967.             break;
  968.         case CSeqMap::eSeqGap:
  969.             _TRACE('@'<<len<<": seqGap("<<seg.GetLength()<<")");
  970.             len += seg.GetLength();
  971.             break;
  972.         case CSeqMap::eSeqEnd:
  973.             _ASSERT("Unexpected END segment" && 0);
  974.             break;
  975.         default:
  976.             _ASSERT("Unexpected segment type" && 0);
  977.             break;
  978.         }
  979.     }
  980.     _ASSERT(!seg);
  981.     for ( int i = itrs.size()-1; i >= 0; --i ) {
  982.         --seg;
  983.         _ASSERT(seg);
  984.         _ASSERT(seg == itrs[i]);
  985.     }
  986.     --seg;
  987.     _ASSERT(!seg);
  988.     _TRACE("ProcessBioseq("<<id.AsFastaString()<<") len="<<len<<")");
  989.     _ASSERT(len == seq_len);
  990.     CHECK_END("get resolved sequence map");
  991.     CSeqVector seq_vect;
  992.     CHECK_WRAP();
  993.     seq_vect = handle.GetSeqVector(CBioseq_Handle::eCoding_NotSet);
  994.     string sout = "";
  995.     {{
  996.         CSeqVector_CI vit(seq_vect, 0);
  997.         for ( ; vit.GetPos() < seq_vect.size(); ++vit) {
  998.             sout += *vit;
  999.         }
  1000.         _ASSERT(NStr::PrintableString(sout) == seq_str);
  1001.         seq_vect.SetCoding(CBioseq_Handle::eCoding_Ncbi);
  1002.         int pos = seq_vect.size() - 1;
  1003.         vit.SetPos(pos);
  1004.         for ( ; pos > 0; --vit, --pos) {
  1005.             _ASSERT(sout[vit.GetPos()] == *vit);
  1006.         }
  1007.         _ASSERT(sout[vit.GetPos()] == *vit);
  1008.         vit.GetSeqData(0, seq_vect.size(), sout);
  1009.         _ASSERT(NStr::PrintableString(sout) == seq_str);
  1010.         sout = "";
  1011.         seq_vect.SetCoding(CBioseq_Handle::eCoding_NotSet);
  1012.     }}
  1013.     for (TSeqPos i = 0; i < seq_vect.size(); i++) {
  1014.         sout += seq_vect[i];
  1015.     }
  1016.     _ASSERT(NStr::PrintableString(sout) == seq_str);
  1017.     CHECK_END("get seq vector");
  1018.     CHECK_WRAP();
  1019.     CSeq_interval interval;
  1020.     interval.SetId(id);
  1021.     interval.SetFrom(seq_str.size());
  1022.     interval.SetTo(seq_str.size()-1);
  1023.     CSeq_loc loc;
  1024.     loc.SetInt(interval);
  1025.     seq_vect = handle.GetSequenceView(loc, CBioseq_Handle::eViewConstructed);
  1026.     string sout = "";
  1027.     for (TSeqPos i = 0; i < seq_vect.size(); i++) {
  1028.         sout += seq_vect[i];
  1029.     }
  1030.     _ASSERT(sout.empty());
  1031.     CHECK_END_ALWAYS("get seq view");
  1032.     if (seq_core->GetInst().IsSetStrand() &&
  1033.         seq_core->GetInst().GetStrand() == CSeq_inst::eStrand_ds) {
  1034.         CHECK_WRAP();
  1035.         seq_vect = handle.GetSeqVector(CBioseq_Handle::eCoding_NotSet,
  1036.                                        eNa_strand_minus);
  1037.         string sout_rev = "";
  1038.         for (TSeqPos i = seq_vect.size(); i> 0; i--) {
  1039.             sout_rev += seq_vect[i-1];
  1040.         }
  1041.         _ASSERT(NStr::PrintableString(sout_rev) == seq_str_compl);
  1042.         CHECK_END("get reverse seq vector");
  1043.     }
  1044.     else {
  1045.         _ASSERT(seq_str_compl.empty());
  1046.     }
  1047.     CConstRef<CBioseq> bioseq(&(handle.GetBioseq()));
  1048.     int count = 0;
  1049.     CHECK_WRAP();
  1050.     // Test CSeq_descr iterator
  1051.     for (CDesc_CI desc_it(handle); desc_it;  ++desc_it) {
  1052.         count++;
  1053.         //### _ASSERT(desc_it->
  1054.     }
  1055.     _ASSERT(count == seq_desc_cnt);
  1056.     CHECK_END_ALWAYS("count CSeq_descr");
  1057.     CHECK_WRAP();
  1058.     // Test CSeq_feat iterator, resolve-all method
  1059.     CSeq_loc loc;
  1060.     loc.SetWhole(id);
  1061.     count = 0;
  1062.     if ( !tse_feat_test ) {
  1063.         if ( sm_DumpFeatures ) {
  1064.             NcbiCout << "-------------------- CFeat_CI resolve-all over "<<
  1065.                 id.AsFastaString()<<" --------------------" << NcbiEndl;
  1066.         }
  1067.         for ( CFeat_CI feat_it(scope, loc, SAnnotSelector().SetResolveAll());
  1068.               feat_it;  ++feat_it) {
  1069.             count++;
  1070.             if ( sm_DumpFeatures ) {
  1071.                 auto_ptr<CObjectOStream>
  1072.                     out(CObjectOStream::Open(eSerial_AsnText, NcbiCout));
  1073.                 *out << feat_it->GetMappedFeature();
  1074.             }
  1075.             //### _ASSERT(feat_it->
  1076.         }
  1077.         _ASSERT(count == seq_feat_ra_cnt);
  1078.     }
  1079.     CHECK_END("get annot set");
  1080.     CHECK_WRAP();
  1081.     // Test CSeq_feat iterator
  1082.     CSeq_loc loc;
  1083.     loc.SetWhole(id);
  1084.     count = 0;
  1085.     set<const CSeq_annot*> annot_set;
  1086.     if ( sm_DumpFeatures ) {
  1087.         NcbiCout << "-------------------- CFeat_CI over "<<
  1088.             id.AsFastaString()<<" --------------------" << NcbiEndl;
  1089.     }
  1090.     if ( !tse_feat_test ) {
  1091.         for ( CFeat_CI feat_it(scope, loc); feat_it;  ++feat_it) {
  1092.             count++;
  1093.             annot_set.insert(&feat_it.GetSeq_annot());
  1094.             if ( sm_DumpFeatures ) {
  1095.                 auto_ptr<CObjectOStream>
  1096.                     out(CObjectOStream::Open(eSerial_AsnText, NcbiCout));
  1097.                 *out << feat_it->GetMappedFeature();
  1098.             }
  1099.             //### _ASSERT(feat_it->
  1100.         }
  1101.         if ( sm_DumpFeatures ) {
  1102.             NcbiCout << "-------------------- "
  1103.                 "product CFeat_CI --------------------" << NcbiEndl;
  1104.         }
  1105.         // Get products
  1106.         for ( CFeat_CI feat_it(scope, loc, SAnnotSelector().SetByProduct());
  1107.               feat_it;  ++feat_it) {
  1108.             count++;
  1109.             annot_set.insert(&feat_it.GetSeq_annot());
  1110.             if ( sm_DumpFeatures ) {
  1111.                 auto_ptr<CObjectOStream>
  1112.                     out(CObjectOStream::Open(eSerial_AsnText, NcbiCout));
  1113.                 *out << feat_it->GetMappedFeature();
  1114.             }
  1115.             //### _ASSERT(feat_it->
  1116.         }
  1117.     }
  1118.     else {
  1119.         if ( sm_DumpFeatures ) {
  1120.             NcbiCout << "-------------------- "
  1121.                 "LimitTSE --------------------" << NcbiEndl;
  1122.         }
  1123.         for ( CFeat_CI feat_it(handle, 0, 0,
  1124.                                SAnnotSelector()
  1125.                                .SetLimitTSE(&handle.GetTopLevelSeqEntry()));
  1126.               feat_it;  ++feat_it) {
  1127.             count++;
  1128.             annot_set.insert(&feat_it.GetSeq_annot());
  1129.             if ( sm_DumpFeatures ) {
  1130.                 auto_ptr<CObjectOStream>
  1131.                     out(CObjectOStream::Open(eSerial_AsnText, NcbiCout));
  1132.                 *out << feat_it->GetMappedFeature();
  1133.             }
  1134.             //### _ASSERT(feat_it->
  1135.         }
  1136.         if ( sm_DumpFeatures ) {
  1137.             NcbiCout << "-------------------- "
  1138.                 "product CFeat_CI --------------------" << NcbiEndl;
  1139.         }
  1140.         // Get products
  1141.         for ( CFeat_CI feat_it(handle, 0, 0,
  1142.                                SAnnotSelector()
  1143.                                .SetLimitTSE(&handle.GetTopLevelSeqEntry())
  1144.                                .SetByProduct());
  1145.               feat_it;  ++feat_it) {
  1146.             count++;
  1147.             annot_set.insert(&feat_it.GetSeq_annot());
  1148.             if ( sm_DumpFeatures ) {
  1149.                 auto_ptr<CObjectOStream>
  1150.                     out(CObjectOStream::Open(eSerial_AsnText, NcbiCout));
  1151.                 *out << feat_it->GetMappedFeature();
  1152.             }
  1153.             //### _ASSERT(feat_it->
  1154.         }
  1155.     }
  1156.     if ( sm_DumpFeatures ) {
  1157.         NcbiCout << "-------------------- "
  1158.             "end CFeat_CI --------------------" << NcbiEndl;
  1159.     }
  1160.     _ASSERT(count == seq_feat_cnt);
  1161.     _ASSERT(annot_set.size() == feat_annots_cnt);
  1162.     CHECK_END("get annot set");
  1163.     CHECK_WRAP();
  1164.     // Test CSeq_feat iterator for the specified range
  1165.     // Copy location seq-id
  1166.     count = 0;
  1167.     set<const CSeq_annot*> annot_set;
  1168.     CSeq_loc loc;
  1169.     loc.SetInt().SetId().Assign(id);
  1170.     loc.SetInt().SetFrom(0);
  1171.     loc.SetInt().SetTo(10);
  1172.     if ( !tse_feat_test ) {
  1173.         for ( CFeat_CI feat_it(scope, loc);
  1174.               feat_it;  ++feat_it) {
  1175.             count++;
  1176.             annot_set.insert(&feat_it.GetSeq_annot());
  1177.             //### _ASSERT(feat_it->
  1178.         }
  1179.     }
  1180.     else {
  1181.         for ( CFeat_CI feat_it(handle, 0, 10,
  1182.                                SAnnotSelector()
  1183.                                .SetLimitTSE(&handle.GetTopLevelSeqEntry()));
  1184.               feat_it;  ++feat_it) {
  1185.             count++;
  1186.             annot_set.insert(&feat_it.GetSeq_annot());
  1187.             //### _ASSERT(feat_it->
  1188.         }
  1189.     }
  1190.     _ASSERT(count == seq_featrg_cnt);
  1191.     _ASSERT(annot_set.size() == featrg_annots_cnt);
  1192.     CHECK_END("get annot set");
  1193.     CHECK_WRAP();
  1194.     // Test CSeq_align iterator
  1195.     count = 0;
  1196.     set<const CSeq_annot*> annot_set;
  1197.     CSeq_loc loc;
  1198.     loc.SetWhole(id);
  1199.     if ( !tse_feat_test ) {
  1200.         for (CAlign_CI align_it(scope, loc);
  1201.              align_it;  ++align_it) {
  1202.             count++;
  1203.             annot_set.insert(&align_it.GetSeq_annot());
  1204.             //### _ASSERT(align_it->
  1205.         }
  1206.     }
  1207.     else {
  1208.         for (CAlign_CI align_it(handle, 0, 0,
  1209.                                 SAnnotSelector()
  1210.                                 .SetLimitTSE(&handle.GetTopLevelSeqEntry()));
  1211.              align_it;  ++align_it) {
  1212.             count++;
  1213.             annot_set.insert(&align_it.GetSeq_annot());
  1214.             //### _ASSERT(align_it->
  1215.         }
  1216.     }
  1217.     _ASSERT(count == seq_align_cnt);
  1218.     _ASSERT(annot_set.size() == align_annots_cnt);
  1219.     CHECK_END("get align set");
  1220.     CHECK_WRAP();
  1221.     // Test CSeq_align iterator for the specified range
  1222.     // Copy location seq-id
  1223.     count = 0;
  1224.     set<const CSeq_annot*> annot_set;
  1225.     CSeq_loc loc;
  1226.     loc.SetInt().SetId().Assign(id);
  1227.     loc.SetInt().SetFrom(10);
  1228.     loc.SetInt().SetTo(20);
  1229.     if ( !tse_feat_test ) {
  1230.         for (CAlign_CI align_it(scope, loc);
  1231.              align_it;  ++align_it) {
  1232.             count++;
  1233.             annot_set.insert(&align_it.GetSeq_annot());
  1234.             //### _ASSERT(align_it->
  1235.         }
  1236.     }
  1237.     else {
  1238.         for (CAlign_CI align_it(handle, 10, 20,
  1239.                                 SAnnotSelector()
  1240.                                 .SetLimitTSE(&handle.GetTopLevelSeqEntry()));
  1241.              align_it;  ++align_it) {
  1242.             count++;
  1243.             annot_set.insert(&align_it.GetSeq_annot());
  1244.             //### _ASSERT(align_it->
  1245.         }
  1246.     }
  1247.     _ASSERT(count == seq_alignrg_cnt);
  1248.     _ASSERT(annot_set.size() == alignrg_annots_cnt);
  1249.     CHECK_END("get align set");
  1250. #if !defined(_MT)
  1251.     CHECK_WRAP();
  1252.     CRef<CSeq_entry> entry(const_cast<CSeq_entry*>(
  1253.         handle.GetBioseq().GetParentEntry()));
  1254.     CSeq_entry* parent = entry->GetParentEntry();
  1255.     scope.RemoveEntry(*entry);
  1256.     handle = scope.GetBioseqHandle(id);
  1257.     _ASSERT(!handle  ||  handle.GetBioseq().GetParentEntry() != entry);
  1258.     if ( parent ) {
  1259.         // Non-TSE
  1260.         scope.AttachEntry(*parent, *entry);
  1261.     }
  1262.     else {
  1263.         // TSE
  1264.         scope.AddTopLevelSeqEntry(*entry);
  1265.     }
  1266.     handle = scope.GetBioseqHandle(id);
  1267.     _ASSERT(handle);
  1268.     CHECK_END_ALWAYS("remove/attach seq-entry");
  1269. #endif
  1270. }
  1271. void CTestHelper::TestDataRetrieval(CScope& scope, int idx,
  1272.                                     int delta)
  1273. {
  1274.     CSeq_id id;
  1275.     // find seq. by local id
  1276.     id.SetLocal().SetStr("seq" + NStr::IntToString(11+idx*1000));
  1277.     // iterate through the whole Scope
  1278.     ProcessBioseq(scope, id, 40,
  1279.         "CAGCAGCGGTACAGGAGGGTGAGACATCCCAGAGCGGTGC",
  1280.         "GTCGTCGCCATGTCCTCCCACTCTGTAGGGTCTCGCCACG",
  1281.         2, 4+delta, 4+delta, 2+delta, 1, 0, 2+delta, 2+delta, 1, 0);
  1282.     // iterate through the specific sequence only
  1283.     ProcessBioseq(scope, id, 40,
  1284.         "CAGCAGCGGTACAGGAGGGTGAGACATCCCAGAGCGGTGC",
  1285.         "GTCGTCGCCATGTCCTCCCACTCTGTAGGGTCTCGCCACG",
  1286.         2, -1, 2+delta, 1+delta, 1, 0, 1+delta, 1+delta, 1, 0, true);
  1287.     // find seq. by GI
  1288.     id.SetGi(12+idx*1000);
  1289.     ProcessBioseq(scope, id, 40,
  1290.         "CAATAACCTCAGCAGCAACAAGTGGCTTCCAGCGCCCTCC",
  1291.         "GTTATTGGAGTCGTCGTTGTTCACCGAAGGTCGCGGGAGG",
  1292.         1, 2, 3, 1, 1, 1, 2, 1, 1, 1); //1, 3, 2, 1, 1, 2, 2, 1, 1);
  1293.     // segmented sequence
  1294.     id.SetGi(21+idx*1000);
  1295.     ProcessBioseq(scope, id, 62,
  1296.         "CAGCACAATAACCTCAGCAGCAACAAGTGGCTTCCAGCGCCCTCCCAGCACAATAAAAAAAA",
  1297.         "GTCGTGTTATTGGAGTCGTCGTTGTTCACCGAAGGTCGCGGGAGGGTCGTGTTATTTTTTTT",
  1298.         1, 6+delta, 2, 1, 0, 0, 1, 1, 0, 0);
  1299.     id.SetGi(22+idx*1000);
  1300.     ProcessBioseq(scope, id, 20, "QGCGEQTMTLLAPTLAASRY", "",
  1301.         0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  1302.     // another seq.data format
  1303.     id.SetGi(23+idx*1000);
  1304.     ProcessBioseq(scope, id, 13,
  1305.         "\x00\x03\x02\x01\x00\x02\x01\x03\x02\x03\x00\x01\x02",
  1306.         "\x03\x00\x01\x02\x03\x01\x02\x00\x01\x00\x03\x02\x01",
  1307.         0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  1308. }
  1309. END_SCOPE(objects)
  1310. END_NCBI_SCOPE
  1311. /*
  1312. * ===========================================================================
  1313. *
  1314. * $Log: test_helper.cpp,v $
  1315. * Revision 1000.1  2004/06/01 19:42:11  gouriano
  1316. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  1317. *
  1318. * Revision 1.4  2004/05/21 21:42:52  gorelenk
  1319. * Added PCH ncbi_pch.hpp
  1320. *
  1321. * Revision 1.3  2004/02/09 19:18:56  grichenk
  1322. * Renamed CDesc_CI to CSeq_descr_CI. Redesigned CSeq_descr_CI
  1323. * and CSeqdesc_CI to avoid using data directly.
  1324. *
  1325. * Revision 1.2  2003/12/30 22:14:45  vasilche
  1326. * Updated genbank loader and readers plugins.
  1327. *
  1328. * Revision 1.49  2003/12/22 22:32:10  grichenk
  1329. * Enabled RemoveEntry/AttachEntry test in non-MT builds.
  1330. *
  1331. * Revision 1.48  2003/12/18 18:14:47  grichenk
  1332. * Removed test for CScope::RemoveEntry() since it breaks MT test.
  1333. *
  1334. * Revision 1.47  2003/12/18 16:38:07  grichenk
  1335. * Added CScope::RemoveEntry()
  1336. *
  1337. * Revision 1.46  2003/11/10 18:12:09  grichenk
  1338. * Removed extra EFlags declaration from seq_map_ci.hpp
  1339. *
  1340. * Revision 1.45  2003/11/04 16:21:37  grichenk
  1341. * Updated CAnnotTypes_CI to map whole features instead of splitting
  1342. * them by sequence segments.
  1343. *
  1344. * Revision 1.44  2003/09/30 16:22:05  vasilche
  1345. * Updated internal object manager classes to be able to load ID2 data.
  1346. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  1347. * Scope caches results of requests for data to data loaders.
  1348. * Optimized CSeq_id_Handle for gis.
  1349. * Optimized bioseq lookup in scope.
  1350. * Reduced object allocations in annotation iterators.
  1351. * CScope is allowed to be destroyed before other objects using this scope are
  1352. * deleted (feature iterators, bioseq handles etc).
  1353. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  1354. * Added 'adaptive' option to objmgr_demo application.
  1355. *
  1356. * Revision 1.43  2003/09/05 18:45:10  grichenk
  1357. * Fixed exceptions
  1358. *
  1359. * Revision 1.42  2003/07/14 21:13:27  grichenk
  1360. * Added possibility to resolve seq-map iterator withing a single TSE
  1361. * and to skip intermediate references during this resolving.
  1362. *
  1363. * Revision 1.41  2003/06/12 18:39:46  vasilche
  1364. * Chech CSeqVector assignment.
  1365. *
  1366. * Revision 1.40  2003/06/02 21:04:25  vasilche
  1367. * Fixed CSeqVector_CI test to not to go beyond begin().
  1368. *
  1369. * Revision 1.39  2003/06/02 16:06:39  dicuccio
  1370. * Rearranged src/objects/ subtree.  This includes the following shifts:
  1371. *     - src/objects/asn2asn --> arc/app/asn2asn
  1372. *     - src/objects/testmedline --> src/objects/ncbimime/test
  1373. *     - src/objects/objmgr --> src/objmgr
  1374. *     - src/objects/util --> src/objmgr/util
  1375. *     - src/objects/alnmgr --> src/objtools/alnmgr
  1376. *     - src/objects/flat --> src/objtools/flat
  1377. *     - src/objects/validator --> src/objtools/validator
  1378. *     - src/objects/cddalignview --> src/objtools/cddalignview
  1379. * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  1380. * replaces the three libmmdb? libs.
  1381. *
  1382. * Revision 1.37  2003/05/28 16:20:16  vasilche
  1383. * Added check for REF segments.
  1384. *
  1385. * Revision 1.36  2003/05/27 19:44:07  grichenk
  1386. * Added CSeqVector_CI class
  1387. *
  1388. * Revision 1.35  2003/05/23 16:32:54  vasilche
  1389. * Added tests for backward traversal of CSeqMap_CI.
  1390. *
  1391. * Revision 1.34  2003/05/12 19:17:42  vasilche
  1392. * Added initialization of mandatory field.
  1393. *
  1394. * Revision 1.33  2003/05/09 20:34:23  grichenk
  1395. * Reverted to 1.31
  1396. *
  1397. * Revision 1.32  2003/05/09 20:28:03  grichenk
  1398. * Changed warnings to info
  1399. *
  1400. * Revision 1.31  2003/04/24 16:12:39  vasilche
  1401. * Object manager internal structures are splitted more straightforward.
  1402. * Removed excessive header dependencies.
  1403. *
  1404. * Revision 1.30  2003/03/26 14:30:23  lavr
  1405. * Conform to modified representation of NUL char in NStr::PrintableString()
  1406. *
  1407. * Revision 1.29  2003/03/21 14:52:28  vasilche
  1408. * Modified testobjmgr1 to reflect changes in CFeat_CI and CAlign_CI
  1409. * constructors' behaviour.
  1410. *
  1411. * Revision 1.28  2003/03/05 20:56:44  vasilche
  1412. * SAnnotSelector now holds all parameters of annotation iterators.
  1413. *
  1414. * Revision 1.27  2003/03/04 16:43:53  grichenk
  1415. * +Test CFeat_CI with eResolve_All flag
  1416. *
  1417. * Revision 1.26  2003/02/28 16:37:47  vasilche
  1418. * Fixed expected feature count.
  1419. * Added optional flags to testobjmgr to dump generated data and found features.
  1420. *
  1421. * Revision 1.25  2003/01/24 20:13:38  vasilche
  1422. * Added check for empty CSeqVector from CBioseq_Handle::GetSequenceView().
  1423. *
  1424. * Revision 1.24  2003/01/22 20:11:55  vasilche
  1425. * Merged functionality of CSeqMapResolved_CI to CSeqMap_CI.
  1426. * CSeqMap_CI now supports resolution and iteration over sequence range.
  1427. * Added several caches to CScope.
  1428. * Optimized CSeqVector().
  1429. * Added serveral variants of CBioseqHandle::GetSeqVector().
  1430. * Tried to optimize annotations iterator (not much success).
  1431. * Rewritten CHandleRange and CHandleRangeMap classes to avoid sorting of list.
  1432. *
  1433. * Revision 1.23  2003/01/22 19:25:11  ucko
  1434. * Avoid use of xobjutil.
  1435. *
  1436. * Revision 1.22  2002/12/26 20:34:53  ucko
  1437. * Drop unused header <sstream>, which older compilers (such as GCC 2.9x) lack;
  1438. * move CVS log to end.
  1439. *
  1440. * Revision 1.21  2002/12/26 16:39:24  vasilche
  1441. * Object manager class CSeqMap rewritten.
  1442. *
  1443. * Revision 1.20  2002/12/20 20:54:25  grichenk
  1444. * Added optional location/product switch to CFeat_CI
  1445. *
  1446. * Revision 1.19  2002/12/19 20:18:57  grichenk
  1447. * Fixed test case for minus strand location
  1448. *
  1449. * Revision 1.18  2002/11/08 19:43:37  grichenk
  1450. * CConstRef<> constructor made explicit
  1451. *
  1452. * Revision 1.17  2002/09/10 19:55:54  grichenk
  1453. * Catch exceptions when resolving seq-maps; new arguments for GetSeqVector()
  1454. *
  1455. * Revision 1.16  2002/07/25 15:01:53  grichenk
  1456. * Replaced non-const GetXXX() with SetXXX()
  1457. *
  1458. * Revision 1.15  2002/07/03 14:40:46  ucko
  1459. * Use typedef rather than hard-coded type for Dense_diag.ids.
  1460. *
  1461. * Revision 1.14  2002/06/07 16:13:24  ucko
  1462. * GetTitle() is now in sequence::.
  1463. *
  1464. * Revision 1.13  2002/06/06 19:49:54  clausen
  1465. * Changed CBioseq_Handle::GetTitle() call to GetTitle()
  1466. *
  1467. * Revision 1.12  2002/05/24 14:57:14  grichenk
  1468. * SerialAssign<>() -> CSerialObject::Assign()
  1469. *
  1470. * Revision 1.11  2002/05/21 18:39:31  grichenk
  1471. * CBioseq_Handle::GetResolvedSeqMap() -> CreateResolvedSeqMap()
  1472. *
  1473. * Revision 1.10  2002/05/09 14:21:50  grichenk
  1474. * Turned GetTitle() test on, removed unresolved seq-map test
  1475. *
  1476. * Revision 1.9  2002/05/06 03:28:53  vakatov
  1477. * OM/OM1 renaming
  1478. *
  1479. * Revision 1.8  2002/05/03 21:28:12  ucko
  1480. * Introduce T(Signed)SeqPos.
  1481. *
  1482. * Revision 1.7  2002/04/25 18:15:25  grichenk
  1483. * Adjusted tests to work with the updated CSeqVector
  1484. *
  1485. * Revision 1.6  2002/04/23 15:26:07  gouriano
  1486. * added test_assert.h
  1487. *
  1488. * Revision 1.5  2002/04/22 20:07:45  grichenk
  1489. * Commented calls to CBioseq::ConstructExcludedSequence()
  1490. *
  1491. * Revision 1.4  2002/04/22 18:33:48  gouriano
  1492. * corrected feature counts
  1493. *
  1494. * Revision 1.3  2002/03/28 21:22:38  grichenk
  1495. * More tests for location-exclusive bioseq
  1496. *
  1497. * Revision 1.2  2002/03/18 21:47:15  grichenk
  1498. * Moved most includes to test_helper.cpp
  1499. * Added test for CBioseq::ConstructExcludedSequence()
  1500. *
  1501. * Revision 1.1  2002/03/13 18:06:31  gouriano
  1502. * restructured MT test. Put common functions into a separate file
  1503. *
  1504. * ===========================================================================
  1505. */