UNPKG

bigint

Version:

Arbitrary-precision integer arithmetic using libgmp

206 lines (190 loc) 7.95 kB
var test = require('tap').test; var bigint = require('../'); test('add', function (t) { for (var i = -10; i < 10; i++) { for (var j = -10; j < 10; j++) { var is = i.toString(); var js = j.toString(); var ks = (i + j).toString(); t.same(bigint(i).add(j).toString(), ks); t.same(bigint(i).add(js).toString(), ks); t.same(bigint(i).add(bigint(j)).toString(), ks); t.same(bigint.add(i, j).toString(), ks); } } t.same( bigint( '201781752444966478956292456789265633588628356858680927185287861892' + '9889675589272409635031813235465496971529430565627918846694860512' + '1492948268400884893722767401972695174353441' ).add( '939769862972759638577945343130228368606420083646071622223953046277' + '3784500359975110887672142614667937014937371109558223563373329424' + '0624814097369771481147215472578762824607080' ).toString(), '1141551615417726117534237799919494002195048440504752549409240908170367' + '41759492475205227039558501334339864668016751861424100681899362117762' + '365770656374869982874551457998960521' ); t.end(); }); test('sub', function (t) { for (var i = -10; i < 10; i++) { for (var j = -10; j < 10; j++) { var is = i.toString(); var js = j.toString(); var ks = (i - j).toString(); t.same(bigint(i).sub(j).toString(), ks); t.same(bigint(i).sub(js).toString(), ks); t.same(bigint(i).sub(bigint(j)).toString(), ks); t.same(bigint.sub(i, j).toString(), ks); } } t.same( bigint( '635849762218952604062459342660379446997761295162166888134051068531' + '9813941775949841573516110003093332652267534768664621969514455380' + '8051168706779408804756208386011014197185296' ).sub( '757617343536280696839135295661092954931163607913400460585109207644' + '7966483882748233585856350085641718822741649072106343655764769889' + '6399869016678013515043471880323279258685478' ).toString(), '-121767581317328092776675953000713507933402312751233572451058139112815' + '25421067983920123402400825483861704741143034417216862503145088348700' + '309898604710287263494312265061500182' ); t.end(); }); test('mul', function (t) { for (var i = -10; i < 10; i++) { for (var j = -10; j < 10; j++) { var is = i.toString(); var js = j.toString(); var ks = (i * j).toString(); t.same(bigint(i).mul(j).toString(), ks); t.same(bigint(i).mul(js).toString(), ks); t.same(bigint(i).mul(bigint(j)).toString(), ks); t.same(bigint.mul(i, j).toString(), ks); } } t.same( bigint( '433593290010590489671135819286259593426549306666324008679782084292' + '2446494189019075159822930571858728009485237489829138626896756141' + '8738958337632249177044975686477011571044266' ).mul( '127790264841901718791915669264129510947625523373763053776083279450' + '3886212911067061184379695097643279217271150419129022856601771338' + '794256383410400076210073482253089544155377' ).toString(), '5540900136412485758752141142221047463857522755277604708501015732755989' + '17659432099233635577634197309727815375309484297883528869192732141328' + '99346769031695550850320602049507618052164677667378189154076988316301' + '23719953859959804490669091769150047414629675184805332001182298088891' + '58079529848220802017396422115936618644438110463469902675126288489182' + '82' ); t.same( bigint('10000000000000000000000000000').mul(-123).toString(), '-1230000000000000000000000000000' ); t.end(); }); test('div', function (t) { for (var i = -10; i < 10; i++) { for (var j = -10; j < 10; j++) { var is = i.toString(); var js = j.toString(); var ks = Math.floor(i / j).toString(); if (ks.match(/^-?\d+$/)) { // ignore exceptions t.same(bigint(i).div(j).toString(), ks); t.same(bigint(i).div(js).toString(), ks); t.same(bigint(i).div(bigint(j)).toString(), ks); t.same(bigint.div(i, j).toString(), ks); } } } t.same( bigint( '433593290010590489671135819286259593426549306666324008679782084292' + '2446494189019075159822930571858728009485237489829138626896756141' + '8738958337632249177044975686477011571044266' ).div( '127790264841901718791915669264129510947625523373763053776083279450' + '3886212911067061184379695097643279217271150419129022856601771338' + '794256383410400076210073482253089544155377' ).toString(), '33' ); t.end(); }); test('abs', function (t) { t.same( bigint( '433593290010590489671135819286259593426549306666324008679782084292' + '2446494189019075159822930571858728009485237489829138626896756141' + '8738958337632249177044975686477011571044266' ).abs().toString(), '4335932900105904896711358192862595934265493066663240086797820842922446' + '49418901907515982293057185872800948523748982913862689675614187389583' + '37632249177044975686477011571044266' ); t.same( bigint( '-43359329001059048967113581928625959342654930666632400867978208429' + '2244649418901907515982293057185872800948523748982913862689675614' + '18738958337632249177044975686477011571044266' ).abs().toString(), '4335932900105904896711358192862595934265493066663240086797820842922446' + '49418901907515982293057185872800948523748982913862689675614187389583' + '37632249177044975686477011571044266' ); t.end(); }); test('neg', function (t) { t.same( bigint( '433593290010590489671135819286259593426549306666324008679782084292' + '2446494189019075159822930571858728009485237489829138626896756141' + '8738958337632249177044975686477011571044266' ).neg().toString(), '-433593290010590489671135819286259593426549306666324008679782084292244' + '64941890190751598229305718587280094852374898291386268967561418738958' + '337632249177044975686477011571044266' ); t.same( bigint( '-43359329001059048967113581928625959342654930666632400867978208429' + '2244649418901907515982293057185872800948523748982913862689675614' + '18738958337632249177044975686477011571044266' ).neg().toString(), '4335932900105904896711358192862595934265493066663240086797820842922446' + '49418901907515982293057185872800948523748982913862689675614187389583' + '37632249177044975686477011571044266' ); t.end(); }); test('mod', function (t) { for (var i = 0; i < 10; i++) { for (var j = 0; j < 10; j++) { var is = i.toString(); var js = j.toString(); if (!isNaN(i % j)) { var ks = (i % j).toString(); t.same(bigint(i).mod(j).toString(), ks); t.same(bigint(i).mod(js).toString(), ks); t.same(bigint(i).mod(bigint(j)).toString(), ks); t.same(bigint.mod(i, j).toString(), ks); } } } t.same( bigint('486541542410442549118519277483401413') .mod('1802185856709793916115771381388554') .toString() , '1753546955507985683376775889880387' ); t.end(); });