/ test / neg.js
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;