neg.js
1 var count = (function neg(BigNumber) { 2 var start = +new Date(), 3 log, 4 error, 5 passed = 0, 6 total = 0; 7 8 if (typeof window === 'undefined') { 9 log = console.log; 10 error = console.error; 11 } else { 12 log = function (str) { document.body.innerHTML += str.replace('\n', '<br>') }; 13 error = function (str) { document.body.innerHTML += '<div style="color: red">' + 14 str.replace('\n', '<br>') + '</div>' }; 15 } 16 17 if (!BigNumber && typeof require === 'function') BigNumber = require('../bignumber'); 18 19 function assert(expected, actual) { 20 total++; 21 if (expected !== actual) { 22 error('\n Test number: ' + total + ' failed'); 23 error(' Expected: ' + expected); 24 error(' Actual: ' + actual); 25 //process.exit(); 26 } 27 else { 28 passed++; 29 //log('\n Expected and actual: ' + actual); 30 } 31 } 32 33 function T(expected, value){ 34 assert(String(expected), new BigNumber(value).neg().toString()); 35 } 36 37 function isMinusZero(n) { 38 return n.toString() === '0' && n.s == -1; 39 } 40 41 log('\n Testing neg...'); 42 43 BigNumber.config({ 44 DECIMAL_PLACES: 20, 45 ROUNDING_MODE: 4, 46 ERRORS: true, 47 RANGE: 1E9, 48 EXPONENTIAL_AT: [-7, 21] 49 }); 50 51 T(-4, 4); 52 T(-2147483648, 2147483648); 53 T(-0.25, 0.25); 54 T(-0.0625, 0.0625); 55 T(-1, 1); 56 T(1, -1); 57 T(0, 0); 58 T(NaN, NaN); 59 T(-Infinity, Infinity); 60 T(-Infinity, +Infinity); 61 T(Infinity, -Infinity); 62 T(+Infinity, -Infinity); 63 64 T('0', '0'); 65 T('-238', '238'); 66 T('1.3e-11', '-0.000000000013'); 67 T('-33.1', '33.1'); 68 T('2.61', '-2.61'); 69 T('-4', '4.0'); 70 T('-5.8', '5.8'); 71 T('-3.52e-7', '0.000000352'); 72 T('190', '-190'); 73 T('4.47', '-4.47'); 74 T('6.9525e-12', '-0.0000000000069525'); 75 T('1.3', '-1.3'); 76 T('-6.21', '6.21'); 77 T('2', '-2'); 78 T('-1', '1'); 79 T('147.857', '-147.857'); 80 T('-26.517', '26.517'); 81 T('-3', '3'); 82 T('5', '-5'); 83 T('204', '-204'); 84 T('2.1e-8', '-0.000000021'); 85 T('3.7015e-7', '-0.00000037015'); 86 T('-50.1839', '50.1839'); 87 T('44768.1', '-44768.1'); 88 T('3.8e-15', '-0.0000000000000038'); 89 T('-7.4379', '7.4379'); 90 T('1.5', '-1.5'); 91 T('6.0399', '-6.0399'); 92 T('109.07', '-109.070'); 93 T('1582', '-1582'); 94 T('-772', '772'); 95 T('-6.7824e-14', '0.000000000000067824'); 96 T('-1.819e-8', '0.00000001819'); 97 T('-3e-15', '0.0000000000000030'); 98 T('-424120', '424120'); 99 T('-1814.54', '1814.54'); 100 T('-4.295e-17', '0.00000000000000004295'); 101 T('-5', '5'); 102 T('2152', '-2152'); 103 T('4.6', '-4.6'); 104 T('1.9', '-1.9'); 105 T('-2', '2.0'); 106 T('-0.00036', '0.00036'); 107 T('-0.000006962', '0.000006962'); 108 T('3.6', '-3.6'); 109 T('-1.1495e-14', '0.000000000000011495'); 110 T('-312.4', '312.4'); 111 T('4.3e-10', '-0.00000000043'); 112 T('5', '-5'); 113 T('-1.8911e-8', '0.000000018911'); 114 T('4963.53', '-4963.53'); 115 T('-4.3934e-10', '0.00000000043934'); 116 T('-1.3', '1.30'); 117 T('-1', '1.0'); 118 T('-68.32', '68.32'); 119 T('0.014836', '-0.014836'); 120 T('8', '-8'); 121 T('2.1351', '-2.13510'); 122 T('162224', '-162224'); 123 T('3e-19', '-0.00000000000000000030'); 124 T('0.00004985', '-0.00004985'); 125 T('28.9321', '-28.9321'); 126 T('-2', '2'); 127 T('-16688', '16688'); 128 T('-1', '1'); 129 T('5', '-5'); 130 T('-20', '20.0'); 131 T('-1.9', '1.9'); 132 T('3', '-3'); 133 T('185640', '-185640'); 134 T('-0.0000058', '0.0000058'); 135 T('9.67e-13', '-0.000000000000967'); 136 T('-707.98', '707.98'); 137 T('2.57917', '-2.57917'); 138 T('-1.3', '1.3'); 139 T('-4.2655', '4.2655'); 140 T('-149.6', '149.6'); 141 T('-1.32383', '1.32383'); 142 T('-26.925', '26.925'); 143 T('-0.00013', '0.00013'); 144 T('-6868', '6868'); 145 T('7', '-7'); 146 T('-5e-9', '0.0000000050'); 147 T('3.2555e-16', '-0.00000000000000032555'); 148 T('1.42768e-13', '-0.000000000000142768'); 149 T('11.2962', '-11.2962'); 150 T('3186.7', '-3186.7'); 151 T('-6.9', '6.9'); 152 T('-6.2618e-7', '0.00000062618'); 153 T('8', '-8'); 154 T('-8.04', '8.04'); 155 T('-22', '22'); 156 T('-750.6', '750.6'); 157 T('12.803', '-12.803'); 158 T('-20513.4', '20513.4'); 159 T('114781', '-114781'); 160 T('-16.9046', '16.9046'); 161 T('4.6e-7', '-0.00000046'); 162 T('-31399', '31399'); 163 T('1.04', '-1.04'); 164 T('-51.2544', '51.2544'); 165 T('1.023e-15', '-0.000000000000001023'); 166 T('281', '-281'); 167 T('-128315', '128315'); 168 T('20.2', '-20.2'); 169 T('9', '-9'); 170 T('-10', '10'); 171 T('-1.92262e-17', '0.0000000000000000192262'); 172 T('-0.0023', '0.0023'); 173 T('5', '-5'); 174 T('7', '-7'); 175 T('13.72', '-13.72'); 176 T('98068', '-98068'); 177 T('3.2', '-3.2'); 178 T('1.1', '-1.1'); 179 T('-3.97e-18', '0.000000000000000003970'); 180 T('0.00334824', '-0.00334824'); 181 T('-5.4892e-8', '0.000000054892'); 182 T('-1', '1.0'); 183 T('-2.8135e-8', '0.000000028135'); 184 T('-1.816e-13', '0.0000000000001816'); 185 T('199724', '-199724'); 186 T('-19.4', '19.40'); 187 T('-12.74', '12.74'); 188 T('-2171.8', '2171.8'); 189 T('-2.7', '2.7'); 190 T('1', '-1.0'); 191 T('21779', '-21779'); 192 T('8.9e-12', '-0.0000000000089'); 193 T('-4.51', '4.51'); 194 T('2.6', '-2.6'); 195 T('-0.00016', '0.000160'); 196 T('6', '-6'); 197 T('50.566', '-50.566'); 198 T('-16.2', '16.2'); 199 T('-7.9156e-20', '0.000000000000000000079156'); 200 T('-2262.4', '2262.4'); 201 T('6468.59', '-6468.59'); 202 T('0.077', '-0.077'); 203 T('-465.83', '465.83'); 204 T('-604.59', '604.59'); 205 T('-0.0014917', '0.0014917'); 206 T('-2.8954', '2.8954'); 207 T('1', '-1'); 208 T('1942', '-1942'); 209 T('-182.308', '182.308'); 210 T('-17.8', '17.8'); 211 T('39472.5', '-39472.5'); 212 T('214.21', '-214.21'); 213 T('-40.11', '40.11'); 214 T('-3', '3'); 215 T('141149', '-141149'); 216 T('-8', '8.0'); 217 T('-2.9', '2.9'); 218 T('44.51', '-44.51'); 219 T('-5.3', '5.3'); 220 T('0.05498', '-0.054980'); 221 T('7', '-7'); 222 T('-922', '922.0'); 223 T('-1.5146e-14', '0.000000000000015146'); 224 T('-0.000008117', '0.000008117'); 225 T('1', '-1'); 226 T('5452.81', '-5452.81'); 227 T('751745', '-751745'); 228 T('-2.7', '2.7'); 229 T('5.1', '-5.1'); 230 T('-1', '1'); 231 T('-524124', '524124'); 232 T('-183.5', '183.50'); 233 T('44856.8', '-44856.8'); 234 T('0.00000387', '-0.00000387'); 235 T('-3.0544e-14', '0.000000000000030544'); 236 T('1.3', '-1.3'); 237 T('-0.0019273', '0.0019273'); 238 T('75428', '-75428'); 239 T('-91.7925', '91.7925'); 240 T('44.5', '-44.5'); 241 T('-2', '2'); 242 T('5.3', '-5.3'); 243 T('-57', '57'); 244 T('-2.53e-9', '0.00000000253'); 245 T('18258', '-18258'); 246 T('0.829', '-0.829'); 247 T('-4', '4'); 248 T('-1', '1'); 249 T('10.289', '-10.289'); 250 T('319', '-319'); 251 T('2.4', '-2.4'); 252 T('89.9207', '-89.9207'); 253 T('-9.06122e-17', '0.0000000000000000906122'); 254 T('-102.639', '102.639'); 255 T('948.5', '-948.50'); 256 T('-610.7', '610.7'); 257 T('-1.61', '1.61'); 258 T('-99.042', '99.042'); 259 T('3.0232', '-3.0232'); 260 T('-15', '15'); 261 T('-3.835', '3.835'); 262 T('-7', '7'); 263 T('1', '-1'); 264 T('21.46', '-21.46'); 265 T('2', '-2'); 266 T('-2077.79', '2077.79'); 267 T('-14.7446', '14.7446'); 268 T('-9.11e-12', '0.00000000000911'); 269 T('1.2', '-1.2'); 270 T('-105851', '105851'); 271 T('24.561', '-24.561'); 272 T('780', '-780'); 273 T('3.82122', '-3.82122'); 274 T('9564', '-9564'); 275 T('-13.21', '13.21'); 276 T('25020.5', '-25020.5'); 277 T('-5678.6', '5678.6'); 278 T('1', '-1.0'); 279 T('2.6', '-2.6'); 280 T('9.6e-16', '-0.000000000000000960'); 281 T('12.6', '-12.6'); 282 T('-5', '5'); 283 T('-537', '537'); 284 T('-85', '85'); 285 T('758.15', '-758.15'); 286 T('-67.55', '67.55'); 287 T('-9444', '9444'); 288 T('21.4', '-21.4'); 289 T('2.5', '-2.5'); 290 T('489311', '-489311'); 291 T('6.8', '-6.8'); 292 T('4.29', '-4.29'); 293 T('23982', '-23982.0'); 294 T('-0.0111781', '0.0111781'); 295 T('4.96e-20', '-0.0000000000000000000496'); 296 T('-40.5481', '40.5481'); 297 T('-32.52', '32.52'); 298 T('-7.4', '7.4'); 299 T('1008', '-1008'); 300 T('1.2', '-1.2'); 301 T('-5', '5.0'); 302 T('-2463.4', '2463.4'); 303 T('7.363', '-7.363'); 304 T('2.8', '-2.8'); 305 T('-14498', '14498'); 306 T('201', '-201'); 307 T('3.2', '-3.2'); 308 T('-3.05', '3.05'); 309 T('1.1', '-1.1'); 310 T('-380.4', '380.4'); 311 T('13399', '-13399'); 312 T('-20.44', '20.44'); 313 T('1.6', '-1.6'); 314 T('2.1234e-10', '-0.00000000021234'); 315 T('4404.1', '-4404.1'); 316 T('2.4345', '-2.4345'); 317 T('-117.256', '117.256'); 318 T('-6.025', '6.025'); 319 T('18.43', '-18.43'); 320 T('-47.5', '47.5'); 321 T('45.1', '-45.1'); 322 T('-3806.5', '3806.5'); 323 T('-4.6', '4.6'); 324 T('-1.3', '1.3'); 325 T('-74.6', '74.60'); 326 T('-16.2088', '16.2088'); 327 T('788.6', '-788.6'); 328 T('-0.29', '0.29'); 329 T('1', '-1'); 330 T('-4.058', '4.058'); 331 T('5', '-5.0'); 332 T('0.00612', '-0.00612'); 333 T('-14317', '14317'); 334 T('-1.1801', '1.1801'); 335 T('-32.6', '32.6'); 336 T('57248', '-57248'); 337 T('-103', '103'); 338 T('-1.4', '1.4'); 339 T('228', '-228'); 340 T('92.8', '-92.8'); 341 T('3.46e-17', '-0.0000000000000000346'); 342 T('-15747', '15747'); 343 T('16.36', '-16.360'); 344 T('0.00223', '-0.00223'); 345 T('244', '-244'); 346 T('3.8', '-3.8'); 347 T('-604.2', '604.2'); 348 T('1.03', '-1.03'); 349 T('1487', '-1487'); 350 T('7', '-7'); 351 T('45', '-45.00'); 352 T('2.55374e-10', '-0.000000000255374'); 353 T('3', '-3'); 354 T('-5.5', '5.5'); 355 T('-5.4', '5.4'); 356 T('-9', '9'); 357 T('-1627.2', '1627.2'); 358 T('1.0805e-16', '-0.00000000000000010805'); 359 T('-14.0548', '14.0548'); 360 T('-207137', '207137'); 361 T('3.8', '-3.8'); 362 T('-33.4785', '33.4785'); 363 T('4.28626', '-4.28626'); 364 T('-4', '4'); 365 T('-6', '6'); 366 T('-1', '1'); 367 T('-44.951', '44.951'); 368 T('29.7', '-29.7'); 369 T('-121.17', '121.17'); 370 T('480', '-480'); 371 T('-2.696', '2.696'); 372 T('-3708.62', '3708.62'); 373 T('2.8', '-2.8'); 374 T('17842', '-17842'); 375 T('-3', '3'); 376 T('-2', '2'); 377 T('-1.855', '1.855'); 378 T('246866', '-246866'); 379 T('-0.0022', '0.0022'); 380 T('-1', '1'); 381 T('1283', '-1283'); 382 T('2.1', '-2.1'); 383 T('3.289e-12', '-0.000000000003289'); 384 T('-1656', '1656'); 385 T('3.9', '-3.9'); 386 T('1.12', '-1.12'); 387 T('3.54e-16', '-0.000000000000000354'); 388 T('-0.001123', '0.001123'); 389 T('2.06551e-14', '-0.0000000000000206551'); 390 T('-19319.3', '19319.3'); 391 T('3', '-3'); 392 T('-6', '6'); 393 T('5.747e-17', '-0.00000000000000005747'); 394 T('-1.756', '1.756'); 395 T('2.71004e-15', '-0.00000000000000271004'); 396 T('1.4', '-1.4'); 397 T('-0.0000019', '0.00000190'); 398 T('-6', '6'); 399 T('-31.4', '31.4'); 400 T('1', '-1'); 401 T('-39.954', '39.9540'); 402 T('8.4', '-8.40'); 403 T('5.3382e-17', '-0.0000000000000000533820'); 404 T('8.4', '-8.4'); 405 T('-106', '106'); 406 T('905', '-905'); 407 T('-2030.8', '2030.8'); 408 T('0.19358', '-0.193580'); 409 T('50057.4', '-50057.4'); 410 T('8.0731e-15', '-0.0000000000000080731'); 411 T('2.4', '-2.4'); 412 T('-1', '1'); 413 T('0.026038', '-0.026038'); 414 T('-22', '22'); 415 T('-2.8', '2.8'); 416 T('0.00110001', '-0.00110001'); 417 T('7', '-7'); 418 T('-705', '705'); 419 T('-36046', '36046'); 420 T('2.42', '-2.42'); 421 T('-1.225', '1.225'); 422 T('36.8', '-36.8'); 423 T('6.8926', '-6.8926'); 424 T('163575', '-163575'); 425 T('3.29e-16', '-0.000000000000000329'); 426 T('-3.9612e-20', '0.000000000000000000039612'); 427 T('6.3', '-6.3'); 428 T('1.1', '-1.1'); 429 T('-53', '53'); 430 T('-6.3', '6.3'); 431 T('-3.73', '3.73'); 432 T('5.99e-13', '-0.000000000000599'); 433 T('-0.0453', '0.0453'); 434 T('6.2', '-6.2'); 435 T('5', '-5'); 436 T('4.85599e-7', '-0.000000485599'); 437 T('-6.554e-19', '0.0000000000000000006554'); 438 T('245.2', '-245.20'); 439 T('-12.557', '12.557'); 440 T('8.7', '-8.7'); 441 T('-38.7', '38.7'); 442 T('1.1291', '-1.1291'); 443 T('-3', '3'); 444 T('40533.9', '-40533.9'); 445 T('135.1', '-135.1'); 446 T('-213', '213'); 447 T('-271352', '271352'); 448 T('-159.9', '159.9'); 449 T('-103632', '103632'); 450 T('-0.00000225418', '0.00000225418'); 451 T('-2.1e-16', '0.00000000000000021'); 452 T('14.5', '-14.5'); 453 T('48016', '-48016'); 454 T('282', '-282.0'); 455 T('9.3552e-18', '-0.0000000000000000093552'); 456 T('237', '-237'); 457 T('-21.1', '21.1'); 458 T('2.281', '-2.281'); 459 T('-4.68312', '4.68312'); 460 T('7', '-7'); 461 T('6', '-6'); 462 T('5.3', '-5.3'); 463 T('-681.586', '681.586'); 464 T('-1.59e-16', '0.0000000000000001590'); 465 T('-2.94', '2.94'); 466 T('-1', '1'); 467 T('7.03', '-7.03'); 468 T('5.73608e-13', '-0.000000000000573608'); 469 T('2', '-2'); 470 T('-1.26e-18', '0.00000000000000000126'); 471 T('-1.5e-14', '0.000000000000015'); 472 T('2', '-2'); 473 T('-44', '44'); 474 T('-1.3928', '1.3928'); 475 T('18811.4', '-18811.4'); 476 T('6.6', '-6.6'); 477 T('1.99', '-1.99'); 478 T('-6.6496e-14', '0.000000000000066496'); 479 T('27.184', '-27.184'); 480 T('0.00007614', '-0.00007614'); 481 T('5478', '-5478.0'); 482 T('-30.6432', '30.6432'); 483 T('-108', '108'); 484 T('-1', '1'); 485 T('-61', '61'); 486 T('4', '-4'); 487 T('-0.032192', '0.032192'); 488 T('2.6e-8', '-0.000000026'); 489 490 BigNumber.config({EXPONENTIAL_AT: 0}); 491 492 T('-5.0600621890668482322956892808849303e+20', '5.0600621890668482322956892808849303e+20'); 493 T('7e+0', '-7e+0'); 494 T('-6.1095374220609e+13', '6.1095374220609e+13'); 495 T('9.01e+2', '-9.01e+2'); 496 T('-1.016984074247269470395836690098169093010136836967e+39', '1.016984074247269470395836690098169093010136836967e+39'); 497 T('-1.497639134680472576e+18', '1.497639134680472576e+18'); 498 T('-4.1717657571404248e+16', '4.1717657571404248e+16'); 499 T('8.983272e+1', '-8.983272e+1'); 500 T('-5.308416e+6', '5.308416e+6'); 501 T('-2.09764e+3', '2.09764e+3'); 502 T('-3.83432050166120236679168e+23', '3.83432050166120236679168e+23'); 503 T('-4.096e+3', '4.096e+3'); 504 T('2.679971527468745095582058350756311201706813294321409e+51', '-2.679971527468745095582058350756311201706813294321409e+51'); 505 T('-5.067853299870089529116832768e+2', '5.067853299870089529116832768e+2'); 506 T('-3.48822062687911109850066182676769e+32', '3.48822062687911109850066182676769e+32'); 507 T('-1e+0', '1e+0'); 508 T('4.2773e+0', '-4.2773e+0'); 509 T('5.8169306081172252508071119604378757744768e+12', '-5.8169306081172252508071119604378757744768e+12'); 510 T('-1e+0', '1e+0'); 511 T('1.51655708279450944384385164853883404204414169862685507e+46', '-1.51655708279450944384385164853883404204414169862685507e+46'); 512 T('-8.1e+1', '8.1e+1'); 513 T('-1.296e+3', '1.296e+3'); 514 T('-2.9e+0', '2.9e+0'); 515 T('-1.764e+3', '1.764e+3'); 516 T('9.3418332730097368870513138581415704704611459349313e+49', '-9.3418332730097368870513138581415704704611459349313e+49'); 517 T('-Infinity', Infinity); 518 T('-Infinity', 'Infinity'); 519 T('Infinity', -Infinity); 520 T('Infinity', '-Infinity'); 521 T('NaN', NaN); 522 T('NaN', 'NaN'); 523 524 BigNumber.config({EXPONENTIAL_AT: 1e+9}); 525 526 assert(-1, new BigNumber(2).neg().s); 527 assert(1, new BigNumber(-2).neg().s); 528 assert(null, new BigNumber(NaN).neg().s); 529 assert(null, new BigNumber('-NaN').neg().s); 530 assert(-1, new BigNumber(Infinity).neg().s); 531 assert(1, new BigNumber('-Infinity').neg().s); 532 533 assert(false, isMinusZero(new BigNumber(1).neg())); 534 assert(true, isMinusZero(new BigNumber(0).neg())); 535 assert(true, isMinusZero(new BigNumber(0).neg())); 536 assert(true, isMinusZero(new BigNumber('0.00000').neg())); 537 assert(true, isMinusZero(new BigNumber('+0.0').neg())); 538 assert(false, isMinusZero(new BigNumber(-0).neg())); 539 assert(false, isMinusZero(new BigNumber('-0').neg())); 540 541 log('\n ' + passed + ' of ' + total + ' tests passed in ' + (+new Date() - start) + ' ms \n'); 542 return [passed, total]; 543 })(this.BigNumber); 544 if (typeof module !== 'undefined' && module.exports) module.exports = count;