#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include "./doctest.h" #include "../math/incomplete_gamma.h" #include "../math/matrix.h" #include 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.00000000001)); }; { 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"){ auto bmatrixtest = [](std::string matrix, int expected_rank){ splat::matrix<10> testMatrix; for(int i=0; i<10; i++){ testMatrix[i]=std::bitset<10>(matrix.substr((i*10), 10)); } REQUIRE(splat::getRank(testMatrix) == expected_rank); }; // These tests were produced using the script in ./gen_matrix_tests.py bmatrixtest("0010111100100011011010100111101101100011101011110110111000101111111000101111111000101101011100011010", 9); bmatrixtest("0101100001011110110010010001111001101100111000111010101111001111001101010011101000100010001001110100", 9); bmatrixtest("0011010010111001111110101010111011111111000010001010011011011101110110011010100000000011111011010010", 9); bmatrixtest("1100011101101010111011001001101101010101100110101000001100111111101111001000001110101011111100011101", 9); bmatrixtest("1010001001010001110111111011101100100010000100111000011011001011010101111101000101011100001111101001", 10); bmatrixtest("0111100101110111111101111111100001101101011100110100000100000101110110010010001001000001010100111110", 10); bmatrixtest("1000101000000001100110110100011111100000111101110101000001001001011010010110111011010001000101011100", 10); bmatrixtest("1110011000100010101011000100110011000011110101110110111000101101101000111010111110000011011001011000", 9); bmatrixtest("0100001111101011010101011110111000001101111110010010000110011010101010101011000001011110111110001000", 9); bmatrixtest("0000111000111111100010110010000101001001011001010111100000100010000001100001000111110101110100000101", 9); bmatrixtest("0110101101000000011110010100011000010110110100001100011010110110110000001101111011011101111111111101", 10); bmatrixtest("1101001101000100000001000010110010101101001001101000111010111100111001101111000110001100110001000111", 9); bmatrixtest("1010101111100010101011010010001010010001100101001101101110110001011010011101011011110101000101010001", 9); bmatrixtest("1100010111000001011101001001100111101100000010110010110111001001111011111100101110010001010000001011", 9); bmatrixtest("1101011111001010101101101101001011000011010100001000001101000010110011100111111001110011101010100011", 10); bmatrixtest("0010100100000100110001011101001010001011101111010000110101100000010010101001110001110110001110010101", 9); bmatrixtest("1111010101001001101010111111100111010011000100001101111101010001100100100100011110000001100001110011", 9); bmatrixtest("0110000000101110100010101101111001001101110111010101100100011011100001010111111110111111100111100011", 9); bmatrixtest("1101010010010001111001000000000110010000000100000110110000010101110000001101101000100100000100101010", 9); bmatrixtest("0101010010000111011011011001111111111011010001011010100001010111101100111111000100110010110011100010", 10); bmatrixtest("1101101101100110010010000100000001110010010100010110001111010001100110010000000110011111110010110111", 9); bmatrixtest("0111001000111101001011011110101001111101110000101110010110101111011010010010011001000100100111010100", 10); bmatrixtest("0100101100100110000000010110001101000101011001110100011011011111100101100001100000111000001100000010", 9); bmatrixtest("1100000111001111101000101000001111110010111110101010011111010010001101101110111101110000100110110101", 8); bmatrixtest("0010010001100001111110110010101001001111100000101111010000101011010111111101010000000111001101011100", 9); bmatrixtest("0010010001100100001000111100001011111111101100010011000001100011100010000101010000101111111011010010", 10); bmatrixtest("1110100111110010001100001001101001010101000001100100110100011000110100010111101110001110001110110111", 10); bmatrixtest("0000010111000110110001001010111111100000001010101100110111111101001111001101101101000001010110101010", 8); bmatrixtest("0000110101111011011101110100011001101100110000011001111001111000010110101011110100000010100000001001", 8); bmatrixtest("1011000101101100011000101101000010001000000100110110010000100101010101111110000001011110010110100000", 9); bmatrixtest("1111110100001000001111011000101010011101101101000110100001100001001000101010001000001000001111000100", 9); bmatrixtest("0111001011001110101100100110010000110011001100000101100000101011011110010101010111111000110001111100", 10); bmatrixtest("0100100100111000011010111000111110001111010101101111010111111000110100000100101000001110011001110000", 8); bmatrixtest("0100111101011101100101001101001110110011000100111010010111101100000010000010000111011001110000111110", 9); bmatrixtest("1101010111011110011110101001000000101000000100110010000111110111110100101101101000101001001100110010", 10); bmatrixtest("0110000000111010101010000000001000100000011100101000011000111010010011010001101110101110000110001111", 9); bmatrixtest("0110000010011101011110010100011010001011011010010011111010111000000111001011010001011101001100101101", 9); bmatrixtest("1100111101000101100101111011100011110001000010101011100100111010001000111100001011001011100001110010", 10); bmatrixtest("1110111100100111111110110110110011001100010001001101111000100011111100001110111001001100110010000001", 10); bmatrixtest("0101000010010001101011001111101000111000011101110001101110010010001001011101000011000010001010000101", 9); bmatrixtest("1011001100001000000001111110111100111011111101011110011000010001000111110101101010101011000111101101", 9); bmatrixtest("1111010000111110011000000100101001110100111001010011000001110010110101001101010001011111110110100011", 10); bmatrixtest("0001010011001000010101111100001010100010001011001100011110001111111111100011110101010111101101110110", 9); bmatrixtest("1001110000100110101100001011001100001010110110000010010011100110100001110101011011100000100001001001", 9); bmatrixtest("1001000101100011101100110000111110100010110111000000011101000001001101011100111001001111111001010110", 9); bmatrixtest("1111100110100110011000110011010010000100000101010100110010100000100010011111001100010000011110101100", 9); bmatrixtest("0001111111101010100100001111011000011111101010110100101010100001011100100001100100101010101100100101", 8); bmatrixtest("1001001010101001001010101111000101000000110101110010001111111011010000001011111000001111010000011001", 8); bmatrixtest("0011101100010000110111101111111001101010000110010011011110001010111000010101101101101010100000111100", 9); bmatrixtest("0110011110100111110001000111010010111001110100100101011110101101011111101110110100101000110111011100", 9); bmatrixtest("1110110010000110101010010100111000000001111000111110001010100100100011001111101001011010001100111110", 8); bmatrixtest("0101000110010000001000000000101010111110001000111110100011010001101100110000001111011101101001110100", 8); bmatrixtest("1011010000111100110001000011111000011111110011101001001100110001110101111110001100100100111001001001", 9); bmatrixtest("1110100110011000111101100110010101101110111000100100011010000011110110001110001110110100010100011100", 9); bmatrixtest("0110000010111100111010001010010100100111000101001111101001000101111101110111100110111001111000001111", 10); bmatrixtest("0011110111110010011110011011110010110001001101001110011110110101010100010000111010110001101001011001", 9); bmatrixtest("0010101100001111101011010000000101111011000000111110101110101100011100010101101000000110010101101101", 9); bmatrixtest("1000101110011010101000111101111100101100010000001100110100000011010111001110000110001101010100001011", 10); bmatrixtest("0001001111100101101111001001101011111000101010011010011000011110100101011000100011101101011111100001", 9); bmatrixtest("1011101001000011110001110001110101011100011010110110111110110010110011001100010101001110100111110100", 10); bmatrixtest("1000100000100000010101101001111011000011001011011101000110111101101111110011110000110010001110001110", 8); bmatrixtest("1111100000111110010101000000011100101011110011010011011001010111100000001111011100000000011100101000", 10); bmatrixtest("0001111001001001010000101000011010011111101010000001100011001000100111000110101011111101001010101000", 8); bmatrixtest("0101101000011100010111011100000101111000011001100101000110011100011110000110010001010110010101111111", 10); bmatrixtest("1100111011010111001010101000101101110010100011101101000010100000100001010001010100000010011011001011", 10); bmatrixtest("1111000010110100000011100000011001101000111010001100000101010011100001000010111001010101000010000000", 9); bmatrixtest("0100101000101011111100000000101011100111111011101011100110010010001010011101010011100101010101111010", 9); bmatrixtest("1000010001110101011100110101101001100110000110001011001111101000110001100000010011000011101011100000", 9); bmatrixtest("0111101111101100101111111110110110101111011010111011101101101010010000000101000101111001010100000011", 9); bmatrixtest("0101000000111001011101100001000001010111010010011110000110111110010110110111011100111010010000011111", 9); bmatrixtest("1011001110101101111110100110100000001110000110111011101001101010100010010100101000010101110110010001", 10); bmatrixtest("0100110011010101111111010010010000000010111010110100110100111111001111011010010010000110011001111110", 10); bmatrixtest("1010010100011110100010011100100000100101011000111110001111111111010101101011100001001100011010101101", 9); bmatrixtest("0011000110011111110110000110000000100101010000011011100100000101001110101011000001011011101010100010", 9); bmatrixtest("0111110100110100011010101110101100011010110000011000010001010100110111001000010011111100100010100101", 9); bmatrixtest("0101000011001001100111111101111100011101110101100000110011010100001011010100110100100011101001001000", 10); bmatrixtest("1010011000110111101011100010101000010101010000010001001010000001000111011000110111000101001010010010", 9); bmatrixtest("1011110101100001010100110010001000001100100100011100010110010111000000010001110001111001101111010010", 10); bmatrixtest("0011011111100010001001111000010010111010100000110000111101010001100111111001100011100111101001100011", 9); bmatrixtest("0101101011110110011100010011010001011010111110111101110100010011101010000100001110000010011000100001", 10); bmatrixtest("0110100111010111011100110110010011101111000000100001100110011001110111101101010100111010110011100001", 9); bmatrixtest("0000000011010000100111100011011010010000100001101100101010110101100011100001000010101101011110000101", 9); bmatrixtest("0101010101001001011100000001100101000100001000011010110001001111101001000111110000110000000000101001", 8); bmatrixtest("1110010111011000000001011111110000101110010011100111001101000000111110101011101111101110000110101110", 9); bmatrixtest("1000111001101101011111111111000011111011011110000111000000001011111110000110101011110101010100011111", 9); bmatrixtest("1000110110011100110001011111010000001001010001100110000011111110001001101101011011011001101110101011", 9); bmatrixtest("1110011110000101111001001110010111100110010100110010011111011111111111101000001011110011110010100001", 9); bmatrixtest("1101010001010101011010110001101110000011110111010101001101110110001101000001100110111000000101010100", 9); bmatrixtest("0001111111110101111100101000000011101110000111010100110001001111101010111001000101111000001110001111", 9); bmatrixtest("1100001001110001001001010011011010011111001100111101100111000000100100100101110010000110111000011001", 10); bmatrixtest("0111111001000011011010100010001100111111011111001101001101000010000101101111110000111110010101111111", 9); bmatrixtest("0001101101011110101110001101110100001101111010011110110001001010011000010011100000111100010010001110", 9); bmatrixtest("1100001010010100000101000011001011110101000111001000010111110000000100010111011000011101101010011101", 8); bmatrixtest("0101110111001011100111010011000101001111000110000010000101101001001110001010111000111111111010010001", 9); bmatrixtest("0100000111100011100100011101111111101110011100111011000111010100000010111011000000001000001001101010", 10); bmatrixtest("1101011101001001000110101110111110010001000100110001111111001101100110101011100100001000010110111111", 9); bmatrixtest("0010001000010110110100001000101110111011110000011000101101000110101000111011100100010101011101110100", 10); bmatrixtest("1011011011101111111011001010001010011111010110011001101110010011101101000001011111011111101110110011", 8); bmatrixtest("1101001100001111110110100111101001010000101001111000101011000110101000100010100000011000000111111011", 7); bmatrixtest("0001010000011100100010011101001100111101111001001000001111010101101010110100100001101110000010010000", 10); bmatrixtest("1010001111100011000010111000110110011111100110101111001101100010100010110101111010010000110010011000", 10); bmatrixtest("0010010100010110101110110010100111011000110000010111010000111001100001101111101010100110111010001001", 8); bmatrixtest("0001111100000011101111101010100111001100100101010001111000100001011001010101110100000101001110100001", 9); bmatrixtest("0100111000011011101111111000111000000100110100111001101111000001010011101000000110001110110011000000", 9); bmatrixtest("0000110110100000101100001001110100001100000100111101010101010010101001110000000010000100100110001100", 9); bmatrixtest("1110111010000001000001100010111001101110101111001011100011111111101101000010111011011010001110011101", 9); bmatrixtest("0011110100110111111111111111000101011110010001001001111011011011100111110100001011001010011000100101", 9); bmatrixtest("0111001101001100000100010010100110001111111010111001011100010010101111011100101111111010011011001010", 9); bmatrixtest("1101000001001010001011110100010101111001100010010001100011000001101110100011010110111001100010100101", 10); bmatrixtest("1110010111000111100011011000011010000000110001111100101001111100100110000100001110111010101000011001", 9); bmatrixtest("0101010010111101101110010011001110000010001001110010111100001001001011001100011110111001110010000010", 9); bmatrixtest("0110011001010101011010000111101100110100101010110101010000010001110100101110100101000111000000011000", 9); bmatrixtest("1001111101010000100001111001100110001001000100001000111011010111111100011100000101111101001001001111", 10); bmatrixtest("1001011101001000100011011110101110010011001011100111001111000111000001111000111011110001011001101000", 9); bmatrixtest("0010001111000100011101101001101100000100011101000011010010111110011000001111001011010111111110100110", 9); bmatrixtest("0100101101011101011110000011001110100101110000011111110010101110101010001011000010001010010111111110", 8); bmatrixtest("1001001101111110101010100010000110101000110010001011000111001101110001011110111110111001110001100001", 9); bmatrixtest("1110001111110100111010010101100011110111011010111101111000100001100100011001111001110010101011000001", 10); bmatrixtest("1010101101011101001001101101110100111110100001010111111111101001010100010110100100111111100110001010", 9); bmatrixtest("1001000010000001001000001011111100011000000111011101001011100001000000010011000110001010111011001011", 10); bmatrixtest("0110011101111111101010011011110100110011110111100100001001000100100100010001100001111110011001101000", 9); bmatrixtest("1111100100111111010010011000101000111111011000000110100111011011010110101011010101000110111100110111", 9); bmatrixtest("1101110110001011011000110010010101110110010100111101111011000111111011110100001000010000011110111000", 9); bmatrixtest("1100110010110000100110000011000110111100101001100010111110110110111100000001000001111001100100101011", 9); bmatrixtest("0010100111111110010001101110111100010001001011101011010000100110111001100101100110111011010100011111", 9); bmatrixtest("0100001010001110001100110100011011011011111110011011010111100000100000011111000111111000011000010000", 9); bmatrixtest("0101100110111000011110110010111101111100000000100011101011000100011001010011101010110100000100000101", 9); bmatrixtest("1101000110011011111101111100111001110101111110001110010001110011001100010001000000100100010100100010", 8); bmatrixtest("0110111000010010111010111111110011000110000111110101001010111101000000010000010111000010110000100101", 10); bmatrixtest("1000001001110110011001000000101001101010001100100000000100000001000001111000110001100011010000101101", 9); bmatrixtest("1010010001000001000000100111100001010000000111100011000010001110010010000110001101001100110101111010", 10); bmatrixtest("0110100011110011000110011000001101010111010100011100000111101100100000110010011100110000111100100011", 9); bmatrixtest("0111110001001110110001000001000001010100000000110111111011100100111110110110001001011000011010101110", 10); bmatrixtest("1001100111001010100001100101011110010110100100010111010010000100000011001011111110101110011100000010", 9); bmatrixtest("0110010100100111110000101110111010001110000101111000101000100010011010001110101011000000010101100011", 10); bmatrixtest("0100101100100001100100110010110101110001111101010000000100000010011001101001010100001111011010001111", 9); bmatrixtest("0110000110101110000010011101000000101111011100101101110011011010110010110010010110001011111001000111", 10); bmatrixtest("1110101000100110101010111100110011101010000100111010101110110110000111011111010111001110000110011010", 10); bmatrixtest("0100010011111011110110010001111010100000101101110101000000001000000011011011011110111100010010011111", 10); bmatrixtest("0110010011100111010000011010101101101110011001110110111110110101000100110010110100000110101010110100", 10); bmatrixtest("0011011000001100000100111111001000000001010001111101111000000011100111010010110011000110110010100111", 10); bmatrixtest("1010010010110100000101001001011101110110011111110100110001001010010101111100010011111011100101011111", 10); bmatrixtest("0010100010000101001100001110010000100011011011001110101110000001101100010011010011100110010010001100", 9); bmatrixtest("1110101111001100000111010100010000011100111111010101001100111000111101001101011101000111110001010000", 8); bmatrixtest("0000010101011101001001000001011011110100000001001111000101111010011111100111110101101000100001000101", 9); bmatrixtest("1001110011000000001100100100011100011111111001110011101111001110011101100010101100010101110000010000", 9); bmatrixtest("0010101100101100111100000001010100011111000001011011100001010000110110111000100000000001111110011111", 10); bmatrixtest("0001010111110010011100111000100100111100000101110101010011010010011001000111110011100111110000101001", 8); bmatrixtest("1001011100101001000001110010010001101101001011001000011001110000001100100001101011010100011011010011", 10); bmatrixtest("1000110111010111011011101001011000110110111001110110011110101001110100100110111010101101100001000010", 9); bmatrixtest("0001001010001101100111100110100011001111000001100111000101011110000011010011101011100011000010111000", 8); bmatrixtest("1101110111101011100011010000010101001101001111111011001110010110011101000010110111111111001011101001", 9); bmatrixtest("0111011101110100110011001001000000001010100000011100010010000100001010001011001100011001110111010111", 8); bmatrixtest("1010111001010101111101010010100011111011100110000011100111010110000101000011111000110010110000011110", 10); bmatrixtest("1110101000011111011000101010011101100001010100111111001110101110001100100000111111001111001010101011", 10); bmatrixtest("1111001100111010000100000000011010010000111110001000011110111110000110001000101101011110011111011101", 10); bmatrixtest("0101011101001110110111011111000001101010100001101010101010000000001001001010010101010111000111110010", 10); bmatrixtest("0100110011110001100101011011101101001100000001110100111001111110000011010100000000000011000110101010", 10); bmatrixtest("0111110001110011101000100100111100011011010001010011010101100001111000111101010110011100110010111110", 9); bmatrixtest("1111011111101010100011100110110111011011010000101111101101110111110000000111101011001100000011011000", 9); bmatrixtest("1011000011110101111000110010010110100010001010011101111011100100101011110101011001101001110100000011", 10); bmatrixtest("1011000000010111000010110111011100011010100111101010100111101000111101100001110001000100100010111010", 8); bmatrixtest("0001100111000100101110110000000100111110111101001000011100110000110011100110101111011001000001010011", 9); bmatrixtest("1110011000001100111100000101110011010000011110101010001111111101000101110111101011001010011000000011", 10); bmatrixtest("0100111111110001111111010100100011010011000110110011100001111011011100101001010110110000111000000110", 10); bmatrixtest("0110001110001100010001100011000001010001011111101100000100001111000011001010011111010100010001111110", 10); bmatrixtest("1111100001101011100000100100101010011110010010001101110001011001111100111111100101100111011010010101", 9); bmatrixtest("0111100001111110000101101111111011100011001100101111100100110100011110000101100111000110100101010111", 9); bmatrixtest("1110001101000100000101110101010110010001110100110101010111111111111100101001010010110110010110110110", 9); bmatrixtest("0111100111011011010000011011110001011000001001001111111100010011010111010001101011101110011010000011", 9); bmatrixtest("1000010100110110101010000111101100001000101101101110101000001010001010110111110011111000000010110011", 9); bmatrixtest("0011011100101100000001110111010010011110111110101101111010010101000110000111110111110100101010111111", 10); bmatrixtest("1100011011010001110000101010111011011000100000001100100100010000011001111101001101110011110111101000", 9); bmatrixtest("0010001110111000101011100101010011110111110001100100101100101111001001000110111110110010011110110111", 10); bmatrixtest("0111111101101000100101100001001010011001110011101100110001010110100001100101000011001101111111001001", 9); bmatrixtest("0000001111100101010001110111001010101101100111110111110011001011011001010100101011001010011100111001", 10); bmatrixtest("1111011001111010100001100110010011011011000101111011001111100001110011001001001111111111011010111101", 9); bmatrixtest("1010101110010110001000101000010101111011100001101111010100110111110101100011011101011110101110101010", 10); bmatrixtest("1001010010001101101101101011101001011010110001110011101110100011011110011000101111111110011011111100", 8); bmatrixtest("0011101101000001100100110110110101011111110010101000100110001110011111111110101010111001010101010111", 8); }