finitedomain
Version:
A fast feature rich finite domain solver
175 lines (142 loc) • 70.1 kB
JavaScript
import expect from '../fixtures/mocha_proxy.fixt';
import {
fixt_dom_empty,
fixt_dom_nums,
fixt_dom_range,
fixt_dom_ranges,
fixt_domainEql,
fixt_strdom_empty,
} from '../fixtures/domain.fixt';
import {
SMALL_MAX_NUM,
} from '../../src/helpers';
import {
domain__debug,
} from '../../src/domain';
import domain_minus from '../../src/doms/domain_minus';
describe('src/minus.spec.js', function() {
this.timeout(60000); // takes long under istanbul / even longer under travis
describe('domain_minus unit tests', function() {
it('should exist', function() {
expect(domain_minus).to.be.a('function');
});
it('should require domains', function() {
expect(() => domain_minus()).to.throw('ONLY_NORDOM');
expect(() => domain_minus(fixt_dom_empty())).to.throw('ONLY_NORDOM');
expect(() => domain_minus(null, fixt_dom_empty())).to.throw('ONLY_NORDOM');
});
it('should accept empty domains', function() {
expect(domain_minus(fixt_dom_empty(), fixt_dom_empty())).to.eql(fixt_dom_empty(1));
});
it('should throw for EMPTY_STR', function() {
expect(_ => domain_minus(fixt_strdom_empty(), fixt_dom_empty())).to.throw('empty domains are always numdoms');
expect(_ => domain_minus(fixt_dom_empty(), fixt_strdom_empty())).to.throw('empty domains are always numdoms');
expect(_ => domain_minus(fixt_strdom_empty(), fixt_strdom_empty())).to.throw('empty domains are always numdoms');
});
it('should return empty domain if one is empty', function() {
let A = fixt_dom_ranges([0, 1], [4, 5], [7, 8], [10, 12], [15, 117]);
fixt_domainEql(domain_minus(A, fixt_dom_empty()), fixt_dom_empty());
fixt_domainEql(domain_minus(fixt_dom_empty(), A), fixt_dom_empty());
});
it('should subtract one range by another', function() {
let A = fixt_dom_range(5, 10);
let B = fixt_dom_range(50, 60);
fixt_domainEql(domain_minus(A, B), fixt_dom_empty());
});
it('should subtract one domain by another', function() {
let A = fixt_dom_ranges([5, 10], [20, 35]);
let B = fixt_dom_ranges([50, 60], [110, 128]);
fixt_domainEql(domain_minus(A, B), fixt_dom_empty());
});
it('should subtract one domain by another 2', function() {
let A = fixt_dom_ranges([0, 1], [4, 12], [15, 117]);
let B = fixt_dom_ranges([0, 1], [4, 12], [15, 117]);
let E = fixt_dom_range(0, 117);
// ->
// [-1, 1, -12, -3, -117, -14, 3, 12, -8, 8, -113, -3, 14, 117, 3, 113, -102, 102]
// [0, 1, 3, 12, 0, 8, 14, 117, 3, 113, 0, 102]
// [0, 117]
fixt_domainEql(domain_minus(A, B), E);
});
it('should not break zero zero shortcut arr', function() {
let A = fixt_dom_ranges([0, 1], [4, 12], [15, 117]);
let B = fixt_dom_ranges([0, 0], [3, 8], [15, 52]);
let E = fixt_dom_range(0, 117);
// ->
// [-1, 1, -12, -3, -117, -14, 3, 12, -8, 8, -113, -3, 14, 117, 3, 113, -102, 102]
// [0, 1, 3, 12, 0, 8, 14, 117, 3, 113, 0, 102]
// [0, 117]
fixt_domainEql(domain_minus(A, B), E);
});
it('should not break zero zero shortcut arr num', function() {
let A = fixt_dom_ranges([0, 1], [4, 12], [15, 117]);
let B = fixt_dom_nums(0, 3, 4, 5, 6, 7, 8, 15, 16, 17, 18, 19, 20, 21, 22);
let E = fixt_dom_range(0, 117);
fixt_domainEql(domain_minus(A, B), E);
});
it('should not break zero zero shortcut num arr', function() {
let A = fixt_dom_nums(0, 3, 4, 5, 6, 7, 8, 15, 16, 17, 18, 19, 20, 21, 22);
let B = fixt_dom_ranges([0, 1], [4, 12], [15, 117]);
let E = fixt_dom_range(0, 22);
fixt_domainEql(domain_minus(A, B), E);
});
it('should not break zero zero shortcut num', function() {
let A = fixt_dom_nums(0, 1, 4, 5, 6, 7, 10, 11, 12, 20, 20, 25, 26);
let B = fixt_dom_nums(0, 3, 4, 5, 6, 7, 8, 15, 22);
let E = fixt_dom_range(0, 26);
fixt_domainEql(domain_minus(A, B), E);
});
it('should shortcut loop', function() {
for (let i = 0; i < SMALL_MAX_NUM; ++i) {
let A = fixt_dom_nums(0, i);
let B = fixt_dom_nums(0, SMALL_MAX_NUM);
let E = fixt_dom_range(0, i);
fixt_domainEql(domain_minus(A, B), E, '0..' + i);
}
});
});
describe('red herrings', function() {
describe('small domains', function() {
let inputs = [
// randomly generated
134258832, 1141243913, 277057, 807420480, 29696008, 134357520, 50351424, 1275596820, 54525952, 537997320,
18891266, 281018896, 144715916, 40517721, 37290240, 37879816, 134514689, 1648492544, 78118912, 3171072,
685277253, 1476608577, 16391, 655508, 1073807616,
// all permutations of the first 5 bits
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
// only one bit set for all bits
1 << 0, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7, 1 << 8, 1 << 9, 1 << 10, 1 << 11, 1 << 12, 1 << 13, 1 << 14, 1 << 15, 1 << 16,
1 << 17, 1 << 18, 1 << 19, 1 << 20, 1 << 21, 1 << 22, 1 << 23, 1 << 24, 1 << 25, 1 << 26, 1 << 27, 1 << 28, 1 << 29, 1 << 30,
];
//console.log(inputs.map(a=>inputs.map(b=>domain_minus(a, b))).join(', '))
// these are the outcomes when crossing each input with each other input (or itself), ordered.
// they were generated from a more rigid version of the code. they serve as canaries.
let outcomes = [
9460557, 151041682, 136700639, 2368210, 16801343, 8670813, 2826942, 41986863, 44, 16833695, 67399770, 8653433, 51445119, 161529855, 526820, 16782390, 134328981, 1060, 338, 811255, 169917367, 136621779, 234944766, 43003757, 526496, 134258832, 67129416, 201388248, 33564708, 167815348, 100694124, 234944764, 16782354, 151041170, 83907674, 218166490, 50347062, 184597686, 117472382, 251723006, 8391177, 142650009, 75520585, 209779417, 41953837, 176204477, 109083245, 243333885, 25173531, 159432347, 92298843, 226557659, 58736191, 192986815, 125861503, 260112127, 134258832, 67129416, 33564708, 16782354, 8391177, 4195588, 2097794, 1048897, 524448, 262224, 131112, 65556, 32778, 16389, 8194, 4097, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 80407612, 2147483647, 2147483647, 20126526, 142800383, 73556795, 22913022, 356903163, 374, 143058039, 572724092, 73556892, 428863227, 2147483647, 4476646, 142664499, 2147483647, 9011, 2745, 6764408, 2147483647, 2147483647, 2147483647, 365555331, 4474375, 2147483647, 570621956, 2147483647, 285310978, 2147483647, 855867398, 2147483647, 142655489, 2147483647, 713277445, 2147483647, 427933699, 2147483647, 998490119, 2147483647, 71327744, 2147483647, 641949700, 2147483647, 356638722, 2147483647, 927195142, 2147483647, 213966849, 2147483647, 784588805, 2147483647, 499245059, 2147483647, 1069801479, 2147483647, 2147483647, 570621956, 285310978, 142655489, 71327744, 35663872, 17831936, 8915968, 4457984, 2228992, 1114496, 557248, 278624, 139312, 69656, 34828, 17414, 8707, 4353, 2176, 1088, 544, 272, 136, 68, 34, 17, 8, 4, 2, 1, 19453, 524287, 524287, 4861, 34669, 17343, 5631, 86007, 0, 34671, 139069, 17341, 102399, 524287, 1086, 34634, 524287, 2, 0, 1599, 524287, 524287, 524287, 86006, 1086, 524287, 138528, 524287, 69264, 524287, 204720, 524287, 34632, 524287, 171880, 524287, 102360, 524287, 237560, 524287, 17316, 524287, 155556, 524287, 85940, 524287, 221108, 524287, 51180, 524287, 188396, 524287, 118780, 524287, 253948, 524287, 524287, 138528, 69264, 34632, 17316, 8658, 4329, 2164, 1082, 541, 270, 135, 67, 33, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56878566, 908353116, 822075247, 14209451, 101039610, 52141367, 16707067, 252384958, 248, 101170031, 404287921, 52040935, 242211839, 937877501, 3160063, 100931800, 807824974, 6361, 2029, 3797987, 1021900799, 821623807, 1010365425, 258629300, 3158114, 807420480, 403710240, 942695264, 201855120, 1009275600, 471347632, 1010332656, 100927560, 908347976, 504637800, 1043622760, 235673816, 1043094232, 505166328, 1044151288, 50463780, 857884260, 454173988, 993159012, 252318900, 1059739380, 521811380, 1060796404, 117836908, 925257324, 521547116, 1060532076, 252583164, 1060003580, 522075644, 1061060604, 807420480, 403710240, 201855120, 100927560, 50463780, 25231890, 12615945, 6307972, 3153986, 1576993, 788496, 394248, 197124, 98562, 49281, 24640, 12320, 6160, 3080, 1540, 770, 385, 192, 96, 48, 24, 12, 6, 3, 1, 0, 2088939, 33400059, 29884159, 522142, 3715071, 1900283, 524285, 8216186, 7, 3719167, 14874527, 1897111, 8126079, 33552383, 116223, 3712231, 29703167, 231, 63, 126911, 32997311, 29882367, 33029918, 8379130, 116197, 29696008, 14848004, 31961100, 7424002, 32860170, 15980550, 33028110, 3712001, 33399817, 16430085, 33534989, 7990275, 33418251, 16514055, 33553423, 1856000, 31289864, 16699908, 33550860, 8215042, 33389066, 16767494, 33552910, 3995137, 33420809, 16709125, 33551885, 8257027, 33422859, 16776711, 33553935, 29696008, 14848004, 7424002, 3712001, 1856000, 928000, 464000, 232000, 116000, 58000, 29000, 14500, 7250, 3625, 1812, 906, 453, 226, 113, 56, 28, 14, 7, 3, 1, 0, 0, 0, 0, 0, 0, 9467509, 151152211, 136834047, 2370009, 16797307, 8677169, 2829038, 41986983, 44, 16829683, 67449177, 8659761, 51432695, 161640447, 527334, 16794727, 134427221, 1061, 338, 812027, 170048445, 136720283, 235125660, 43036645, 526882, 134357520, 67178760, 201536280, 33589380, 167946900, 100768140, 235125660, 16794690, 151152210, 83973450, 218330970, 50384070, 184741590, 117562830, 251920350, 8397345, 142746161, 75576105, 209924921, 41986725, 176335541, 109165485, 243514301, 25192035, 159540851, 92370795, 226719611, 58781415, 193130231, 125960175, 260308991, 134357520, 67178760, 33589380, 16794690, 8397345, 4198672, 2099336, 1049668, 524834, 262417, 131208, 65604, 32802, 16401, 8200, 4100, 2050, 1025, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 3546846, 56643048, 51248639, 888127, 6298607, 3251702, 1043839, 15742964, 15, 6306750, 25276095, 3245310, 15088638, 58478077, 197501, 6293933, 50360265, 397, 126, 236671, 63725439, 51236855, 62947313, 16127998, 197453, 50351424, 25175712, 58748896, 12587856, 62938960, 29374448, 62947312, 6293928, 56643048, 31469480, 65040360, 14687224, 65036280, 31473656, 65044472, 3146964, 53497300, 28321524, 61894644, 15734740, 66084820, 32520180, 66093044, 7343612, 57691644, 32518140, 66088956, 15736828, 66084860, 32522236, 66093052, 50351424, 25175712, 12587856, 6293928, 3146964, 1573482, 786741, 393370, 196685, 98342, 49171, 24585, 12292, 6146, 3073, 1536, 768, 384, 192, 96, 48, 24, 12, 6, 3, 1, 0, 0, 0, 0, 0, 81459577, 1300838167, 1296037855, 20395630, 159612926, 82241357, 25148286, 398904735, 382, 159903435, 640106094, 82216381, 463468287, 1308213239, 5001215, 159459126, 1275697951, 10039, 3067, 7307000, 1597685247, 1296006781, 2131704895, 400211877, 5000217, 1275596820, 637798410, 1846286366, 318899205, 1594496021, 923143183, 2131631135, 159449602, 1300828694, 797248010, 1871518238, 461571591, 1602950679, 1065815567, 2140085791, 79724801, 1288212757, 650414347, 1858902303, 398624005, 1607111957, 935759119, 2144247071, 230785795, 1305056023, 801475339, 1875745567, 532907783, 1607178007, 1070042895, 2144313119, 1275596820, 637798410, 318899205, 159449602, 79724801, 39862400, 19931200, 9965600, 4982800, 2491400, 1245700, 622850, 311425, 155712, 77856, 38928, 19464, 9732, 4866, 2433, 1216, 608, 304, 152, 76, 38, 19, 9, 4, 2, 1, 3579520, 57147888, 55443152, 896282, 6822879, 3521440, 1047811, 16004200, 15, 6831988, 27372827, 3514383, 16694814, 58527231, 213887, 6816173, 54554320, 429, 126, 261950, 64816895, 55422944, 66063616, 16155112, 213824, 54525952, 27262976, 65011712, 13631488, 63963136, 32505856, 66060288, 6815744, 57147392, 31981568, 65536000, 16252928, 66584576, 33030144, 66584576, 3407872, 57933824, 28573696, 66322432, 15990784, 66322432, 32768000, 66322432, 8126464, 58458112, 33292288, 66846720, 16515072, 66846720, 33292288, 66846720, 54525952, 27262976, 13631488, 6815744, 3407872, 1703936, 851968, 425984, 212992, 106496, 53248, 26624, 13312, 6656, 3328, 1664, 832, 416, 208, 104, 52, 26, 13, 6, 3, 1, 0, 0, 0, 0, 0, 37843951, 605240845, 546799615, 9489887, 67317501, 34675613, 11327486, 168255263, 176, 67315611, 270047740, 34675674, 206008319, 647231455, 2111283, 67253913, 538278446, 4249, 1354, 3251197, 680885999, 546438367, 941489230, 172326762, 2109745, 537997320, 268998660, 806991884, 134499330, 672496650, 403495942, 941489166, 67249665, 605238793, 336248325, 874233357, 201747971, 739737099, 470744583, 1008729615, 33624832, 571552520, 302619396, 840547084, 168124162, 706051850, 437116678, 975044366, 100873985, 638793481, 369868549, 907788045, 235372291, 773291787, 504364807, 1042284303, 537997320, 268998660, 134499330, 67249665, 33624832, 16812416, 8406208, 4203104, 2101552, 1050776, 525388, 262694, 131347, 65673, 32836, 16418, 8209, 4104, 2052, 1026, 513, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 1200102, 19155674, 19201903, 300457, 2361711, 1220019, 388571, 5904036, 5, 2366326, 9483689, 1217575, 7232463, 20369407, 74111, 2361556, 18900554, 148, 47, 114171, 23909374, 19191739, 33060739, 5919924, 74082, 18891266, 9445633, 28336899, 4722816, 23614082, 14168449, 33059715, 2361408, 19155522, 11807041, 28601155, 7084224, 23878338, 16529857, 33323971, 1180704, 20071970, 9577761, 28469027, 5903520, 24794786, 14300577, 33191843, 3542112, 20336226, 11939169, 28733283, 8264928, 25059042, 16661985, 33456099, 18891266, 9445633, 4722816, 2361408, 1180704, 590352, 295176, 147588, 73794, 36897, 18448, 9224, 4612, 2306, 1153, 576, 288, 144, 72, 36, 18, 9, 4, 2, 1, 0, 0, 0, 0, 0, 0, 19769255, 316149366, 281804345, 4940687, 35165939, 17624675, 5765914, 87887551, 91, 35233742, 141058975, 17588323, 104435431, 333401087, 1102814, 35129451, 281165746, 2155, 703, 1632143, 351478783, 281771003, 485507996, 87919357, 1102018, 281018896, 140509448, 417334040, 70254724, 351273620, 208667020, 485491612, 35127362, 316146258, 175636810, 452461402, 104333510, 385352406, 242745806, 519570398, 17563681, 298582577, 158073129, 434897721, 87818405, 368837301, 226230701, 503055293, 52166755, 333185651, 192676203, 469500795, 121372903, 402391799, 259785199, 536609791, 281018896, 140509448, 70254724, 35127362, 17563681, 8781840, 4390920, 2195460, 1097730, 548865, 274432, 137216, 68608, 34304, 17152, 8576, 4288, 2144, 1072, 536, 268, 134, 67, 33, 16, 8, 4, 2, 1, 0, 0, 10180457, 162805503, 145227775, 2552543, 18108347, 9328473, 2866942, 44732223, 46, 18141115, 72645343, 9327419, 54382455, 163493887, 567807, 18089591, 144783343, 1142, 343, 849919, 178961919, 145161983, 251150063, 45830015, 567472, 144715916, 72357958, 217069774, 36178979, 178797743, 108534887, 251149551, 18089489, 162805405, 89398871, 234110687, 54267443, 196886207, 125574775, 268189439, 9044744, 145372044, 81402702, 217725902, 44699435, 178929583, 117055343, 251281391, 27133721, 163461021, 98443103, 234766303, 62787387, 197017535, 134094719, 268320767, 144715916, 72357958, 36178979, 18089489, 9044744, 4522372, 2261186, 1130593, 565296, 282648, 141324, 70662, 35331, 17665, 8832, 4416, 2208, 1104, 552, 276, 138, 69, 34, 17, 8, 4, 2, 1, 0, 0, 0, 2553815, 67108863, 67108863, 638395, 5069823, 2602871, 786427, 12498687, 11, 5079039, 20266431, 2602285, 14680063, 67108863, 158335, 5065023, 67108863, 317, 95, 229375, 67108863, 67108863, 67108863, 12514815, 158314, 67108863, 20258860, 67108863, 10129430, 67108863, 29339710, 67108863, 5064715, 67108863, 24995887, 67108863, 14669855, 67108863, 33552447, 67108863, 2532357, 67108863, 20423725, 67108863, 12497943, 67108863, 29340735, 67108863, 7334927, 67108863, 25160751, 67108863, 16776223, 67108863, 33553471, 67108863, 67108863, 20258860, 10129430, 5064715, 2532357, 1266178, 633089, 316544, 158272, 79136, 39568, 19784, 9892, 4946, 2473, 1236, 618, 309, 154, 77, 38, 19, 9, 4, 2, 1, 0, 0, 0, 0, 0, 2619386, 41886142, 37355518, 654581, 4666367, 2334172, 720871, 11531223, 11, 4666363, 18717943, 2333852, 13595647, 41942527, 146303, 4661565, 37308414, 285, 87, 212479, 46130559, 37355517, 62900708, 11531103, 146233, 37290240, 18645120, 54362496, 9322560, 46088512, 27181248, 62898624, 4661280, 41885984, 23044256, 58696096, 13590624, 50291040, 31449312, 67101152, 2330640, 37458192, 20942992, 54497680, 11522128, 46125392, 29348048, 62902736, 6795312, 41922864, 25145520, 58700208, 15724656, 50327920, 33550576, 67105264, 37290240, 18645120, 9322560, 4661280, 2330640, 1165320, 582660, 291330, 145665, 72832, 36416, 18208, 9104, 4552, 2276, 1138, 569, 284, 142, 71, 35, 17, 8, 4, 2, 1, 0, 0, 0, 0, 0, 2406036, 38420921, 38502392, 600346, 4739807, 2437937, 777163, 11838570, 11, 4748919, 18950430, 2433293, 14480951, 40855931, 148095, 4735273, 37899484, 297, 94, 228158, 47942895, 38480747, 66291982, 11838827, 148034, 37879816, 18939908, 56819724, 9469954, 47349770, 28409862, 66289678, 4734977, 38420489, 23674885, 57360397, 14204931, 47890443, 33144839, 66830351, 2367488, 40247304, 19210244, 57090060, 11837442, 49717258, 28680198, 66560014, 7102465, 40787977, 23945221, 57630733, 16572419, 50257931, 33415175, 67100687, 37879816, 18939908, 9469954, 4734977, 2367488, 1183744, 591872, 295936, 147968, 73984, 36992, 18496, 9248, 4624, 2312, 1156, 578, 289, 144, 72, 36, 18, 9, 4, 2, 1, 0, 0, 0, 0, 0, 9460157, 268435455, 268435455, 2372214, 16833341, 8670951, 2832319, 42068939, 44, 16833004, 67528286, 8669940, 51510141, 268435455, 527820, 16815398, 268435455, 1062, 338, 812798, 268435455, 268435455, 268435455, 43085714, 527500, 268435455, 67257344, 268435455, 33628672, 268435455, 100886016, 268435455, 16814336, 268435455, 84071680, 268435455, 50443008, 268435455, 117700352, 268435455, 8407168, 268435455, 75648128, 268435455, 42035840, 268435455, 109276800, 268435455, 25221504, 268435455, 92462464, 268435455, 58850176, 268435455, 126091136, 268435455, 268435455, 67257344, 33628672, 16814336, 8407168, 4203584, 2101792, 1050896, 525448, 262724, 131362, 65681, 32840, 16420, 8210, 4105, 2052, 1026, 513, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 115865244, 1850374585, 1677688816, 28945183, 206273535, 104280893, 33545211, 515288189, 507, 206534263, 825338746, 104145359, 484440062, 1877999611, 6451071, 206074297, 1649335516, 12731, 4062, 7601982, 2078003183, 1677458287, 2079557896, 519355753, 6447683, 1648492544, 824246272, 1935867904, 412123136, 2060615680, 967933952, 2079555584, 206061568, 1850359808, 1030307840, 2137735168, 483966976, 2128265216, 1039777792, 2147205120, 103030784, 1717968896, 925179904, 2003247104, 515153920, 2130092032, 1068867584, 2146934784, 241983488, 1852727296, 1064132608, 2138005504, 519888896, 2130632704, 1073602560, 2147475456, 1648492544, 824246272, 412123136, 206061568, 103030784, 51515392, 25757696, 12878848, 6439424, 3219712, 1609856, 804928, 402464, 201232, 100616, 50308, 25154, 12577, 6288, 3144, 1572, 786, 393, 196, 98, 49, 24, 12, 6, 3, 1, 4980048, 79496063, 79364074, 1242789, 9774591, 4912980, 1556390, 23775893, 22, 9793514, 39212709, 4903963, 29327341, 83866359, 306431, 9765462, 78159226, 598, 189, 458735, 96119263, 79361788, 134091424, 23843541, 306344, 78118912, 39059456, 117178368, 19529728, 95027200, 58589184, 134086656, 9764864, 79495168, 47513600, 117243904, 29294592, 96403456, 67043328, 134152192, 4882432, 82477056, 39747584, 117342208, 23756800, 99254272, 58621952, 134119424, 14647296, 83853312, 48201728, 117407744, 33521664, 100630528, 67076096, 134184960, 78118912, 39059456, 19529728, 9764864, 4882432, 2441216, 1220608, 610304, 305152, 152576, 76288, 38144, 19072, 9536, 4768, 2384, 1192, 596, 298, 149, 74, 37, 18, 9, 4, 2, 1, 0, 0, 0, 0, 223223, 3567484, 3211199, 55805, 396799, 204731, 65535, 991222, 0, 397303, 1587697, 204337, 950247, 3665919, 12407, 396408, 3172204, 24, 7, 14835, 3996655, 3210237, 3963841, 1015550, 12403, 3171072, 1585536, 3699584, 792768, 3963840, 1849792, 3963840, 396384, 3567456, 1981920, 4095968, 924896, 4095968, 1981920, 4095968, 198192, 3368752, 1783728, 3897264, 990960, 4161520, 2047984, 4161520, 462448, 3633008, 2047984, 4161520, 990960, 4161520, 2047984, 4161520, 3171072, 1585536, 792768, 396384, 198192, 99096, 49548, 24774, 12387, 6193, 3096, 1548, 774, 387, 193, 96, 48, 24, 12, 6, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48103413, 1073741823, 1073741823, 12054375, 85688063, 43908845, 11534335, 180333983, 191, 85721053, 343732078, 43904247, 260046815, 1073741823, 2686943, 85660927, 1073741823, 5375, 1375, 4063215, 1073741823, 1073741823, 1073741823, 184532351, 2685144, 1073741823, 342638626, 1073741823, 171319313, 1073741823, 511598643, 1073741823, 85659656, 1073741823, 360665130, 1073741823, 255799321, 1073741823, 528445499, 1073741823, 42829828, 1073741823, 384682022, 1073741823, 180332565, 1073741823, 520087607, 1073741823, 127899660, 1073741823, 402642990, 1073741823, 264222749, 1073741823, 536868927, 1073741823, 1073741823, 342638626, 171319313, 85659656, 42829828, 21414914, 10707457, 5353728, 2676864, 1338432, 669216, 334608, 167304, 83652, 41826, 20913, 10456, 5228, 2614, 1307, 653, 326, 163, 81, 40, 20, 10, 5, 2, 1, 0, 95614655, 2147483647, 2147483647, 23949295, 184745979, 95354303, 25128959, 394657727, 380, 185073151, 741204989, 95172085, 532152063, 2147483647, 5791727, 184577389, 2147483647, 11631, 3062, 8382463, 2147483647, 2147483647, 2147483647, 397475765, 5790531, 2147483647, 738304288, 2147483647, 369152144, 2147483647, 1040314800, 2147483647, 184576072, 2147483647, 788654440, 2147483647, 520157400, 2147483647, 1057094136, 2147483647, 92288036, 2147483647, 763475236, 2147483647, 394327220, 2147483647, 1065481652, 2147483647, 260078700, 2147483647, 797048172, 2147483647, 528547068, 2147483647, 1065483772, 2147483647, 2147483647, 738304288, 369152144, 184576072, 92288036, 46144018, 23072009, 11536004, 5768002, 2884001, 1442000, 721000, 360500, 180250, 90125, 45062, 22531, 11265, 5632, 2816, 1408, 704, 352, 176, 88, 44, 22, 11, 5, 2, 1, 1154, 32767, 32767, 289, 2050, 1058, 345, 5125, 0, 2054, 8227, 1056, 6279, 32767, 64, 2048, 32767, 0, 0, 99, 32767, 32767, 32767, 5249, 64, 32767, 8195, 32767, 4097, 32767, 12291, 32767, 2048, 32767, 10243, 32767, 6145, 32767, 14339, 32767, 1024, 32767, 9219, 32767, 5121, 32767, 13315, 32767, 3072, 32767, 11267, 32767, 7169, 32767, 15363, 32767, 32767, 8195, 4097, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46173, 737431, 667126, 11562, 82010, 42333, 11242, 172205, 0, 82170, 329066, 42249, 251127, 780479, 2571, 81943, 655830, 5, 1, 3960, 698551, 667071, 1016063, 177197, 2570, 655508, 327754, 983262, 163877, 688309, 491631, 1016063, 81938, 737430, 344154, 999646, 245815, 770231, 508031, 1032447, 40969, 696477, 368715, 1024223, 172077, 696509, 499823, 1024255, 122907, 778399, 385115, 1040607, 254015, 778431, 516223, 1040639, 655508, 327754, 163877, 81938, 40969, 20484, 10242, 5121, 2560, 1280, 640, 320, 160, 80, 40, 20, 10, 5, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75665946, 1208037681, 1093604796, 18941574, 134377961, 69349528, 22611301, 335829081, 352, 134636603, 539067076, 69210516, 411460346, 1291927348, 4214561, 134226208, 1074368810, 8483, 2704, 6489997, 1359072718, 1092707725, 1879163332, 343964242, 4210945, 1073807616, 536903808, 1610711424, 268451904, 1342259520, 805355712, 1879163328, 134225952, 1208033568, 671129760, 1744937376, 402677856, 1476485472, 939581664, 2013389280, 67112976, 1140920592, 604016784, 1677824400, 335564880, 1409372496, 872468688, 1946276304, 201338928, 1275146544, 738242736, 1812050352, 469790832, 1543598448, 1006694640, 2080502256, 1073807616, 536903808, 268451904, 134225952, 67112976, 33556488, 16778244, 8389122, 4194561, 2097280, 1048640, 524320, 262160, 131080, 65540, 32770, 16385, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 2, 0, 0, 0, 2, 2, 3, 0, 0, 2, 1, 3, 0, 2, 1, 3, 0, 2, 1, 3, 0, 2, 1, 3, 0, 2, 1, 3, 0, 2, 1, 3, 0, 2, 1, 3, 0, 2, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 3, 0, 0, 0, 3, 3, 3, 0, 0, 3, 1, 3, 0, 3, 1, 3, 0, 3, 1, 3, 0, 3, 1, 3, 0, 3, 1, 3, 0, 3, 1, 3, 0, 3, 1, 3, 0, 3, 1, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 1, 0, 0, 2, 0, 1, 4, 0, 0, 4, 0, 0, 0, 5, 4, 7, 1, 0, 4, 2, 6, 1, 5, 3, 7, 0, 4, 2, 6, 1, 5, 3, 7, 0, 4, 2, 6, 1, 5, 3, 7, 0, 4, 2, 6, 1, 5, 3, 7, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 1, 0, 0, 2, 0, 1, 7, 0, 0, 7, 0, 0, 0, 7, 7, 7, 1, 0, 7, 2, 7, 1, 7, 3, 7, 0, 7, 2, 7, 1, 7, 3, 7, 0, 7, 2, 7, 1, 7, 3, 7, 0, 7, 2, 7, 1, 7, 3, 7, 7, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 1, 0, 0, 3, 0, 1, 6, 0, 0, 6, 0, 0, 0, 7, 6, 7, 1, 0, 6, 3, 7, 1, 7, 3, 7, 0, 6, 3, 7, 1, 7, 3, 7, 0, 6, 3, 7, 1, 7, 3, 7, 0, 6, 3, 7, 1, 7, 3, 7, 6, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 1, 0, 0, 3, 0, 1, 7, 0, 0, 7, 0, 0, 0, 7, 7, 7, 1, 0, 7, 3, 7, 1, 7, 3, 7, 0, 7, 3, 7, 1, 7, 3, 7, 0, 7, 3, 7, 1, 7, 3, 7, 0, 7, 3, 7, 1, 7, 3, 7, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 8, 0, 1, 0, 0, 2, 0, 1, 4, 0, 3, 9, 0, 1, 8, 0, 0, 0, 10, 8, 14, 2, 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15, 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 0, 1, 0, 0, 2, 0, 1, 4, 0, 3, 15, 0, 1, 15, 0, 0, 0, 15, 15, 15, 2, 0, 15, 4, 15, 2, 15, 6, 15, 1, 15, 5, 15, 3, 15, 7, 15, 0, 15, 4, 15, 2, 15, 6, 15, 1, 15, 5, 15, 3, 15, 7, 15, 15, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 10, 0, 1, 0, 0, 2, 0, 1, 5, 0, 3, 11, 0, 1, 10, 0, 0, 0, 10, 10, 15, 2, 0, 10, 5, 15, 2, 10, 7, 15, 1, 11, 5, 15, 3, 11, 7, 15, 0, 10, 5, 15, 2, 10, 7, 15, 1, 11, 5, 15, 3, 11, 7, 15, 10, 5, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 0, 1, 0, 0, 2, 0, 1, 5, 0, 3, 15, 0, 1, 15, 0, 0, 0, 15, 15, 15, 2, 0, 15, 5, 15, 2, 15, 7, 15, 1, 15, 5, 15, 3, 15, 7, 15, 0, 15, 5, 15, 2, 15, 7, 15, 1, 15, 5, 15, 3, 15, 7, 15, 15, 5, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 12, 0, 1, 0, 0, 3, 0, 1, 6, 0, 3, 13, 0, 1, 12, 0, 0, 0, 15, 12, 15, 3, 0, 12, 6, 14, 3, 15, 7, 15, 1, 13, 7, 15, 3, 15, 7, 15, 0, 12, 6, 14, 3, 15, 7, 15, 1, 13, 7, 15, 3, 15, 7, 15, 12, 6, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 0, 1, 0, 0, 3, 0, 1, 6, 0, 3, 15, 0, 1, 15, 0, 0, 0, 15, 15, 15, 3, 0, 15, 6, 15, 3, 15, 7, 15, 1, 15, 7, 15, 3, 15, 7, 15, 0, 15, 6, 15, 3, 15, 7, 15, 1, 15, 7, 15, 3, 15, 7, 15, 15, 6, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 14, 0, 1, 0, 0, 3, 0, 1, 7, 0, 3, 15, 0, 1, 14, 0, 0, 0, 15, 14, 15, 3, 0, 14, 7, 15, 3, 15, 7, 15, 1, 15, 7, 15, 3, 15, 7, 15, 0, 14, 7, 15, 3, 15, 7, 15, 1, 15, 7, 15, 3, 15, 7, 15, 14, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 0, 1, 0, 0, 3, 0, 1, 7, 0, 3, 15, 0, 1, 15, 0, 0, 0, 15, 15, 15, 3, 0, 15, 7, 15, 3, 15, 7, 15, 1, 15, 7, 15, 3, 15, 7, 15, 0, 15, 7, 15, 3, 15, 7, 15, 1, 15, 7, 15, 3, 15, 7, 15, 15, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 18, 16, 0, 2, 1, 0, 5, 0, 2, 8, 1, 6, 19, 0, 2, 16, 0, 0, 0, 20, 16, 28, 5, 0, 16, 8, 24, 4, 20, 12, 28, 2, 18, 10, 26, 6, 22, 14, 30, 1, 17, 9, 25, 5, 21, 13, 29, 3, 19, 11, 27, 7, 23, 15, 31, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 31, 31, 0, 2, 1, 0, 5, 0, 2, 8, 1, 6, 31, 0, 2, 31, 0, 0, 0, 31, 31, 31, 5, 0, 31, 8, 31, 4, 31, 12, 31, 2, 31, 10, 31, 6, 31, 14, 31, 1, 31, 9, 31, 5, 31, 13, 31, 3, 31, 11, 31, 7, 31, 15, 31, 31, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 18, 18, 0, 2, 1, 0, 5, 0, 2, 9, 1, 6, 19, 0, 2, 18, 0, 0, 0, 22, 18, 31, 5, 0, 18, 9, 27, 4, 22, 13, 31, 2, 18, 11, 27, 6, 22, 15, 31, 1, 19, 9, 27, 5, 23, 13, 31, 3, 19, 11, 27, 7, 23, 15, 31, 18, 9, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 31, 31, 0, 2, 1, 0, 5, 0, 2, 9, 1, 6, 31, 0, 2, 31, 0, 0, 0, 31, 31, 31, 5, 0, 31, 9, 31, 4, 31, 13, 31, 2, 31, 11, 31, 6, 31, 15, 31, 1, 31, 9, 31, 5, 31, 13, 31, 3, 31, 11, 31, 7, 31, 15, 31, 31, 9, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 22, 20, 0, 2, 1, 0, 5, 0, 2, 10, 1, 7, 23, 0, 2, 20, 0, 0, 0, 21, 20, 31, 5, 0, 20, 10, 30, 5, 21, 15, 31, 2, 22, 10, 30, 7, 23, 15, 31, 1, 21, 11, 31, 5, 21, 15, 31, 3, 23, 11, 31, 7, 23, 15, 31, 20, 10, 5, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 31, 31, 0, 2, 1, 0, 5, 0, 2, 10, 1, 7, 31, 0, 2, 31, 0, 0, 0, 31, 31, 31, 5, 0, 31, 10, 31, 5, 31, 15, 31, 2, 31, 10, 31, 7, 31, 15, 31, 1, 31, 11, 31, 5, 31, 15, 31, 3, 31, 11, 31, 7, 31, 15, 31, 31, 10, 5, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 22, 22, 0, 2, 1, 0, 5, 0, 2, 11, 1, 7, 23, 0, 2, 22, 0, 0, 0, 23, 22, 31, 5, 0, 22, 11, 31, 5, 23, 15, 31, 2, 22, 11, 31, 7, 23, 15, 31, 1, 23, 11, 31, 5, 23, 15, 31, 3, 23, 11, 31, 7, 23, 15, 31, 22, 11, 5, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 31, 31, 0, 2, 1, 0, 5, 0, 2, 11, 1, 7, 31, 0, 2, 31, 0, 0, 0, 31, 31, 31, 5, 0, 31, 11, 31, 5, 31, 15, 31, 2, 31, 11, 31, 7, 31, 15, 31, 1, 31, 11, 31, 5, 31, 15, 31, 3, 31, 11, 31, 7, 31, 15, 31, 31, 11, 5, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 27, 24, 0, 3, 1, 0, 7, 0, 3, 12, 1, 7, 27, 0, 3, 24, 0, 0, 0, 30, 24, 30, 7, 0, 24, 12, 28, 6, 30, 14, 30, 3, 27, 15, 31, 7, 31, 15, 31, 1, 25, 13, 29, 7, 31, 15, 31, 3, 27, 15, 31, 7, 31, 15, 31, 24, 12, 6, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 31, 31, 0, 3, 1, 0, 7, 0, 3, 12, 1, 7, 31, 0, 3, 31, 0, 0, 0, 31, 31, 31, 7, 0, 31, 12, 31, 6, 31, 14, 31, 3, 31, 15, 31, 7, 31, 15, 31, 1, 31, 13, 31, 7, 31, 15, 31, 3, 31, 15, 31, 7, 31, 15, 31, 31, 12, 6, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 27, 26, 0, 3, 1, 0, 7, 0, 3, 13, 1, 7, 27, 0, 3, 26, 0, 0, 0, 30, 26, 31, 7, 0, 26, 13, 31, 6, 30, 15, 31, 3, 27, 15, 31, 7, 31, 15, 31, 1, 27, 13, 31, 7, 31, 15, 31, 3, 27, 15, 31, 7, 31, 15, 31, 26, 13, 6, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 31, 31, 0, 3, 1, 0, 7, 0, 3, 13, 1, 7, 31, 0, 3, 31, 0, 0, 0, 31, 31, 31, 7, 0, 31, 13, 31, 6, 31, 15, 31, 3, 31, 15, 31, 7, 31, 15, 31, 1, 31, 13, 31, 7, 31, 15, 31, 3, 31, 15, 31, 7, 31, 15, 31, 31, 13, 6, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 31, 28, 0, 3, 1, 0, 7, 0, 3, 14, 1, 7, 31, 0, 3, 28, 0, 0, 0, 31, 28, 31, 7, 0, 28, 14, 30, 7, 31, 15, 31, 3, 31, 15, 31, 7, 31, 15, 31, 1, 29, 15, 31, 7, 31, 15, 31, 3, 31, 15, 31, 7, 31, 15, 31, 28, 14, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 31, 31, 0, 3, 1, 0, 7, 0, 3, 14, 1, 7, 31, 0, 3, 31, 0, 0, 0, 31, 31, 31, 7, 0, 31, 14, 31, 7, 31, 15, 31, 3, 31, 15, 31, 7, 31, 15, 31, 1, 31, 15, 31, 7, 31, 15, 31, 3, 31, 15, 31, 7, 31, 15, 31, 31, 14, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 31, 30, 0, 3, 1, 0, 7, 0, 3, 15, 1, 7, 31, 0, 3, 30, 0, 0, 0, 31, 30, 31, 7, 0, 30, 15, 31, 7, 31, 15, 31, 3, 31, 15, 31, 7, 31, 15, 31, 1, 31, 15, 31, 7, 31, 15, 31, 3, 31, 15, 31, 7, 31, 15, 31, 30, 15, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 31, 31, 0, 3, 1, 0, 7, 0, 3, 15, 1, 7, 31, 0, 3, 31, 0, 0, 0, 31, 31, 31, 7, 0, 31, 15, 31, 7, 31, 15, 31, 3, 31, 15, 31, 7, 31, 15, 31, 1, 31, 15, 31, 7, 31, 15, 31, 3, 31, 15, 31, 7, 31, 15, 31, 31, 15, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 2, 0, 0, 0, 2, 2, 3, 0, 0, 2, 1, 3, 0, 2, 1, 3, 0, 2, 1, 3, 0, 2, 1, 3, 0, 2, 1, 3, 0, 2, 1, 3, 0, 2, 1, 3, 0, 2, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 1, 0, 0, 2, 0, 1, 4, 0, 0, 4, 0, 0, 0, 5, 4, 7, 1, 0, 4, 2, 6, 1, 5, 3, 7, 0, 4, 2, 6, 1, 5, 3, 7, 0, 4, 2, 6, 1, 5, 3, 7, 0, 4, 2, 6, 1, 5, 3, 7, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 8, 0, 1, 0, 0, 2, 0, 1, 4, 0, 3, 9, 0, 1, 8, 0, 0, 0, 10, 8, 14, 2, 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15, 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 18, 16, 0, 2, 1, 0, 5, 0, 2, 8, 1, 6, 19, 0, 2, 16, 0, 0, 0, 20, 16, 28, 5, 0, 16, 8, 24, 4, 20, 12, 28, 2, 18, 10, 26, 6, 22, 14, 30, 1, 17, 9, 25, 5, 21, 13, 29, 3, 19, 11, 27, 7, 23, 15, 31, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 36, 32, 0, 4, 2, 0, 10, 0, 4, 16, 2, 12, 38, 0, 4, 32, 0, 0, 0, 40, 32, 56, 10, 0, 32, 16, 48, 8, 40, 24, 56, 4, 36, 20, 52, 12, 44, 28, 60, 2, 34, 18, 50, 10, 42, 26, 58, 6, 38, 22, 54, 14, 46, 30, 62, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 72, 65, 1, 8, 4, 1, 20, 0, 8, 32, 4, 24, 77, 0, 8, 64, 0, 0, 0, 81, 65, 112, 20, 0, 64, 32, 96, 16, 80, 48, 112, 8, 72, 40, 104, 24, 88, 56, 120, 4, 68, 36, 100, 20, 84, 52, 116, 12, 76, 44, 108, 28, 92, 60, 124, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 144, 130, 2, 16, 8, 2, 40, 0, 16, 64, 8, 49, 154, 0, 16, 128, 0, 0, 0, 162, 130, 224, 41, 0, 128, 64, 192, 32, 160, 96, 224, 16, 144, 80, 208, 48, 176, 112, 240, 8, 136, 72, 200, 40, 168, 104, 232, 24, 152, 88, 216, 56, 184, 120, 248, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 288, 260, 4, 32, 16, 5, 80, 0, 32, 128, 16, 98, 308, 1, 32, 256, 0, 0, 1, 324, 260, 448, 82, 1, 256, 128, 384, 64, 320, 192, 448, 32, 288, 160, 416, 96, 352, 224, 480, 16, 272, 144, 400, 80, 336, 208, 464, 48, 304, 176, 432, 112, 368, 240, 496, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 576, 521, 9, 64, 33, 10, 160, 0, 64, 257, 33, 196, 616, 2, 64, 512, 0, 0, 3, 648, 521, 896, 164, 2, 512, 256, 768, 128, 640, 384, 896, 64, 576, 320, 832, 192, 704, 448, 960, 32, 544, 288, 800, 160, 672, 416, 928, 96, 608, 352, 864, 224, 736, 480, 992, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 1152, 1042, 18, 128, 66, 21, 320, 0, 128, 514, 66, 392, 1232, 4, 128, 1024, 0, 0, 6, 1296, 1042, 1792, 328, 4, 1024, 512, 1536, 256, 1280, 768, 1792, 128, 1152, 640, 1664, 384, 1408, 896, 1920, 64, 1088, 576, 1600, 320, 1344, 832, 1856, 192, 1216, 704, 1728, 448, 1472, 960, 1984, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 2304, 2085, 36, 256, 132, 43, 640, 0, 256, 1028, 132, 784, 2464, 8, 256, 2049, 0, 0, 12, 2592, 2084, 3584, 656, 8, 2048, 1024, 3072, 512, 2560, 1536, 3584, 256, 2304, 1280, 3328, 768, 2816, 1792, 3840, 128, 2176, 1152, 3200, 640, 2688, 1664, 3712, 384, 2432, 1408, 3456, 896, 2944, 1920, 3968, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 4608, 4171, 72, 512, 264, 86, 1281, 0, 513, 2056, 264, 1569, 4928, 16, 512, 4098, 0, 0, 24, 5184, 4168, 7168, 1312, 16, 4096, 2048, 6144, 1024, 5120, 3072, 7168, 512, 4608, 2560, 6656, 1536, 5632, 3584, 7680, 256, 4352, 2304, 6400, 1280, 5376, 3328, 7424, 768, 4864, 2816, 6912, 1792, 5888, 3840, 7936, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 9216, 8343, 144, 1025, 529, 172, 2562, 0, 1027, 4112, 528, 3139, 9856, 32, 1024, 8196, 0, 0, 49, 10368, 8336, 14336, 2624, 32, 8192, 4096, 12288, 2048, 10240, 6144, 14336, 1024, 9216, 5120, 13312, 3072, 11264, 7168, 15360, 512, 8704, 4608, 12800, 2560, 10752, 6656, 14848, 1536, 9728, 5632, 13824, 3584, 11776, 7680, 15872, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1154, 18432, 16686, 289, 2050, 1058, 345, 5124, 0, 2054, 8225, 1056, 6278, 19713, 64, 2048, 16392, 0, 0, 99, 20736, 16673, 28673, 5248, 64, 16384, 8192, 24576, 4096, 20480, 12288, 28672, 2048, 18432, 10240, 26624, 6144, 22528, 14336, 30720, 1024, 17408, 9216, 25600, 5120, 21504, 13312, 29696, 3072, 19456, 11264, 27648, 7168, 23552, 15360, 31744, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2309, 36864, 33372, 578, 4100, 2116, 690, 10248, 0, 4108, 16450, 2112, 12556, 39426, 128, 4096, 32785, 0, 0, 198, 41473, 33346, 57346, 10496, 128, 32768, 16384, 49152, 8192, 40960, 24576, 57344, 4096, 36864, 20480, 53248, 12288, 45056, 28672, 61440, 2048, 34816, 18432, 51200, 10240, 43008, 26624, 59392, 6144, 38912, 22528, 55296, 14336, 47104, 30720, 63488, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4618, 73728, 66744, 1156, 8201, 4232, 1380, 20496, 0, 8217, 32900, 4224, 25112, 78852, 257, 8192, 65570, 0, 0, 396, 82946, 66693, 114692, 20992, 257, 65536, 32768, 98304, 16384, 81920, 49152, 114688, 8192, 73728, 40960, 106496, 24576, 90112, 57344, 122880, 4096, 69632, 36864, 102400, 20480, 86016, 53248, 118784, 12288, 77824, 45056, 110592, 28672, 94208, 61440, 126976, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9236, 147457, 133488, 2312, 16402, 8465, 2760, 40992, 0, 16434, 65800, 8448, 50224, 157705, 514, 16385, 131140, 1, 0, 792, 165892, 133387, 229384, 41985, 514, 131072, 65536, 196608, 32768, 163840, 98304, 229376, 16384, 147456, 81920, 212992, 49152, 180224, 114688, 245760, 8192, 139264, 73728, 204800, 40960, 172032, 106496, 237568, 24576, 155648, 90112, 221184, 57344, 188416, 122880, 253952, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18472, 294915, 266977, 4624, 32805, 16930, 5520, 81984, 0, 32868, 131600, 16896, 100448, 315410, 1028, 32770, 262281, 2, 0, 1584, 331784, 266774, 458768, 83970, 1028, 262144, 131072, 393216, 65536, 327680, 196608, 458752, 32768, 294912, 163840, 425984, 98304, 360448, 229376, 491520, 16384, 278528, 147456, 409600, 81920, 344064, 212992, 475136, 49152, 311296, 180224, 442368, 114688, 376832, 245760, 507904, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36944, 589830, 533954, 9248, 65610, 33860, 11040, 163969, 0, 65736, 263200, 33792, 200896, 630821, 2057, 65540, 524562, 4, 1, 3168, 663569, 533548, 917536, 167941, 2056, 524288, 262144, 786432, 131072, 655360, 393216, 917504, 65536, 589824, 327680, 851968, 196608, 720896, 458752, 983040, 32768, 557056, 294912, 819200, 163840, 688128, 425984, 950272, 98304, 622592, 360448, 884736, 229376, 753664, 491520, 1015808, 524288, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73888, 1179660, 1067908, 18496, 131220, 67720, 22080, 327938, 0, 131473, 526400, 67584, 401792, 1261642, 4115, 131080, 1049124, 8, 2, 6337, 1327139, 1067096, 1835072, 335882, 4112, 1048576, 524288, 1572864, 262144, 1310720, 786432, 1835008, 131072, 1179648, 655360, 1703936, 393216, 1441792, 917504, 1966080, 65536, 1114112, 589824, 1638400, 327680, 1376256, 851968, 1900544, 196608, 1245184, 720896, 1769472, 458752, 1507328, 983040, 2031616, 1048576, 524288, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147776, 2359320, 2135816, 36993, 262440, 135440, 44160, 655876, 0, 262946, 1052801, 135168, 803585, 2523285, 8231, 262160, 2098248, 16, 5, 12675, 2654278, 2134192, 3670144, 671764, 8224, 2097152, 1048576, 3145728, 524288, 2621440, 1572864, 3670016, 262144, 2359296, 1310720, 3407872, 786432, 2883584, 1835008, 3932160, 131072, 2228224, 1179648, 3276800, 655360, 2752512, 1703936, 3801088, 393216, 2490368, 1441792, 3538944, 917504, 3014656, 1966080, 4063232, 2097152, 1048576, 524288, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295552, 4718640, 4271632, 73986, 524881, 270880, 88320, 1311752, 1, 525892, 2105602, 270337, 1607170, 5046571, 16462, 524321, 4196496, 33, 10, 25350, 5308557, 4268384, 7340288, 1343528, 16448, 4194304, 2097152, 6291456, 1048576, 5242880, 3145728, 7340032, 524288, 4718592, 2621440, 6815744, 1572864, 5767168, 3670016, 7864320, 262144, 4456448, 2359296, 6553600, 1310720, 5505024, 3407872, 7602176, 786432, 4980736, 2883584, 7077888, 1835008, 6029312, 3932160, 8126464, 4194304, 2097152, 1048576, 524288, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 591104, 9437280, 8543264, 147972, 1049763, 541760, 176640, 2623504, 2, 1051784, 4211204, 540675, 3214341, 10093142, 32924, 1048642, 8392992, 66, 21, 50700, 10617115, 8536768, 14680576, 2687056, 32896, 8388608, 4194304, 12582912, 2097152, 10485760, 6291456, 14680064, 1048576, 9437184, 5242880, 13631488, 3145728, 11534336, 7340032, 15728640, 524288, 8912896, 4718592, 13107200, 2621440, 11010048, 6815744, 15204352, 1572864, 9961472, 5767168, 14155776, 3670016, 12058624, 7864320, 16252928, 8388608, 4194304, 2097152, 1048576, 524288, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1182208, 18874560, 17086528, 295944, 2099527, 1083520, 353281, 5247008, 5, 2103568, 8422409, 1081350, 6428682, 20186284, 65848, 2097284, 16785984, 132, 42, 101400, 21234230, 17073536, 29361152, 5374112, 65792, 16777216, 8388608, 25165824, 4194304, 20971520, 12582912, 29360128, 2097152, 18874368, 10485760, 27262976, 6291456, 23068672, 14680064, 31457280, 1048576, 17825792, 9437184, 26214400, 5242880, 22020096, 13631488, 30408704, 3145728, 19922944, 11534336, 28311552, 7340032, 24117248, 15728640, 32505856, 16777216, 8388608, 4194304, 2097152, 1048576, 524288, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 0, 2364416, 37749120, 34173056, 591888, 4199054, 2167040, 706563, 10494016, 11, 4207136, 16844818, 2162700, 12857364, 40372569, 131697, 4194569, 33571968, 265, 84, 202800, 42468460, 34147072, 58722304, 10748224, 131584, 33554432, 16777216, 50331648, 8388608, 41943040, 25165824, 58720256, 4194304, 37748736, 20971520, 54525952, 12582912, 46137344, 29360128, 62914560, 2097152, 35651584, 18874368, 52428800, 10485760, 44040192, 27262976, 60817408, 6291456, 39845888, 23068672, 56623104, 14680064, 48234496, 31457280, 65011712, 33554432, 16777216, 8388608, 4194304, 2097152, 1048576, 524288, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 0, 4728832, 75498241, 68346112, 1183776, 8398108, 4334080, 1413126, 20988033, 22, 8414272, 33689636, 4325400, 25714728, 80745138, 263394, 8389138, 67143936, 530, 169, 405600, 84936920, 68294144, 117444608, 21496448, 263168, 67108864, 33554432, 100663296, 16777216, 83886080, 50331648, 117440512, 8388608, 75497472, 41943040, 109051904, 25165824, 92274688, 58720256, 125829120, 4194304, 71303168, 37748736, 104857600, 20971520, 88080384, 54525952, 121634816, 12582912, 79691776, 46137344, 113246208, 29360128, 96468992, 62914560, 130023424, 67108864, 33554432, 16777216, 8388608, 4194304, 2097152, 1048576, 524288, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 9457665, 150996482, 136692224, 2367552, 16796216, 8668161, 2826252, 41976067, 44, 16828544, 67379272, 8650800, 51429457, 161490276, 526788, 16778276, 134287873, 1060, 338, 811200, 169873841, 136588289, 234889216, 42992896, 526336, 134217728, 67108864, 201326592, 33554432, 167772160, 100663296, 234881024, 16777216, 150994944, 83886080, 218103808, 50331648, 184549376, 117440512, 251658240, 8388608, 142606336, 75497472, 209715200, 41943040, 176160768, 109051904, 243269632, 25165824, 159383552, 92274688, 226492416, 58720256, 192937984, 125829120, 260046848, 134217728, 67108864, 33554432, 16777216, 8388608, 4194304, 2097152, 1048576, 524288, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 18915330, 301992964, 273384448, 4735105, 33592432, 17336322, 5652504, 83952134, 88, 33657088, 134758544, 17301601, 102858914, 322980552, 1053576, 33556552, 268575746, 2120, 676, 1622400, 339747682, 273176579, 469778432, 85985792, 1052672, 268435456, 134217728, 402653184, 67108864, 335544320, 201326592, 469762048, 33554432, 301989888, 167772160, 436207616, 100663296, 369098752, 234881024, 503316480, 16777216, 285212672, 150994944, 419430400, 83886080, 352321536, 218103808, 486539264, 50331648, 318767104, 184549376, 452984832, 117440512, 385875968, 251658240, 520093696, 268435456, 134217728, 67108864, 33554432, 16777216, 8388608, 4194304, 2097152, 1048576, 524288, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0, 37830660, 603985928, 546768896, 9470211, 67184864, 34672644, 11305008, 167904268, 176, 67314177, 269517088, 34603202, 205717828, 645961104, 2107152, 67113104, 537151492, 4241, 1352, 3244800, 679495365, 546353158, 939556864, 171971584, 2105344, 536870912, 268435456, 805306368, 134217728, 671088640, 402653184, 939524096, 67108864, 603979776, 335544320, 872415232, 201326592, 738197504, 469762048, 1006632960, 33554432, 570425344, 301989888, 838860800, 167772160, 704643072, 436207616, 973078528, 100663296, 637534208, 369098752, 905969664, 234881024, 771751936, 503316480, 1040187392, 536870912, 268435456, 134217728, 67108864, 33554432, 16777216, 8388608, 4194304, 2097152, 1048576, 524288, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 75661320, 1207971857, 1093537792, 18940422, 134369728, 69345288, 22610016, 335808537, 352, 134628354, 539034176, 69206404, 411435656, 1291922208, 4214304, 134226208, 1074302984, 8483, 2704, 6489600, 1358990730, 1092706317, 1879113728, 343943168, 4210689, 1073741824, 536870912, 1610612736, 268435456, 1342177280, 805306368, 1879048192, 134217728, 1207959552, 671088640, 1744830464, 402653184, 1476395008, 939524096, 2013265920, 67108864, 1140850688, 603979776, 1677721600, 335544320, 1409286144, 872415232, 1946157056, 201326592, 1275068416, 738197504, 1811939328, 469762048, 1543503872, 1006632960, 2080374784, 1073741824, 536870912, 268435456, 134217728, 67108864, 33554432, 16777216, 8388608, 4194304, 2097152, 1048576, 524288, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1,
];
it('should not kill small canaries', function() {
let n = 0;
for (let i = 0; i < inputs.length; ++i) {
for (let j = 0; j < inputs.length; ++j) {
//console.log(y[i].toString(2).padLeft(32, '0'), '-', y[j].toString(2).padLeft(32, '0'), '=', domain_minus(y[i], y[j]).toString(2).padLeft(32, '0'), ' ', y[i], '-', y[j], '=', domain_minus(y[i], y[j]), ' ', domain_toList(y[i]), '-', domain_toList(y[j]), '=', domain_toList(domain_minus(y[i], y[j])));
let A = inputs[i];
let B = inputs[j];
let C = outcomes[n++];
let desc = domain__debug(A) + ' - ' + domain__debug(B) + ' = ' + domain__debug(C);
fixt_domainEql(domain_minus(A, B), C, desc);
}
}
});
});
describe('large+small/large domains', function() {
let smalls = [1262692, 67113474, 1276118016, 8491264, 1845494032, 20983812, 539230720, 1611141259, 1073875264, 287574272];
let large = [
[1, 8, 11, 14, 17, 23, 24, 25, 29, 32, 38, 39, 48, 49, 51, 52, 53, 59, 62, 69, 82, 83, 85, 86, 95],
[3, 6, 7, 9, 15, 24, 25, 28, 32, 36, 38, 41, 42, 50, 51, 54, 56, 57, 66, 69, 70, 76, 82, 89, 95, 98],
[4, 5, 12, 18, 20, 22, 26, 32, 33, 36, 38, 39, 45, 47, 49, 54, 59, 65, 66, 68, 75, 81, 84, 87, 91, 95, 99],
[0, 2, 3, 4, 10, 11, 12, 18, 21, 24, 25, 27, 35, 42, 46, 50, 52, 53, 55, 62, 65, 66, 67, 71, 72, 80, 90, 93],
[0, 13, 18, 19, 27, 28, 39, 40, 42, 46, 49, 51, 53, 60, 64, 69, 72, 74, 78, 79, 83, 85, 86, 97, 99],
[3, 11, 12, 16, 17, 19, 22, 25, 34, 40, 41, 42, 49, 64, 68, 71, 82, 84, 85, 87, 91, 92, 96, 99],
[1, 4, 9, 19, 25, 27, 29, 43, 44, 46, 48, 54, 55, 57, 58, 64, 69, 71, 78, 85, 88, 89, 97, 98, 99],
[1, 6, 10, 13, 16, 17, 23, 29, 34, 41, 44, 45, 49, 55, 56, 58, 61, 66, 74, 75, 77, 82, 87, 88, 89, 98, 99],
[0, 2, 4, 6, 8, 10, 12, 21, 28, 29, 36, 37, 39, 4