diff --git a/src/unit_test_math_utils.cpp b/src/unit_test_math_utils.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a549c4137a4edbfc07c963ae772740139ae27c64 --- /dev/null +++ b/src/unit_test_math_utils.cpp @@ -0,0 +1,85 @@ +/* + * unit_test_math_utils.cpp + * + * Created on: 7 mai 2021 + * Author: vlegrand + */ +#include <iostream> +#include <cassert> +#include <cmath> +#include "math_utils.h" + +using namespace std; + +void test_getCollisionProba() { + float p=getCollisionProba(2,5000000000,UINT_MAX,2); + assert(round(p*10000)==127); + p=getCollisionProba(2,5000000000,UINT_MAX,1); + assert(p=0.1128); + p =getCollisionProba(1,2,UINT_MAX,3); + //cout<<p<<endl; + assert(p==0.0); + p =getCollisionProba(1,1000000000,UINT_MAX,1); + assert(floor(p*1000+0.5)==23); + p =getCollisionProba(5,1000000000,UINT_MAX,1); + assert(floor(p*1000+0.5)==0); + p =getCollisionProba(5,50000000000,UINT_MAX,1); + assert(floor(p*1000+0.5)==975); +} + +void test_gammln() { + float a; + a=gammln(1); + assert(exp(a)==1); + a=gammln(2); + assert(exp(a)==1); + a=gammln(3); + assert(exp(a)==2); + a=gammln(4); + assert(exp(a)==6); + a=gammln(5); + assert(exp(a)==24); + a=gammln(6); + float tmp=exp(a); + float tmp2=tmp*10000; + float tmp3=round(tmp2)/10000; + //printf("%s \n",tmp3); + assert(tmp3==120); + /* unsigned long n=5000; + unsigned long m=n+1; + a=gammln(m); + float b=gammln(n); + double truc=exp(a-b); + assert(truc==n); + */ +} + +void test_pmf() { + unsigned long nb_k_mers=5000000000; + float p=pmf(0,nb_k_mers,UINT_MAX); + assert(round(p*10000)==3122); + p=pmf(1,nb_k_mers,UINT_MAX); + assert(round(p*10000)==3634); + p=pmf(2,nb_k_mers,UINT_MAX); + assert(round(p*10000)==2115); +} + +void test_ccdf() { + unsigned long nb_k_mers=5000000000; + double res=ccdf(2,nb_k_mers,UINT_MAX); + assert(round(res*10000)==1128); +} + + +int main(int argc, char **argv) { + cout<<"testing the gammln function"<<endl; + test_gammln(); + cout<<"testing the pmf function"<<endl; + test_pmf(); + cout<<"testing the ccdf function"<<endl; + test_ccdf(); + cout<<"testing computation of collision probability."<<endl; + test_getCollisionProba(); +} + +