#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include "./doctest.h" #include "../math/incomplete_gamma.cpp" 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)});") 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); } }