223 lines
9.3 KiB
C++
223 lines
9.3 KiB
C++
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
|
|
#include "./doctest.h"
|
|
|
|
#include "../math/incomplete_gamma.h"
|
|
#include "../math/matrix.h"
|
|
#include <iostream>
|
|
|
|
TEST_CASE("igam function"){
|
|
|
|
// generate igam tests with this python script
|
|
|
|
// import scipy
|
|
// for i in range(1,10):
|
|
// for ii in range(20):
|
|
// print(f"igamtest({i/2}, {ii/2}, {scipy.special.gammainc(i/2,ii/2)});")
|
|
|
|
std::cout << " Splat CodeTests\n";
|
|
|
|
auto igamtest = [](double a, double x, double req) {
|
|
REQUIRE(igam(a,x)== doctest::Approx(req).epsilon(0.00000000000001));
|
|
};
|
|
{
|
|
igamtest(0.5, 0.0, 0.0);
|
|
igamtest(0.5, 0.5, 0.6826894921370859);
|
|
igamtest(0.5, 1.0, 0.8427007929497151);
|
|
igamtest(0.5, 1.5, 0.9167354833364495);
|
|
igamtest(0.5, 2.0, 0.9544997361036416);
|
|
igamtest(0.5, 2.5, 0.9746526813225318);
|
|
igamtest(0.5, 3.0, 0.9856941215645704);
|
|
igamtest(0.5, 3.5, 0.9918490284064974);
|
|
igamtest(0.5, 4.0, 0.9953222650189527);
|
|
igamtest(0.5, 4.5, 0.9973002039367398);
|
|
igamtest(0.5, 5.0, 0.9984345977419975);
|
|
igamtest(0.5, 5.5, 0.9990888811228463);
|
|
igamtest(0.5, 6.0, 0.9994679944948608);
|
|
igamtest(0.5, 6.5, 0.9996885090232326);
|
|
igamtest(0.5, 7.0, 0.9998171893670181);
|
|
igamtest(0.5, 7.5, 0.9998924888232705);
|
|
igamtest(0.5, 8.0, 0.9999366575163338);
|
|
igamtest(0.5, 8.5, 0.9999626201815983);
|
|
igamtest(0.5, 9.0, 0.9999779095030014);
|
|
igamtest(0.5, 9.5, 0.9999869281546332);
|
|
igamtest(1.0, 0.0, 0.0);
|
|
igamtest(1.0, 0.5, 0.3934693402873665);
|
|
igamtest(1.0, 1.0, 0.6321205588285577);
|
|
igamtest(1.0, 1.5, 0.7768698398515702);
|
|
igamtest(1.0, 2.0, 0.8646647167633873);
|
|
igamtest(1.0, 2.5, 0.9179150013761012);
|
|
igamtest(1.0, 3.0, 0.950212931632136);
|
|
igamtest(1.0, 3.5, 0.9698026165776815);
|
|
igamtest(1.0, 4.0, 0.9816843611112658);
|
|
igamtest(1.0, 4.5, 0.9888910034617577);
|
|
igamtest(1.0, 5.0, 0.9932620530009145);
|
|
igamtest(1.0, 5.5, 0.995913228561536);
|
|
igamtest(1.0, 6.0, 0.9975212478233336);
|
|
igamtest(1.0, 6.5, 0.9984965608070224);
|
|
igamtest(1.0, 7.0, 0.9990881180344455);
|
|
igamtest(1.0, 7.5, 0.9994469156298522);
|
|
igamtest(1.0, 8.0, 0.9996645373720975);
|
|
igamtest(1.0, 8.5, 0.9997965316309894);
|
|
igamtest(1.0, 9.0, 0.9998765901959134);
|
|
igamtest(1.0, 9.5, 0.9999251481701124);
|
|
igamtest(1.5, 0.0, 0.0);
|
|
igamtest(1.5, 0.5, 0.19874804309879915);
|
|
igamtest(1.5, 1.0, 0.42759329552912023);
|
|
igamtest(1.5, 1.5, 0.6083748237289109);
|
|
igamtest(1.5, 2.0, 0.7385358700508897);
|
|
igamtest(1.5, 2.5, 0.8282028557032668);
|
|
igamtest(1.5, 3.0, 0.8883897749052875);
|
|
igamtest(1.5, 3.5, 0.9281022275035349);
|
|
igamtest(1.5, 4.0, 0.9539882943107686);
|
|
igamtest(1.5, 4.5, 0.9707091134651118);
|
|
igamtest(1.5, 5.0, 0.9814338645369568);
|
|
igamtest(1.5, 5.5, 0.9882741244215786);
|
|
igamtest(1.5, 6.0, 0.9926168394946402);
|
|
igamtest(1.5, 6.5, 0.9953633945619583);
|
|
igamtest(1.5, 7.0, 0.9970948472257326);
|
|
igamtest(1.5, 7.5, 0.9981833510334277);
|
|
igamtest(1.5, 8.0, 0.9988660157102147);
|
|
igamtest(1.5, 8.5, 0.999293257607663);
|
|
igamtest(1.5, 9.0, 0.9995601503471612);
|
|
igamtest(1.5, 9.5, 0.9997266011125092);
|
|
igamtest(2.0, 0.0, 0.0);
|
|
igamtest(2.0, 0.5, 0.09020401043104986);
|
|
igamtest(2.0, 1.0, 0.2642411176571153);
|
|
igamtest(2.0, 1.5, 0.4421745996289252);
|
|
igamtest(2.0, 2.0, 0.5939941502901616);
|
|
igamtest(2.0, 2.5, 0.7127025048163542);
|
|
igamtest(2.0, 3.0, 0.8008517265285442);
|
|
igamtest(2.0, 3.5, 0.8641117745995668);
|
|
igamtest(2.0, 4.0, 0.9084218055563291);
|
|
igamtest(2.0, 4.5, 0.9389005190396673);
|
|
igamtest(2.0, 5.0, 0.9595723180054873);
|
|
igamtest(2.0, 5.5, 0.9734359856499836);
|
|
igamtest(2.0, 6.0, 0.9826487347633355);
|
|
igamtest(2.0, 6.5, 0.9887242060526682);
|
|
igamtest(2.0, 7.0, 0.9927049442755639);
|
|
igamtest(2.0, 7.5, 0.9952987828537434);
|
|
igamtest(2.0, 8.0, 0.9969808363488774);
|
|
igamtest(2.0, 8.5, 0.9980670504943989);
|
|
igamtest(2.0, 9.0, 0.9987659019591332);
|
|
igamtest(2.0, 9.5, 0.9992140557861792);
|
|
igamtest(2.5, 0.0, 0.0);
|
|
igamtest(2.5, 0.5, 0.03743422675270362);
|
|
igamtest(2.5, 1.0, 0.15085496391539038);
|
|
igamtest(2.5, 1.5, 0.3000141641213724);
|
|
igamtest(2.5, 2.0, 0.4505840486472197);
|
|
igamtest(2.5, 2.5, 0.5841198130044919);
|
|
igamtest(2.5, 3.0, 0.6937810815867218);
|
|
igamtest(2.5, 3.5, 0.7793596920632895);
|
|
igamtest(2.5, 4.0, 0.8437643724222776);
|
|
igamtest(2.5, 4.5, 0.8909358420502275);
|
|
igamtest(2.5, 5.0, 0.9247647538534879);
|
|
igamtest(2.5, 5.5, 0.9486200165169305);
|
|
igamtest(2.5, 6.0, 0.9652122194937581);
|
|
igamtest(2.5, 6.5, 0.9766212318964361);
|
|
igamtest(2.5, 7.0, 0.9843905838997331);
|
|
igamtest(2.5, 7.5, 0.9896376620842136);
|
|
igamtest(2.5, 8.0, 0.9931559260775795);
|
|
igamtest(2.5, 8.5, 0.9955002030220295);
|
|
igamtest(2.5, 9.0, 0.9970535954121197);
|
|
igamtest(2.5, 9.5, 0.998077863179057);
|
|
igamtest(3.0, 0.0, 0.0);
|
|
igamtest(3.0, 0.5, 0.01438767796697068);
|
|
igamtest(3.0, 1.0, 0.08030139707139418);
|
|
igamtest(3.0, 1.5, 0.19115316946194183);
|
|
igamtest(3.0, 2.0, 0.3233235838169364);
|
|
igamtest(3.0, 2.5, 0.4561868841166703);
|
|
igamtest(3.0, 3.0, 0.5768099188731565);
|
|
igamtest(3.0, 3.5, 0.6791528011378659);
|
|
igamtest(3.0, 4.0, 0.7618966944464557);
|
|
igamtest(3.0, 4.5, 0.8264219290899639);
|
|
igamtest(3.0, 5.0, 0.8753479805169189);
|
|
igamtest(3.0, 5.5, 0.9116235676432145);
|
|
igamtest(3.0, 6.0, 0.938031195583341);
|
|
igamtest(3.0, 6.5, 0.9569640531010171);
|
|
igamtest(3.0, 7.0, 0.9703638361194782);
|
|
igamtest(3.0, 7.5, 0.9797432849433356);
|
|
igamtest(3.0, 8.0, 0.986246032255997);
|
|
igamtest(3.0, 8.5, 0.9907167556638894);
|
|
igamtest(3.0, 9.0, 0.9937678048936227);
|
|
igamtest(3.0, 9.5, 0.9958363669624967);
|
|
igamtest(3.5, 0.0, 0.0);
|
|
igamtest(3.5, 0.5, 0.0051714634834845175);
|
|
igamtest(3.5, 1.0, 0.04015963126989843);
|
|
igamtest(3.5, 1.5, 0.11499776835684938);
|
|
igamtest(3.5, 2.0, 0.22022259152428406);
|
|
igamtest(3.5, 2.5, 0.34003677030571744);
|
|
igamtest(3.5, 3.0, 0.4602506496044427);
|
|
igamtest(3.5, 3.5, 0.5711201424469452);
|
|
igamtest(3.5, 4.0, 0.6674060974006921);
|
|
igamtest(3.5, 4.5, 0.7473439535034361);
|
|
igamtest(3.5, 5.0, 0.81142653248655);
|
|
igamtest(3.5, 5.5, 0.8613809791267045);
|
|
igamtest(3.5, 6.0, 0.8994411314916412);
|
|
igamtest(3.5, 6.5, 0.9278916089660787);
|
|
igamtest(3.5, 7.0, 0.9488186465869346);
|
|
igamtest(3.5, 7.5, 0.9640005952365712);
|
|
igamtest(3.5, 8.0, 0.9748836392531472);
|
|
igamtest(3.5, 8.5, 0.9826038174308754);
|
|
igamtest(3.5, 9.0, 0.9880299976459704);
|
|
igamtest(3.5, 9.5, 0.9918126590319385);
|
|
igamtest(4.0, 0.0, 0.0);
|
|
igamtest(4.0, 0.5, 0.001751622556290824);
|
|
igamtest(4.0, 1.0, 0.01898815687615381);
|
|
igamtest(4.0, 1.5, 0.06564245437845008);
|
|
igamtest(4.0, 2.0, 0.14287653950145296);
|
|
igamtest(4.0, 2.5, 0.2424238668669339);
|
|
igamtest(4.0, 3.0, 0.35276811121776874);
|
|
igamtest(4.0, 3.5, 0.463367332099215);
|
|
igamtest(4.0, 4.0, 0.566529879633291);
|
|
igamtest(4.0, 4.5, 0.657704044165409);
|
|
igamtest(4.0, 5.0, 0.7349740847026385);
|
|
igamtest(4.0, 5.5, 0.7983008012974713);
|
|
igamtest(4.0, 6.0, 0.8487961172233521);
|
|
igamtest(4.0, 6.5, 0.8881503883724394);
|
|
igamtest(4.0, 7.0, 0.9182345837552784);
|
|
igamtest(4.0, 7.5, 0.9408545401673161);
|
|
igamtest(4.0, 8.0, 0.957619888008316);
|
|
igamtest(4.0, 8.5, 0.9698909203107791);
|
|
igamtest(4.0, 9.0, 0.9787735136970911);
|
|
igamtest(4.0, 9.5, 0.9851403523541687);
|
|
igamtest(4.5, 0.0, 0.0);
|
|
igamtest(4.5, 0.5, 0.0005624973021675015);
|
|
igamtest(4.5, 1.0, 0.008532393371186466);
|
|
igamtest(4.5, 1.5, 0.035705027314910875);
|
|
igamtest(4.5, 2.0, 0.08858747316832083);
|
|
igamtest(4.5, 2.5, 0.16569173980659246);
|
|
igamtest(4.5, 3.0, 0.2600817079053462);
|
|
igamtest(4.5, 3.5, 0.36288059283060153);
|
|
igamtest(4.5, 4.0, 0.4658537830903085);
|
|
igamtest(4.5, 4.5, 0.5627258110861331);
|
|
igamtest(4.5, 5.0, 0.6495147876766386);
|
|
igamtest(4.5, 5.5, 0.724291063227778);
|
|
igamtest(4.5, 6.0, 0.7866906949165835);
|
|
igamtest(4.5, 6.5, 0.8373937378097005);
|
|
igamtest(4.5, 7.0, 0.8776747719613376);
|
|
igamtest(4.5, 7.5, 0.9090640234201949);
|
|
igamtest(4.5, 8.0, 0.9331184122258733);
|
|
igamtest(4.5, 8.5, 0.9512840238523587);
|
|
igamtest(4.5, 9.0, 0.9648264605330151);
|
|
igamtest(4.5, 9.5, 0.974807104918331);
|
|
}
|
|
}
|
|
TEST_CASE("Matrix utilities"){
|
|
splat::matrix<3> testMatrix = {
|
|
std::bitset<3>("010"),
|
|
std::bitset<3>("110"),
|
|
std::bitset<3>("010")
|
|
};
|
|
|
|
splat::matrix<3> testMatrix2 = {
|
|
std::bitset<3>("010"),
|
|
std::bitset<3>("101"),
|
|
std::bitset<3>("011")
|
|
};
|
|
|
|
|
|
REQUIRE(splat::getRank(testMatrix) == 2);
|
|
REQUIRE(splat::getRank(testMatrix2) == 3);
|
|
|
|
}
|