• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1if (typeof T === 'undefined') require('../setup');
2
3T('config', function () {
4
5  var MAX_DIGITS = 1e9;
6  var EXP_LIMIT = 9e15;
7
8  var t = function (actual) {
9    T.assert(actual);
10  }
11
12  var tx = function (fn, msg) {
13    T.assertException(fn, msg);
14  }
15
16  /*
17    precision  {number} [1, MAX_DIGITS]
18    rounding   {number} [0, 8]
19    toExpNeg   {number} [-EXP_LIMIT, 0]
20    toExpPos   {number} [0, EXP_LIMIT]
21    maxE       {number} [0, EXP_LIMIT]
22    minE       {number} [-EXP_LIMIT, 0]
23    modulo     {number} [0, 9]
24    crypto     {boolean|number} {true, false, 1, 0}
25  */
26
27  t(Decimal.config({}) === Decimal);
28
29  tx(function () {Decimal.config()}, "config()");
30  tx(function () {Decimal.config(null)}, "config(null)");
31  tx(function () {Decimal.config(undefined)}, "config(undefined)");
32  tx(function () {Decimal.config(0)}, "config(0)");
33  tx(function () {Decimal.config('')}, "config('')");
34  tx(function () {Decimal.config('hi')}, "config('hi')");
35  tx(function () {Decimal.config('123')}, "config('123')");
36
37  Decimal.config({
38    precision: 20,
39    rounding: 4,
40    toExpNeg: -7,
41    toExpPos: 21,
42    minE: -9e15,
43    maxE: 9e15,
44    crypto: false,
45    modulo: 1
46  });
47
48  t(Decimal.precision === 20);
49  t(Decimal.rounding === 4);
50  t(Decimal.toExpNeg === -7);
51  t(Decimal.toExpPos === 21);
52  t(Decimal.minE === -9e15);
53  t(Decimal.maxE === 9e15);
54  t(Decimal.crypto === false);
55  t(Decimal.modulo === 1);
56
57  Decimal.config({
58    precision: 40,
59    rounding : 4,
60    toExpNeg: -1000,
61    toExpPos: 1000,
62    minE: -1e9,
63    maxE: 1e9,
64    //crypto: true,    // requires crypto object
65    modulo: 4
66  });
67
68  t(Decimal.precision === 40);
69  t(Decimal.rounding === 4);
70  t(Decimal.toExpNeg === -1000);
71  t(Decimal.toExpPos === 1000);
72  t(Decimal.minE === -1e9);
73  t(Decimal.maxE === 1e9);
74  //t(Decimal.crypto === true);    // requires crypto object
75  t(Decimal.modulo === 4);
76
77  Decimal.config({
78    toExpNeg: -7,
79    toExpPos: 21,
80    minE: -324,
81    maxE: 308
82  });
83
84  t(Decimal.toExpNeg === -7);
85  t(Decimal.toExpPos === 21);
86  t(Decimal.minE === -324);
87  t(Decimal.maxE === 308);
88
89  // precision
90
91  t = function (expected, obj) {
92    Decimal.config(obj);
93    T.assertEqual(expected, Decimal.precision);
94  }
95
96  t(1, {precision: 1});
97  t(1, {precision: void 0});
98  t(20, {precision: 20});
99  t(300000,{precision: 300000});
100  t(4e+8, {precision: 4e8});
101  t(1e9, {precision: 1e9});
102  t(MAX_DIGITS, {precision: MAX_DIGITS});
103
104  tx(function () {Decimal.config({precision: 0})}, "precision: 0");
105  tx(function () {Decimal.config({precision: MAX_DIGITS + 1})}, "precision: MAX_DIGITS + 1");
106  tx(function () {Decimal.config({precision: MAX_DIGITS + 0.1})}, "precision: MAX_DIGITS + 0.1");
107  tx(function () {Decimal.config({precision: '0'})}, "precision: '0'");
108  tx(function () {Decimal.config({precision: '1'})}, "precision: '1'");
109  tx(function () {Decimal.config({precision: '123456789'})}, "precision: '123456789'");
110  tx(function () {Decimal.config({precision: -1})}, "precision: -1");
111  tx(function () {Decimal.config({precision: 0.1})}, "precision: 0.1");
112  tx(function () {Decimal.config({precision: 1.1})}, "precision: 1.1");
113  tx(function () {Decimal.config({precision: -1.1})}, "precision: -1.1");
114  tx(function () {Decimal.config({precision: 8.1})}, "precision: 8.1");
115  tx(function () {Decimal.config({precision: 1e+9 + 1})}, "precision: 1e9 + 1");
116  tx(function () {Decimal.config({precision: []})}, "precision: []");
117  tx(function () {Decimal.config({precision: {}})}, "precision: {}");
118  tx(function () {Decimal.config({precision: ''})}, "precision: ''");
119  tx(function () {Decimal.config({precision: 'hi'})}, "precision: 'hi'");
120  tx(function () {Decimal.config({precision: '1e+9'})}, "precision: '1e+9'");
121  tx(function () {Decimal.config({precision: null})}, "precision: null");
122  tx(function () {Decimal.config({precision: NaN})}, "precision: NaN");
123  tx(function () {Decimal.config({precision: Infinity})}, "precision: Infinity");
124
125  t(MAX_DIGITS, {precision: void 0});
126
127  // rounding
128
129  t = function (expected, obj) {
130    Decimal.config(obj);
131    T.assertEqual(expected, Decimal.rounding);
132  }
133
134  t(4, {rounding: void 0});
135  t(0, {rounding: 0});
136  t(1, {rounding: 1});
137  t(2, {rounding: 2});
138  t(3, {rounding: 3});
139  t(4, {rounding: 4});
140  t(5, {rounding: 5});
141  t(6, {rounding: 6});
142  t(7, {rounding: 7});
143  t(8, {rounding: 8});
144
145  tx(function () {Decimal.config({rounding: -1})}, "rounding : -1");
146  tx(function () {Decimal.config({rounding: 0.1})}, "rounding : 0.1");
147  tx(function () {Decimal.config({rounding: 8.1})}, "rounding : 8.1");
148  tx(function () {Decimal.config({rounding: 9})}, "rounding : 9");
149  tx(function () {Decimal.config({rounding: '0'})}, "rounding: '0'");
150  tx(function () {Decimal.config({rounding: '1'})}, "rounding: '1'");
151  tx(function () {Decimal.config({rounding: '123456789'})}, "rounding: '123456789'");
152  tx(function () {Decimal.config({rounding: 1.1})}, "rounding : 1.1");
153  tx(function () {Decimal.config({rounding: -1.1})}, "rounding : -1.1");
154  tx(function () {Decimal.config({rounding: 11})}, "rounding : 11");
155  tx(function () {Decimal.config({rounding: []})}, "rounding : []");
156  tx(function () {Decimal.config({rounding: {}})}, "rounding : {}");
157  tx(function () {Decimal.config({rounding: ''})}, "rounding : ''");
158  tx(function () {Decimal.config({rounding: 'hi'})}, "rounding : 'hi'");
159  tx(function () {Decimal.config({rounding: null})}, "rounding : null");
160  tx(function () {Decimal.config({rounding: NaN})}, "rounding : NaN");
161  tx(function () {Decimal.config({rounding: Infinity})}, "rounding : Infinity");
162
163  t(8, {rounding: void 0});
164
165  // toExpNeg
166
167  t = function (expected, obj) {
168    Decimal.config(obj);
169    T.assertEqual(expected, Decimal.toExpNeg);
170  }
171
172  t(-7, {toExpNeg: void 0});
173  t(0, {toExpNeg: 0});
174  t(-1, {toExpNeg: -1});
175  t(-999, {toExpNeg: -999});
176  t(-5675367, {toExpNeg: -5675367});
177  t(-98770170790791, {toExpNeg: -98770170790791});
178  t(-EXP_LIMIT, {toExpNeg: -EXP_LIMIT});
179
180  tx(function () {Decimal.config({toExpNeg: -EXP_LIMIT - 1})}, "-EXP_LIMIT - 1");
181  tx(function () {Decimal.config({toExpNeg: '-7'})}, "toExpNeg: '-7'");
182  tx(function () {Decimal.config({toExpNeg: -0.1})}, "toExpNeg: -0.1");
183  tx(function () {Decimal.config({toExpNeg: 0.1})}, "toExpNeg: 0.1");
184  tx(function () {Decimal.config({toExpNeg: 1})}, "toExpNeg: 1");
185  tx(function () {Decimal.config({toExpNeg: -Infinity})}, "toExpNeg: -Infinity");
186  tx(function () {Decimal.config({toExpNeg: NaN})}, "toExpNeg: NaN");
187  tx(function () {Decimal.config({toExpNeg: null})}, "toExpNeg: null");
188  tx(function () {Decimal.config({toExpNeg: {}})}, "toExpNeg: {}");
189
190  t(-EXP_LIMIT, {toExpNeg: void 0});
191
192  // toExpPos
193
194  t = function (expected, obj) {
195    Decimal.config(obj);
196    T.assertEqual(expected, Decimal.toExpPos);
197  }
198
199  t(21, {toExpPos: void 0});
200  t(0, {toExpPos: 0});
201  t(1, {toExpPos: 1});
202  t(999, {toExpPos: 999});
203  t(5675367, {toExpPos: 5675367});
204  t(98770170790791, {toExpPos: 98770170790791});
205  t(EXP_LIMIT, {toExpPos: EXP_LIMIT});
206
207  tx(function () {Decimal.config({toExpPos: EXP_LIMIT + 1})}, "EXP_LIMIT + 1");
208  tx(function () {Decimal.config({toExpPos: '21'})}, "toExpPos: '21'");
209  tx(function () {Decimal.config({toExpPos: -0.1})}, "toExpPos: -0.1");
210  tx(function () {Decimal.config({toExpPos: 0.1})}, "toExpPos: 0.1");
211  tx(function () {Decimal.config({toExpPos: -1})}, "toExpPos: -1");
212  tx(function () {Decimal.config({toExpPos: Infinity})}, "toExpPos: Infinity");
213  tx(function () {Decimal.config({toExpPos: NaN})}, "toExpPos: NaN");
214  tx(function () {Decimal.config({toExpPos: null})}, "toExpPos: null");
215  tx(function () {Decimal.config({toExpPos: {}})}, "toExpPos: {}");
216
217  t(EXP_LIMIT, {toExpPos: void 0});
218
219  // maxE
220
221  t = function (expected, obj) {
222    Decimal.config(obj);
223    T.assertEqual(expected, Decimal.maxE);
224  }
225
226  t(308, {maxE: void 0});
227  t(0, {maxE: 0});
228  t(1, {maxE: 1});
229  t(999, {maxE: 999});
230  t(5675367, {maxE: 5675367});
231  t(98770170790791, {maxE: 98770170790791});
232  t(EXP_LIMIT, {maxE: EXP_LIMIT});
233
234  tx(function () {Decimal.config({maxE: EXP_LIMIT + 1})}, "EXP_LIMIT + 1");
235  tx(function () {Decimal.config({maxE: '308'})}, "maxE: '308'");
236  tx(function () {Decimal.config({maxE: -0.1})}, "maxE: -0.1");
237  tx(function () {Decimal.config({maxE: 0.1})}, "maxE: 0.1");
238  tx(function () {Decimal.config({maxE: -1})}, "maxE: -1");
239  tx(function () {Decimal.config({maxE: Infinity})}, "maxE: Infinity");
240  tx(function () {Decimal.config({maxE: NaN})}, "maxE: NaN");
241  tx(function () {Decimal.config({maxE: null})}, "maxE: null");
242  tx(function () {Decimal.config({maxE: {}})}, "maxE: {}");
243
244  t(EXP_LIMIT, {maxE: void 0});
245
246  // minE
247
248  t = function (expected, obj) {
249    Decimal.config(obj);
250    T.assertEqual(expected, Decimal.minE);
251  }
252
253  t(-324, {minE: void 0});
254  t(0, {minE: 0});
255  t(-1, {minE: -1});
256  t(-999, {minE: -999});
257  t(-5675367, {minE: -5675367});
258  t(-98770170790791, {minE: -98770170790791});
259  t(-EXP_LIMIT, {minE: -EXP_LIMIT});
260
261  tx(function () {Decimal.config({minE: -EXP_LIMIT - 1})}, "-EXP_LIMIT - 1");
262  tx(function () {Decimal.config({minE: '-324'})}, "minE: '-324'");
263  tx(function () {Decimal.config({minE: -0.1})}, "minE: -0.1");
264  tx(function () {Decimal.config({minE: 0.1})}, "minE: 0.1");
265  tx(function () {Decimal.config({minE: 1})}, "minE: 1");
266  tx(function () {Decimal.config({minE: -Infinity})}, "minE: -Infinity");
267  tx(function () {Decimal.config({minE: NaN})}, "minE: NaN");
268  tx(function () {Decimal.config({minE: null})}, "minE: null");
269  tx(function () {Decimal.config({minE: {}})}, "minE: {}");
270
271  t(-EXP_LIMIT, {minE: void 0});
272
273  // crypto
274
275   t = function (expected, obj) {
276    Decimal.config(obj);
277    T.assertEqual(expected, Decimal.crypto);
278  }
279
280  t(false, {crypto: void 0});
281  t(false, {crypto: 0});
282  //t(true, {crypto: 1});    // requires crypto object
283  t(false, {crypto: false});
284  //t(true, {crypto: true});    // requires crypto object
285
286  tx(function () {Decimal.config({crypto: 'hiya'})}, "crypto: 'hiya'");
287  tx(function () {Decimal.config({crypto: 'true'})}, "crypto: 'true'");
288  tx(function () {Decimal.config({crypto: 'false'})}, "crypto: 'false'");
289  tx(function () {Decimal.config({crypto: '0'})}, "crypto: '0'");
290  tx(function () {Decimal.config({crypto: '1'})}, "crypto: '1'");
291  tx(function () {Decimal.config({crypto: -1})}, "crypto: -1");
292  tx(function () {Decimal.config({crypto: 0.1})}, "crypto: 0.1");
293  tx(function () {Decimal.config({crypto: 1.1})}, "crypto: 1.1");
294  tx(function () {Decimal.config({crypto: []})}, "crypto: []");
295  tx(function () {Decimal.config({crypto: {}})}, "crypto: {}");
296  tx(function () {Decimal.config({crypto: ''})}, "crypto: ''");
297  tx(function () {Decimal.config({crypto: NaN})}, "crypto: NaN");
298  tx(function () {Decimal.config({crypto: Infinity})}, "crypto: Infinity");
299
300  T.assertEqual(false, Decimal.crypto);
301
302  // modulo
303
304  t = function (expected, obj) {
305    Decimal.config(obj);
306    T.assertEqual(expected, Decimal.modulo);
307  }
308
309  t(4, {modulo: void 0});
310  t(0, {modulo: 0});
311  t(1, {modulo: 1});
312  t(2, {modulo: 2});
313  t(3, {modulo: 3});
314  t(4, {modulo: 4});
315  t(5, {modulo: 5});
316  t(6, {modulo: 6});
317  t(7, {modulo: 7});
318  t(8, {modulo: 8});
319  t(9, {modulo: 9});
320
321  tx(function () {Decimal.config({modulo: -1})}, "modulo: -1");
322  tx(function () {Decimal.config({modulo: 0.1})}, "modulo: 0.1");
323  tx(function () {Decimal.config({modulo: 9.1})}, "modulo: 9.1");
324  tx(function () {Decimal.config({modulo: '0'})}, "modulo: '0'");
325  tx(function () {Decimal.config({modulo: '1'})}, "modulo: '1'");
326  tx(function () {Decimal.config({modulo: 1.1})}, "modulo: 1.1");
327  tx(function () {Decimal.config({modulo: -1.1})}, "modulo: -1.1");
328  tx(function () {Decimal.config({modulo: 10})}, "modulo: 10");
329  tx(function () {Decimal.config({modulo: -11})}, "modulo: -11");
330  tx(function () {Decimal.config({modulo: []})}, "modulo: []");
331  tx(function () {Decimal.config({modulo: {}})}, "modulo: {}");
332  tx(function () {Decimal.config({modulo: ''})}, "modulo: ''");
333  tx(function () {Decimal.config({modulo: ' '})}, "modulo: '  '");
334  tx(function () {Decimal.config({modulo: 'hi'})}, "modulo: 'hi'");
335  tx(function () {Decimal.config({modulo: null})}, "modulo: null");
336  tx(function () {Decimal.config({modulo: NaN})}, "modulo: NaN");
337  tx(function () {Decimal.config({modulo: Infinity})}, "modulo: Infinity");
338
339  t(9, {modulo: void 0});
340
341  // defaults
342
343  t = function (actual) {
344    T.assert(actual);
345  }
346
347  Decimal.config({
348    precision: 100,
349    rounding: 2,
350    toExpNeg: -100,
351    toExpPos: 200,
352  });
353
354  t(Decimal.precision === 100);
355
356  Decimal.config({ defaults: true });
357
358  t(Decimal.precision === 20);
359  t(Decimal.rounding === 4);
360  t(Decimal.toExpNeg === -7);
361  t(Decimal.toExpPos === 21);
362  t(Decimal.defaults === undefined);
363
364  Decimal.rounding = 3;
365
366  Decimal.config({ precision: 50, defaults: true });
367
368  t(Decimal.precision === 50);
369  t(Decimal.rounding === 4);
370
371  // Decimal.set is an alias for Decimal.config
372  T.assertEqual(Decimal.set, Decimal.config);
373});
374