rng/code_tests/test.cpp
2025-07-07 10:27:51 +01:00

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);
}