shift.js
1 var count = (function shift(BigNumber) { 2 var start = +new Date(), 3 log, 4 error, 5 undefined, 6 passed = 0, 7 total = 0; 8 9 if (typeof window === 'undefined') { 10 log = console.log; 11 error = console.error; 12 } else { 13 log = function (str) { document.body.innerHTML += str.replace('\n', '<br>') }; 14 error = function (str) { document.body.innerHTML += '<div style="color: red">' + 15 str.replace('\n', '<br>') + '</div>' }; 16 } 17 18 if (!BigNumber && typeof require === 'function') BigNumber = require('../bignumber.js'); 19 20 function assert(expected, actual) { 21 total++; 22 if (expected !== actual) { 23 error('\n Test number: ' + total + ' failed'); 24 error(' Expected: ' + expected); 25 error(' Actual: ' + actual); 26 //process.exit(); 27 } else { 28 passed++; 29 //log('\n Expected and actual: ' + actual); 30 } 31 } 32 33 function assertException(func, message) { 34 var actual; 35 total++; 36 try { 37 func(); 38 } catch (e) { 39 actual = e; 40 } 41 if (actual && actual.name == 'BigNumber Error') { 42 passed++; 43 //log('\n Expected and actual: ' + actual); 44 } else { 45 error('\n Test number: ' + total + ' failed'); 46 error('\n Expected: ' + message + ' to raise a BigNumber Error.'); 47 error(' Actual: ' + (actual || 'no exception')); 48 //process.exit(); 49 } 50 } 51 52 function T(expected, n, k) { 53 assert(String(expected), String(new BigNumber(n).shift(k))); 54 } 55 56 function isMinusZero(n) { 57 return n.toString() === '0' && n.s == -1; 58 } 59 60 log('\n Testing shift...'); 61 62 BigNumber.config({ 63 DECIMAL_PLACES: 20, 64 ROUNDING_MODE: 4, 65 EXPONENTIAL_AT: [-7, 21], 66 RANGE: 1e9, 67 ERRORS: false, 68 POW_PRECISION: 0 69 }); 70 71 T(0, 0, 0); 72 T(10, 1, 1); 73 T(0.1, 1, -1); 74 T(200, 2, 2); 75 T(2e+31, 2, 31); 76 T(0.02, 2, -2); 77 T(0.0002, 2, -4); 78 T(1e+100, 1, 100); 79 T(9999990, 9999.99, 3); 80 81 T(2, 2, NaN); 82 T(2435.43543, 2435.43543, NaN); 83 T(Infinity, Infinity, NaN); 84 T(-Infinity, -Infinity, NaN); 85 T(NaN, NaN, NaN); 86 87 T(NaN, NaN, 0); 88 T(NaN, NaN, -1); 89 T(NaN, NaN, 1); 90 T(NaN, NaN, 2.2); 91 T(NaN, NaN, -2.2); 92 T(NaN, NaN, Infinity); 93 T(NaN, NaN, -Infinity); 94 95 T(Infinity, Infinity, 0); 96 T(-Infinity, -Infinity, -1); 97 T(Infinity, Infinity, 1); 98 T(-Infinity, -Infinity, 2.2); 99 T(Infinity, Infinity, -2.2); 100 T(Infinity, Infinity, Infinity); 101 T(-Infinity, -Infinity, -Infinity); 102 T(-Infinity, -Infinity, Infinity); 103 T(Infinity, Infinity, -Infinity); 104 T(Infinity, 1, Infinity); 105 T(-Infinity, -1, Infinity); 106 T(Infinity, 0.1, Infinity); 107 T(-Infinity, -0.1, Infinity); 108 T(Infinity, 1.1, Infinity); 109 T(-Infinity, -1.1, Infinity); 110 T(Infinity, 2, Infinity); 111 T(-Infinity, -2, Infinity); 112 T(Infinity, 2e-45, Infinity); 113 T(-Infinity, -1e+300, Infinity); 114 T(Infinity, 0.999, Infinity); 115 116 T(0, 0, 1000); 117 T(0, 0, NaN); 118 T(-0, -0, NaN); 119 T(0, 0, Infinity); 120 T(0, 0, -Infinity); 121 T(0, 1, -Infinity); 122 T(0, 2e-45, -Infinity); 123 T(0, 0.1, -Infinity); 124 T(0, 2, -Infinity); 125 T(0, 0, 2); 126 T(0, 0, -2); 127 128 assert(false, isMinusZero(new BigNumber(0).shift(Infinity))); 129 assert(false, isMinusZero(new BigNumber(0).shift(-Infinity))); 130 assert(true, isMinusZero(new BigNumber(-0).shift(Infinity))); 131 assert(true, isMinusZero(new BigNumber(-0).shift(-Infinity))); 132 assert(true, isMinusZero(new BigNumber(-0.1).shift(-Infinity))); 133 assert(true, isMinusZero(new BigNumber(-1).shift(-Infinity))); 134 assert(true, isMinusZero(new BigNumber(-2).shift(-Infinity))); 135 assert(true, isMinusZero(new BigNumber(-1e+300).shift(-Infinity))); 136 assert(false, isMinusZero(new BigNumber(0).shift(0))); 137 assert(true, isMinusZero(new BigNumber(-0).shift(0))); 138 assert(false, isMinusZero(new BigNumber(0).shift(-0))); 139 assert(true, isMinusZero(new BigNumber(-0).shift(-0))); 140 assert(false, isMinusZero(new BigNumber(0).shift(1000))); 141 assert(false, isMinusZero(new BigNumber(0).shift(NaN))); 142 assert(true, isMinusZero(new BigNumber(-0).shift(NaN))); 143 assert(false, isMinusZero(new BigNumber(2e-45).shift(-Infinity))); 144 assert(true, isMinusZero(new BigNumber(-2e-45).shift(-Infinity))); 145 146 T(2, 2, 0); 147 T(2, 2, null); 148 T(2, 2, undefined); 149 T(2, 2, NaN); 150 T(2, 2, 'erger'); 151 T(2, 2, {}); 152 T(2, 2, []); 153 154 T('1e+1000000', 1, 1e6) 155 T(1, '1e-1000000', 1e6) 156 T('9.82736534568327e+21', '9827365.34568327', ' 1.5e+1 '); 157 T('0.0898086057643523405623480756380247658237465999999', '0.000000000898086057643523405623480756380247658237465999999', ' 87365e-4 '); 158 T('2.34543534545e-2394335', '2.34543534545e-2394323', ' -12 '); 159 T(Infinity, 0.000345345, 1e200); 160 T(0, 0.000345345, -1e200); 161 T(0.000345345, 0.000345345, -1e-2); 162 T(0.99, 0.99, 1e-9); 163 T('9.9e+999999999', 0.99, 1e+9); 164 165 BigNumber.config({ ERRORS: true }); 166 167 assertException(function () {new BigNumber('12.345').shift(true)}, ".shift(true)"); 168 assertException(function () {new BigNumber('12.345').shift(false)}, ".shift(false)"); 169 assertException(function () {new BigNumber('12.345').shift([])}, ".shift([])"); 170 assertException(function () {new BigNumber('12.345').shift({})}, ".shift({})"); 171 assertException(function () {new BigNumber('12.345').shift('')}, ".shift('')"); 172 assertException(function () {new BigNumber('12.345').shift(' ')}, ".shift(' ')"); 173 assertException(function () {new BigNumber('12.345').shift('4e')}, ".shift('4e')"); 174 assertException(function () {new BigNumber('12.345').shift('hello')}, ".shift('hello')"); 175 assertException(function () {new BigNumber('12.345').shift('\t')}, ".shift('\t')"); 176 assertException(function () {new BigNumber('12.345').shift(new Date)}, ".shift(new Date)"); 177 assertException(function () {new BigNumber('12.345').shift(new RegExp)}, ".shift(new RegExp)"); 178 assertException(function () {new BigNumber('12.345').shift(function (){})}, ".shift(function (){})"); 179 180 T('3.45345e+196', 0.000345345, 200); 181 T('3.45345e-14', 0.000345345, ' -1e1'); 182 183 log('\n ' + passed + ' of ' + total + ' tests passed in ' + (+new Date() - start) + ' ms \n'); 184 return [passed, total]; 185 })(this.BigNumber); 186 if (typeof module !== 'undefined' && module.exports) module.exports = count;