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