7 #include <boost/test/unit_test.hpp> 15 const char * testfile =
"data/single_ms.txt";
17 BOOST_AUTO_TEST_SUITE(PolySIMTest)
21 unsigned ndiffs=0,ncomps=0;
23 for(
unsigned i = 0 ; i < d.size() - 1 ; ++i )
25 for(
unsigned j = i + 1 ; j < d.size() ; ++j )
28 for(
unsigned k = 0 ; k < d[i].size() ; ++k )
30 ndiffs += (d[i][k] != d[j][k]) ? 1 : 0;
34 return double(ndiffs)/double(ncomps);
39 if(d.empty())
return 0;
41 std::for_each(d.sbegin(),d.send(),
43 auto c = std::count(__ps.second.begin(),__ps.second.end(),
'1');
44 nsing += ( unsigned(c) == 1 || unsigned(c) == d.size() - 1 ) ? 1 : 0;
51 if(d.empty())
return 0;
53 std::for_each(d.sbegin(),d.send(),
56 next += ( std::count(__ps.second.begin(),__ps.second.end(),
'1')==1 ) ? 1 : 0;
62 BOOST_AUTO_TEST_CASE( check_empty_table )
68 BOOST_CHECK_EQUAL( ad.ThetaPi(), 0. );
69 BOOST_CHECK_EQUAL( ad.ThetaH(), 0. );
70 BOOST_CHECK_EQUAL( ad.ThetaL(), 0. );
71 BOOST_CHECK_EQUAL( ad.NumPoly(), 0 );
72 BOOST_CHECK_EQUAL( ad.NumMutations(), 0 );
73 BOOST_CHECK_EQUAL( ad.NumSingletons(), 0 );
74 BOOST_CHECK_EQUAL( ad.NumExternalMutations(), 0 );
78 BOOST_CHECK( std::isnan(ad.VarThetaW()) );
79 BOOST_CHECK( std::isnan(ad.VarPi()) );
80 BOOST_CHECK( std::isnan(ad.SamplingVarPi()) );
81 BOOST_CHECK( std::isnan(ad.StochasticVarPi()) );
90 BOOST_CHECK_EQUAL( ad.DandVK(), 1 );
91 BOOST_CHECK_EQUAL( ad.DandVH(), 0. );
92 BOOST_CHECK( std::isnan(ad.WallsB()) );
93 BOOST_CHECK( std::isnan(ad.WallsQ()) );
94 BOOST_CHECK_EQUAL( ad.WallsBprime(), 0. );
95 BOOST_CHECK_EQUAL( ad.Minrec(), std::numeric_limits<unsigned>::max() );
98 BOOST_CHECK( std::isnan(ad.TajimasD()) );
99 BOOST_CHECK( std::isnan(ad.Dnominator()) );
100 BOOST_CHECK( std::isnan(ad.FuLiD()) );
101 BOOST_CHECK( std::isnan(ad.FuLiF()) );
102 BOOST_CHECK( std::isnan(ad.FuLiDStar()) );
103 BOOST_CHECK( std::isnan(ad.FuLiFStar()) );
104 BOOST_CHECK( std::isnan(ad.Hprime()) );
107 BOOST_CHECK( std::isnan(ad.HudsonsC()) );
108 BOOST_CHECK( ad.Disequilibrium().empty() );
111 BOOST_AUTO_TEST_CASE( pi1 )
114 std::ifstream in(testfile);
115 BOOST_REQUIRE_NO_THROW(in >> d >> std::ws);
120 BOOST_REQUIRE_CLOSE( ad.ThetaPi(), pi(d), 0.001 );
121 BOOST_REQUIRE_EQUAL( ad.NumPoly(), d.numsites() );
124 BOOST_AUTO_TEST_CASE( S1 )
127 std::ifstream in(testfile);
128 BOOST_REQUIRE_NO_THROW(in >> d >> std::ws);
133 BOOST_REQUIRE_EQUAL( ad.NumPoly(), d.numsites() );
136 BOOST_AUTO_TEST_CASE( singletons1 )
139 std::ifstream in(testfile);
140 BOOST_REQUIRE_NO_THROW(in >> d >> std::ws);
145 BOOST_REQUIRE_EQUAL( ad.NumSingletons(), nsingletons(d) );
148 BOOST_AUTO_TEST_CASE( external1 )
151 std::ifstream in(testfile);
152 BOOST_REQUIRE_NO_THROW(in >> d >> std::ws);
157 BOOST_REQUIRE_EQUAL( ad.NumExternalMutations(), nexternal(d) );
161 BOOST_AUTO_TEST_CASE( nhaps1 )
164 std::ifstream in(testfile);
165 BOOST_REQUIRE_NO_THROW(in >> d >> std::ws);
169 std::set<std::string> uhaps(d.begin(),d.end());
170 BOOST_REQUIRE_EQUAL( ad.DandVK(), uhaps.size() );
174 BOOST_AUTO_TEST_CASE( hapdiv )
177 std::ifstream in(testfile);
178 BOOST_REQUIRE_NO_THROW(in >> d >> std::ws);
182 std::set<std::string> uhaps(d.begin(),d.end());
185 for(
auto h : uhaps )
187 auto c = std::count( d.begin(),d.end(), h );
188 hdiv += ( double(c)/double(d.size()) )*(double(d.size()-c)/
double(d.size()-1));
189 hhom += ( double(c)/double(d.size()) )*(double(c-1)/double(d.size()-1));
191 double hdiv2 = 1. - hhom;
192 double lseqvalue = ad.DandVH();
193 BOOST_REQUIRE_CLOSE( lseqvalue, hdiv, 1e-3);
194 BOOST_REQUIRE_CLOSE( lseqvalue, hdiv2, 1e-3);
196 BOOST_AUTO_TEST_SUITE_END()
declaration of Sequence::PolySIM, a class to analyze coalescent simulation data
Declaration of Sequence::SimData, a class representing polymorphism data from coalescent simulations ...
Data from coalescent simulations.
Analysis of coalescent simulation data.
std::pair< double, std::string > polymorphicSite