NCBI C++ ToolKit
unit_test_uncultured_taxlookup.cpp
Go to the documentation of this file.

Go to the SVN repository for this file.

1 /* $Id: unit_test_uncultured_taxlookup.cpp 47455 2023-04-14 17:49:22Z asztalos $
2 * ===========================================================================
3 *
4 * PUBLIC DOMAIN NOTICE
5 * National Center for Biotechnology Information
6 *
7 * This software/database is a "United States Government Work" under the
8 * terms of the United States Copyright Act. It was written as part of
9 * the author's official duties as a United States Government employee and
10 * thus cannot be copyrighted. This software/database is freely available
11 * to the public for use. The National Library of Medicine and the U.S.
12 * Government have not placed any restriction on its use or reproduction.
13 *
14 * Although all reasonable efforts have been taken to ensure the accuracy
15 * and reliability of the software and data, the NLM and the U.S.
16 * Government do not and cannot warrant the performance or results that
17 * may be obtained by using this software or data. The NLM and the U.S.
18 * Government disclaim all warranties, express or implied, including
19 * warranties of performance, merchantability or fitness for any particular
20 * purpose.
21 *
22 * Please cite the author in any work or product based on this material.
23 *
24 * ===========================================================================
25 *
26 * Author: Andrea Asztalos
27 *
28 * File Description:
29 * Unit tests for macro utility functions
30 */
31 
32 #include <ncbi_pch.hpp>
33 
39 
40 // This header must be included before all Boost.Test headers if there are any
41 #include <corelib/test_boost.hpp>
47 
50 USING_SCOPE(macro);
51 
53 {
54 }
55 
57 {
58 }
59 
60 static const string uncultured_taxnames[] = {
61  "bacteria",
62  "bacterium",
63  "uncultured bacterium",
64  "Uncultured Actinobacteria",
65  "Uncultured Actinobacteridae",
66  "Uncultured Actinobacteridae bacterium",
67  "Uncultured Actinomycetales",
68  "Uncultured Anaerolineaceae",
69  "Uncultured Chloroflexi",
70  "Uncultured Clostridium",
71  "Uncultured Deltaproteobacteria",
72  "Uncultured Desulfomonile",
73  "Uncultured Firmicutes",
74  "Uncultured Gemmatimonadetes",
75  "Uncultured Hyphomicrobiaceae",
76  "Uncultured Hyphomicrobium",
77  "Uncultured Legionella",
78  "Uncultured Marinobacterium",
79  "Uncultured Methylocystaceae",
80  "Uncultured Methylophilaceae",
81  "Uncultured Nitrospiraceae",
82  "Uncultured Nitrospirae",
83  "Uncultured Piscirickettsiaceae",
84  "Uncultured Porphyrobacter",
85  "Uncultured Rhizobiaceae",
86  "Uncultured Rhodobacter",
87  "Uncultured Rhodobacteraceae",
88  "Uncultured Rhodobiaceae",
89  "Uncultured Rhodocyclaceae",
90  "Uncultured Rubrobacteraceae",
91  "Uncultured Sphingobacteriia",
92  "Uncultured Thiohalophilus",
93  "uncultured Acidobacteria bacterium",
94  "uncultured Mycobacterium sp.",
95  "uncultured Pseudomonas sp.",
96  "uncultured Roseobacter sp.",
97  "uncultured alpha proteobacterium",
98  "uncultured beta proteobacterium",
99  "uncultured gamma proteobacterium",
100  "Uncultured Parachlamydia acanthamoebae",
101  "Uncultured Uncultured Trichococcus sp.",
102  "Uncultured Zymophilus paucivorans",
103  "uncultured Anaerovorax sp.",
104  "uncultured Clostridium sp.",
105  "uncultured Microbacterium sp.",
106  "uncultured Peptostreptococcaceae bacterium",
107  "uncultured Prosthecobacter sp.",
108  "uncultured Verrucomicrobia bacterium",
109  "Methanobacterium formicicum phage",
110  "Myrtapenidiella tenuiramis",
111  "Parateratosphaeria bellula"
112 };
113 
114 static const string uncultured_suggestions[] = {
115  "uncultured bacterium",
116  "uncultured bacterium",
117  "uncultured bacterium",
118  "uncultured Actinomycetota bacterium",
119  "uncultured Actinomycetes bacterium",
120  "uncultured Actinobacteridae bacterium",
121  "uncultured Actinomycetales bacterium",
122  "uncultured Anaerolineaceae bacterium",
123  "uncultured Chloroflexi",
124  "uncultured Clostridium sp.",
125  "uncultured delta proteobacterium",
126  "uncultured Desulfomonile sp.",
127  "uncultured Firmicutes bacterium",
128  "uncultured Gemmatimonadetes",
129  "uncultured Hyphomicrobiaceae bacterium",
130  "uncultured Hyphomicrobium sp.",
131  "uncultured Legionella sp.",
132  "uncultured Marinobacterium sp.",
133  "uncultured Methylocystaceae bacterium",
134  "uncultured Methylophilaceae bacterium",
135  "uncultured Nitrospiraceae bacterium",
136  "uncultured Nitrospirota bacterium",
137  "Uncultured Piscirickettsiaceae",
138  "uncultured Porphyrobacter sp.",
139  "uncultured Rhizobiaceae bacterium",
140  "uncultured Rhodobacter sp.",
141  "uncultured Rhodobacteraceae",
142  "uncultured Rhodobiaceae bacterium",
143  "uncultured Rhodocyclaceae bacterium",
144  "uncultured Rubrobacteraceae bacterium",
145  "uncultured Sphingobacteriia bacterium",
146  "uncultured Thiohalophilus sp.",
147  "uncultured Acidobacteriota bacterium",
148  "uncultured Mycobacterium sp.",
149  "uncultured Pseudomonas sp.",
150  "uncultured Roseobacter sp.",
151  "uncultured Alphaproteobacteria bacterium",
152  "uncultured beta proteobacterium",
153  "uncultured Gammaproteobacteria bacterium",
154  "uncultured Parachlamydia sp.",
155  "uncultured Trichococcus sp.",
156  "uncultured Propionispira sp.",
157  "uncultured Anaerovorax sp.",
158  "uncultured Clostridium sp.",
159  "uncultured Microbacterium sp.",
160  "uncultured Peptostreptococcaceae bacterium",
161  "uncultured Prosthecobacter sp.",
162  "uncultured Verrucomicrobiota bacterium",
163  "uncultured Methanobacterium formicicum phage",
164  "uncultured Myrtapenidiella",
165  "uncultured Parateratosphaeria"
166 };
167 
168 template<class T>
169 string MakeAsn(const T& object)
170 {
172  str << MSerial_AsnText << object;
174 }
175 
176 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_TaxnameCorrections)
177 {
178  CRef<CBioSource> bsrc(new CBioSource());
179  CUnculturedTool uncultured_tool;
180  string correction;
181  for (size_t index = 0; index < sizeof(uncultured_taxnames) / sizeof(string); ++index) {
182  bsrc->SetOrg().SetTaxname(uncultured_taxnames[index]);
183  uncultured_tool.SetBioSource(*bsrc);
184 
185  correction = uncultured_tool.GetSuggestedCorrection();
186  BOOST_CHECK_EQUAL(uncultured_suggestions[index], correction);
187  }
188 
189  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
190  for (size_t index = 0; index < sizeof(uncultured_taxnames) / sizeof(string); ++index) {
191  bsrc->SetOrg().SetTaxname(uncultured_taxnames[index]);
192 
193  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
194  BOOST_CHECK_EQUAL(uncultured_suggestions[index], bsrc->GetTaxname());
195  }
196 }
197 
198 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_Taxon1)
199 {
200  CRef<CBioSource> bsrc(new CBioSource());
201  bsrc->SetOrg().SetTaxname("uncultured type I methanotroph");
202  bsrc->SetOrg().SetTaxId(TAX_ID_CONST(192503));
203  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
204  "[uncultured (using universal primers)]")));
205 
206  CUnculturedTool uncultured_tool;
207  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
208  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
209 
210  // taxname should not change, and the universal primer note should be removed
211  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), "uncultured type I methanotroph");
212  BOOST_CHECK(!converted_note);
213  BOOST_CHECK(!removed_note_sp);
214  BOOST_CHECK(removed_note_univ);
215 }
216 
217 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_Taxon2)
218 {
219  CRef<CBioSource> bsrc(new CBioSource());
220  bsrc->SetOrg().SetTaxname("uncultured bacterium");
221  bsrc->SetOrg().SetTaxId(TAX_ID_CONST(77133));
222  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
223  "[BankIt_uncultured16S_wizard]; [universal primers]")));
224 
225  CUnculturedTool uncultured_tool;
226  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
227  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
228 
229  // taxname should not change, and the universal primer note should be removed
230  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), "uncultured bacterium");
231  BOOST_CHECK(!converted_note);
232  BOOST_CHECK(!removed_note_sp);
233  BOOST_CHECK(removed_note_univ);
234 }
235 
236 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_Taxon3)
237 {
238  CRef<CBioSource> bsrc(new CBioSource());
239  bsrc->SetOrg().SetTaxname("Clonothrix fusca");
240  bsrc->SetOrg().SetTaxId(TAX_ID_CONST(415611));
241  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
242  "[BankIt_uncultured16S_wizard]; [universal primers]")));
243 
244  CUnculturedTool uncultured_tool;
245  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
246  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
247 
248  // taxname should change, and the universal primer note should be removed
249  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), "uncultured Clonothrix");
250  BOOST_CHECK(!converted_note);
251  BOOST_CHECK(!removed_note_sp);
252  BOOST_CHECK(removed_note_univ);
253 }
254 
255 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_Taxon4)
256 {
257  CRef<CBioSource> bsrc(new CBioSource());
258  bsrc->SetOrg().SetTaxname("Clonothrix fusca");
259  bsrc->SetOrg().SetTaxId(TAX_ID_CONST(415611));
260  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
261  "[uncultured (with species-specific primers)]")));
262 
263  CUnculturedTool uncultured_tool;
264  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
265  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
266 
267  // taxname should not change, and the uncultured and species specific primer note should be converted
268  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), "Clonothrix fusca");
269  BOOST_CHECK(converted_note);
270  BOOST_CHECK(!removed_note_sp);
271  BOOST_CHECK(!removed_note_univ);
272 }
273 
274 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_SpeciesSpecific1)
275 {
276  CRef<CBioSource> bsrc(new CBioSource());
277  bsrc->SetOrg().SetTaxname("Pandoraea pnomenusa");
278  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
279  "[uncultured (with species-specific primers)]")));
280 
281  CUnculturedTool uncultured_tool;
282  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
283  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
284 
285  BOOST_CHECK(converted_note);
286  BOOST_CHECK(!removed_note_sp);
287  BOOST_CHECK(!removed_note_univ);
288  BOOST_CHECK_EQUAL(MakeAsn(*bsrc),
289  "BioSource ::= {\n"
290  " org {\n"
291  " taxname \"Pandoraea pnomenusa\"\n"
292  " },\n"
293  " subtype {\n"
294  " {\n"
295  " subtype other,\n"
296  " name \"amplified with species-specific primers\"\n"
297  " },\n"
298  " {\n"
299  " subtype environmental-sample,\n"
300  " name \"\"\n"
301  " }\n"
302  " }\n"
303  "}\n");
304 
305 }
306 
307 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_SpeciesSpecific2)
308 {
309  CRef<CBioSource> bsrc(new CBioSource());
310  bsrc->SetOrg().SetTaxname("Pandoraea pnomenusa sp.");
311  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
312  "[uncultured (with species-specific primers)]")));
313 
314  CUnculturedTool uncultured_tool;
315  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
316  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
317 
318  BOOST_CHECK(converted_note);
319  BOOST_CHECK(!removed_note_sp);
320  BOOST_CHECK(!removed_note_univ);
321  BOOST_CHECK_EQUAL(MakeAsn(*bsrc),
322  "BioSource ::= {\n"
323  " org {\n"
324  " taxname \"Pandoraea pnomenusa\"\n"
325  " },\n"
326  " subtype {\n"
327  " {\n"
328  " subtype other,\n"
329  " name \"amplified with species-specific primers\"\n"
330  " },\n"
331  " {\n"
332  " subtype environmental-sample,\n"
333  " name \"\"\n"
334  " }\n"
335  " }\n"
336  "}\n");
337 
338 }
339 
340 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_SpeciesSpecific3)
341 {
342  CRef<CBioSource> bsrc(new CBioSource());
343  bsrc->SetOrg().SetTaxname("Anaplasma phagocytophilum");
345  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
346  "amplified with species-specific primers")));
347 
348  CUnculturedTool uncultured_tool;
349  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
350  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
351 
352  // taxname would not change, and the note should not change either
353  BOOST_CHECK(converted_note);
354  BOOST_CHECK(!removed_note_sp);
355  BOOST_CHECK(!removed_note_univ);
356  BOOST_CHECK_EQUAL(MakeAsn(*bsrc),
357  "BioSource ::= {\n"
358  " org {\n"
359  " taxname \"Anaplasma phagocytophilum\"\n"
360  " },\n"
361  " subtype {\n"
362  " {\n"
363  " subtype environmental-sample,\n"
364  " name \"\"\n"
365  " },\n"
366  " {\n"
367  " subtype other,\n"
368  " name \"amplified with species-specific primers\"\n"
369  " }\n"
370  " }\n"
371  "}\n");
372 }
373 
374 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_SpeciesSpecific4)
375 {
376  CRef<CBioSource> bsrc(new CBioSource());
377  bsrc->SetOrg().SetTaxname("Bacillus sp.");
378  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
379  "amplified with species-specific primers")));
380 
381  // note is removed and taxname changed
382  CUnculturedTool uncultured_tool;
383  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
384  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
385 
386  BOOST_CHECK(!converted_note);
387  BOOST_CHECK(removed_note_sp);
388  BOOST_CHECK(!removed_note_univ);
389  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), string("uncultured Bacillus sp."));
390  BOOST_CHECK(!bsrc->IsSetSubtype());
391 }
392 
393 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_SpeciesSpecific_Misspelled)
394 {
395  CRef<CBioSource> bsrc(new CBioSource());
396  bsrc->SetOrg().SetTaxname("Eschericia coli");
397  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
398  "[uncultured (using species-specific primers) bacterial source]")));
399 
400  CUnculturedTool uncultured_tool;
401  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
402  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
403 
404  // taxname would change and the subsource note would be converted
405  BOOST_CHECK(converted_note);
406  BOOST_CHECK(!removed_note_sp);
407  BOOST_CHECK(!removed_note_univ);
408  BOOST_CHECK_EQUAL(MakeAsn(*bsrc),
409  "BioSource ::= {\n"
410  " org {\n"
411  " taxname \"Escherichia coli\"\n"
412  " },\n"
413  " subtype {\n"
414  " {\n"
415  " subtype other,\n"
416  " name \"amplified with species-specific primers\"\n"
417  " },\n"
418  " {\n"
419  " subtype environmental-sample,\n"
420  " name \"\"\n"
421  " }\n"
422  " }\n"
423  "}\n");
424 }
425 
426 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_NoteInPlace)
427 {
428  CRef<CBioSource> bsrc(new CBioSource());
429  bsrc->SetOrg().SetTaxname("Anaplasma phagocytophilum");
430  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
431  "some note")));
432 
433  CUnculturedTool uncultured_tool;
434  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
435  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
436 
437  // taxname does not change, and the note is not modified
438  BOOST_CHECK(!converted_note);
439  BOOST_CHECK(!removed_note_sp);
440  BOOST_CHECK(!removed_note_univ);
441  BOOST_CHECK_EQUAL(MakeAsn(*bsrc),
442  "BioSource ::= {\n"
443  " org {\n"
444  " taxname \"uncultured Anaplasma sp.\"\n"
445  " },\n"
446  " subtype {\n"
447  " {\n"
448  " subtype other,\n"
449  " name \"some note\"\n"
450  " }\n"
451  " }\n"
452  "}\n");
453 }
454 
455 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_NotSpeciesSpecific1)
456 {
457  CRef<CBioSource> bsrc(new CBioSource());
458  bsrc->SetOrg().SetTaxname("Anaplasma sp.");
459  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
460  "[uncultured (using species-specific primers) bacterial source]")));
461 
462  CUnculturedTool uncultured_tool;
463  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
464  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
465 
466  // change taxname and remove species specific note
467  BOOST_CHECK(!converted_note);
468  BOOST_CHECK(removed_note_sp);
469  BOOST_CHECK(!removed_note_univ);
470  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), string("uncultured Anaplasma sp."));
471  // this step is performed by the TaxLookup
472  //BOOST_CHECK(NStr::FindNoCase(bsrc->GetLineage(), "environmental samples") != NPOS);
473 }
474 
475 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_NotSpeciesSpecific2)
476 {
477  CRef<CBioSource> bsrc(new CBioSource());
478  bsrc->SetOrg().SetTaxname("uncultured Chlamydiales");
479  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
480  "[BankIt_uncultured16S_wizard]; [species_specific primers]")));
481 
482  CUnculturedTool uncultured_tool;
483  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
484  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
485 
486  // change taxname and remove species specific note
487  BOOST_CHECK(!converted_note);
488  BOOST_CHECK(removed_note_sp);
489  BOOST_CHECK(!removed_note_univ);
490  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), string("uncultured Chlamydiales bacterium"));
491  // this step is performed by the TaxLookup
492  //BOOST_CHECK(NStr::FindNoCase(bsrc->GetLineage(), "environmental samples") != NPOS);
493 }
494 
495 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_NotSpeciesSpecific3)
496 {
497  CRef<CBioSource> bsrc(new CBioSource());
498  bsrc->SetOrg().SetTaxname("uncultured Enterococcus sp.");
499  bsrc->SetOrg().SetTaxId(TAX_ID_CONST(167972));
500  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
501  "[BankIt_uncultured16S_wizard]; [species_specific primers]; [dgge]")));
502 
503  CUnculturedTool uncultured_tool;
504  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
505  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
506 
507  // do not change taxname but remove the species specific note
508  BOOST_CHECK(!converted_note);
509  BOOST_CHECK(removed_note_sp);
510  BOOST_CHECK(!removed_note_univ);
511  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), string("uncultured Enterococcus sp."));
512  // this step is performed by the TaxLookup
513  //BOOST_CHECK(NStr::FindNoCase(bsrc->GetLineage(), "environmental samples") != NPOS);
514 }
515 
516 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_OrgModQualifiers)
517 {
518  CRef<CBioSource> bsrc(new CBioSource());
519  bsrc->SetOrg().SetTaxname("Campylobacter jejuni");
520  bsrc->SetOrg().SetOrgname().SetMod().push_back(Ref(new COrgMod(COrgMod::eSubtype_isolate, "IQDC-1")));
521  bsrc->SetOrg().SetOrgname().SetMod().push_back(Ref(new COrgMod(COrgMod::eSubtype_nat_host, "Domestic chicken")));
522 
523  CUnculturedTool uncultured_tool;
524  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
525  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
526 
527  // change taxname and do not remove the orgmod qualifiers
528  BOOST_CHECK(!converted_note);
529  BOOST_CHECK(!removed_note_sp);
530  BOOST_CHECK(!removed_note_univ);
531  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), string("uncultured Campylobacter sp."));
532  BOOST_CHECK(bsrc->IsSetOrgMod());
533  BOOST_CHECK(bsrc->GetOrgname().GetMod().size() == 2);
534 }
535 
536 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_UniversalPrimers1)
537 {
538  CRef<CBioSource> bsrc(new CBioSource());
539  bsrc->SetOrg().SetTaxname("Actinomadura madurae");
540  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
541  "[uncultured (using universal primers)]")));
542 
543  // change taxname and remove universal primers note
544  CUnculturedTool uncultured_tool;
545  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
546  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
547 
548  BOOST_CHECK(!converted_note);
549  BOOST_CHECK(!removed_note_sp);
550  BOOST_CHECK(removed_note_univ);
551  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), string("uncultured Actinomadura sp."));
552 }
553 
554 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_UniversalPrimers2)
555 {
556  CRef<CBioSource> bsrc(new CBioSource());
557  bsrc->SetOrg().SetTaxname("Bacillus sp.");
558  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
559  "[uncultured (using universal primers)]")));
560 
561  // change taxname and remove universal primers note
562  CUnculturedTool uncultured_tool;
563  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
564  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
565 
566  BOOST_CHECK(!converted_note);
567  BOOST_CHECK(!removed_note_sp);
568  BOOST_CHECK(removed_note_univ);
569  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), string("uncultured Bacillus sp."));
570 }
571 
572 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_NoTaxId1)
573 {
574  CRef<CBioSource> bsrc(new CBioSource());
575  bsrc->SetOrg().SetTaxname("uncultured somename");
576  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
577  "[amplified with species-specific primers]; [uncultured; wizard]")));
578 
579  // do not remove note as taxname does not look up, taxname should not change
580  CUnculturedTool uncultured_tool;
581  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
582  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
583 
584  BOOST_CHECK(!converted_note);
585  BOOST_CHECK(!removed_note_sp);
586  BOOST_CHECK(!removed_note_univ);
587  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), string("uncultured somename"));
588  BOOST_CHECK(bsrc->IsSetSubtype());
589  BOOST_CHECK_EQUAL(bsrc->GetSubtype().front()->GetSubtype(), CSubSource::eSubtype_other);
590 
591 }
592 
593 BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_NoTaxId2)
594 {
595  CRef<CBioSource> bsrc(new CBioSource());
596  bsrc->SetOrg().SetTaxname("uncultured Somename");
597  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
598  "[uncultured (using universal primers)]")));
599 
600  // do not remove note as taxname does not look up, taxname should not change
601  CUnculturedTool uncultured_tool;
602  bool converted_note(false), removed_note_sp(false), removed_note_univ(false);
603  uncultured_tool.CorrectBioSource(*bsrc, converted_note, removed_note_sp, removed_note_univ);
604 
605  BOOST_CHECK(!converted_note);
606  BOOST_CHECK(!removed_note_sp);
607  BOOST_CHECK(!removed_note_univ);
608  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), string("uncultured Somename"));
609  BOOST_CHECK(bsrc->IsSetSubtype());
610  BOOST_CHECK_EQUAL(bsrc->GetSubtype().front()->GetSubtype(), CSubSource::eSubtype_other);
611 }
612 
613 
614 BOOST_AUTO_TEST_CASE(Test_CulturedTaxTool_TaxnameCorrections)
615 {
616  CRef<CBioSource> bsrc(new CBioSource());
617  bsrc->SetOrg().SetTaxname("novel Bacillus");
618  bsrc->SetSubtype().push_back(Ref(new CSubSource(CSubSource::eSubtype_other,
619  "[cultured bacterial source]")));
620 
621  CCulturedTool cultured_tool;
622  bool removed_note(false);
623  cultured_tool.CorrectBioSource(*bsrc, removed_note);
624 
625  BOOST_CHECK(removed_note);
626  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), string("Bacillus"));
627 
628  ///////////////////////////////////////////////////////////////////////
629 
630  bsrc->SetOrg().SetTaxname("Legionella_species");
631  bsrc->SetOrg().SetOrgname().SetMod().push_back(Ref(new COrgMod(COrgMod::eSubtype_other,
632  "[cultured bacterial source]")));
633 
634  removed_note = false;
635  cultured_tool.CorrectBioSource(*bsrc, removed_note);
636 
637  BOOST_CHECK(removed_note);
638  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), string("Legionella sp."));
639 
640  ///////////////////////////////////////////////////////////////////////
641 
642  bsrc->SetOrg().SetTaxname("unclassified Piscirickettsiaceae");
643  bsrc->SetOrg().SetOrgname().SetMod().push_back(Ref(new COrgMod(COrgMod::eSubtype_other,
644  "[BankIt_cultured16S_wizard]; [species_specific primers]; [tgge]")));
645 
646  removed_note = false;
647  cultured_tool.CorrectBioSource(*bsrc, removed_note);
648 
649  BOOST_CHECK(removed_note);
650  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), string("Piscirickettsiaceae"));
651 
652  ///////////////////////////////////////////////////////////////////////
653 
654  bsrc->SetOrg().SetTaxname("Azotobactor Sp.");
655 
656  removed_note = false;
657  cultured_tool.CorrectBioSource(*bsrc, removed_note);
658 
659  BOOST_CHECK(!removed_note);
660  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), string("Azotobactor sp."));
661 
662  ///////////////////////////////////////////////////////////////////////
663 
664  bsrc->SetOrg().SetTaxname("Deltaproteobacteria spp");
665 
666  removed_note = false;
667  cultured_tool.CorrectBioSource(*bsrc, removed_note);
668 
669  BOOST_CHECK(!removed_note);
670  BOOST_CHECK_EQUAL(bsrc->GetTaxname(), string("Deltaproteobacteria sp."));
671 }
672 
const string & GetTaxname(void) const
Definition: BioSource.cpp:340
bool IsSetOrgMod(void) const
Definition: BioSource.cpp:415
const COrgName & GetOrgname(void) const
Definition: BioSource.cpp:410
CNcbiOstrstreamToString class helps convert CNcbiOstrstream to a string Sample usage:
Definition: ncbistre.hpp:802
@OrgMod.hpp User-defined methods of the data storage class.
Definition: OrgMod.hpp:54
#define T(s)
Definition: common.h:230
#define TAX_ID_CONST(id)
Definition: ncbimisc.hpp:1112
string GetSuggestedCorrection(void)
void CorrectBioSource(objects::CBioSource &bsrc, bool &converted_note, bool &removed_note_sp, bool &removed_note_univ)
void CorrectBioSource(objects::CBioSource &bsrc, bool &remove_note)
void SetBioSource(const objects::CBioSource &bsrc)
#define MSerial_AsnText
I/O stream manipulators –.
Definition: serialbase.hpp:696
CRef< C > Ref(C *object)
Helper functions to get CRef<> and CConstRef<> objects.
Definition: ncbiobj.hpp:2015
#define kEmptyStr
Definition: ncbistr.hpp:123
const TSubtype & GetSubtype(void) const
Get the Subtype member data.
Definition: BioSource_.hpp:539
bool IsSetSubtype(void) const
Check if a value has been assigned to Subtype data member.
Definition: BioSource_.hpp:527
void SetOrg(TOrg &value)
Assign a value to Org data member.
Definition: BioSource_.cpp:108
TSubtype & SetSubtype(void)
Assign a value to Subtype data member.
Definition: BioSource_.hpp:545
@ eSubtype_environmental_sample
Definition: SubSource_.hpp:111
const TMod & GetMod(void) const
Get the Mod member data.
Definition: OrgName_.hpp:839
@ eSubtype_other
ASN5: old-name (254) will be added to next spec.
Definition: OrgMod_.hpp:125
@ eSubtype_nat_host
natural host of this specimen
Definition: OrgMod_.hpp:104
@ eSubtype_isolate
Definition: OrgMod_.hpp:100
static const char * str(char *buf, int n)
Definition: stats.c:84
Utility stuff for more convenient using of Boost.Test library.
USING_SCOPE(objects)
string MakeAsn(const T &object)
BOOST_AUTO_TEST_CASE(Test_UncultTaxTool_TaxnameCorrections)
static const string uncultured_suggestions[]
static const string uncultured_taxnames[]
Modified on Thu Mar 28 17:13:44 2024 by modify_doxy.py rev. 669887