1
0
mirror of https://github.com/MikeMcl/decimal.js.git synced 2024-10-27 20:34:12 +00:00
MikeMcl_decimal.js/test/modules/config.js
2016-02-04 23:52:10 +00:00

348 lines
12 KiB
JavaScript

if (typeof T === 'undefined') require('../setup');
(function () {
T('config');
var MAX_DIGITS = 1e9;
var EXP_LIMIT = 9e15;
var t = function (actual) {
T.assert(actual);
}
var tx = function (fn, msg) {
T.assertException(fn, msg);
}
/*
precision {number} [1, MAX_DIGITS]
rounding {number} [0, 8]
toExpNeg {number} [-EXP_LIMIT, 0]
toExpPos {number} [0, EXP_LIMIT]
maxE {number} [0, EXP_LIMIT]
minE {number} [-EXP_LIMIT, 0]
modulo {number} [0, 9]
crypto {boolean|number} {true, false, 1, 0}
*/
t(Decimal.config({}) === Decimal);
tx(function () {Decimal.config()}, "config()");
tx(function () {Decimal.config(null)}, "config(null)");
tx(function () {Decimal.config(undefined)}, "config(undefined)");
tx(function () {Decimal.config(0)}, "config(0)");
tx(function () {Decimal.config('')}, "config('')");
tx(function () {Decimal.config('hi')}, "config('hi')");
tx(function () {Decimal.config('123')}, "config('123')");
Decimal.config({
precision: 20,
rounding: 4,
toExpNeg: -7,
toExpPos: 21,
minE: -9e15,
maxE: 9e15,
crypto: false,
modulo: 1
});
t(Decimal.precision === 20);
t(Decimal.rounding === 4);
t(Decimal.toExpNeg === -7);
t(Decimal.toExpPos === 21);
t(Decimal.minE === -9e15);
t(Decimal.maxE === 9e15);
t(Decimal.crypto === false);
t(Decimal.modulo === 1);
Decimal.config({
precision: 40,
rounding : 4,
toExpNeg: -1000,
toExpPos: 1000,
minE: -1e9,
maxE: 1e9,
crypto: true,
modulo: 4
});
t(Decimal.precision === 40);
t(Decimal.rounding === 4);
t(Decimal.toExpNeg === -1000);
t(Decimal.toExpPos === 1000);
t(Decimal.minE === -1e9);
t(Decimal.maxE === 1e9);
t(Decimal.crypto === true || Decimal.crypto === false);
t(Decimal.modulo === 4);
Decimal.config({
toExpNeg: -7,
toExpPos: 21,
minE: -324,
maxE: 308
});
t(Decimal.toExpNeg === -7);
t(Decimal.toExpPos === 21);
t(Decimal.minE === -324);
t(Decimal.maxE === 308);
// precision
t = function (expected, obj) {
Decimal.config(obj);
T.assertEqual(expected, Decimal.precision);
}
t(1, {precision: 1});
t(1, {precision: void 0});
t(20, {precision: 20});
t(300000,{precision: 300000});
t(4e+8, {precision: 4e8});
t(1e9, {precision: 1e9});
t(MAX_DIGITS, {precision: MAX_DIGITS});
tx(function () {Decimal.config({precision: 0})}, "precision: 0");
tx(function () {Decimal.config({precision: MAX_DIGITS + 1})}, "precision: MAX_DIGITS + 1");
tx(function () {Decimal.config({precision: MAX_DIGITS + 0.1})}, "precision: MAX_DIGITS + 0.1");
tx(function () {Decimal.config({precision: '0'})}, "precision: '0'");
tx(function () {Decimal.config({precision: '1'})}, "precision: '1'");
tx(function () {Decimal.config({precision: '123456789'})}, "precision: '123456789'");
tx(function () {Decimal.config({precision: -1})}, "precision: -1");
tx(function () {Decimal.config({precision: 0.1})}, "precision: 0.1");
tx(function () {Decimal.config({precision: 1.1})}, "precision: 1.1");
tx(function () {Decimal.config({precision: -1.1})}, "precision: -1.1");
tx(function () {Decimal.config({precision: 8.1})}, "precision: 8.1");
tx(function () {Decimal.config({precision: 1e+9 + 1})}, "precision: 1e9 + 1");
tx(function () {Decimal.config({precision: []})}, "precision: []");
tx(function () {Decimal.config({precision: {}})}, "precision: {}");
tx(function () {Decimal.config({precision: ''})}, "precision: ''");
tx(function () {Decimal.config({precision: 'hi'})}, "precision: 'hi'");
tx(function () {Decimal.config({precision: '1e+9'})}, "precision: '1e+9'");
tx(function () {Decimal.config({precision: null})}, "precision: null");
tx(function () {Decimal.config({precision: NaN})}, "precision: NaN");
tx(function () {Decimal.config({precision: Infinity})}, "precision: Infinity");
t(MAX_DIGITS, {precision: void 0});
// rounding
t = function (expected, obj) {
Decimal.config(obj);
T.assertEqual(expected, Decimal.rounding);
}
t(4, {rounding: void 0});
t(0, {rounding: 0});
t(1, {rounding: 1});
t(2, {rounding: 2});
t(3, {rounding: 3});
t(4, {rounding: 4});
t(5, {rounding: 5});
t(6, {rounding: 6});
t(7, {rounding: 7});
t(8, {rounding: 8});
tx(function () {Decimal.config({rounding: -1})}, "rounding : -1");
tx(function () {Decimal.config({rounding: 0.1})}, "rounding : 0.1");
tx(function () {Decimal.config({rounding: 8.1})}, "rounding : 8.1");
tx(function () {Decimal.config({rounding: 9})}, "rounding : 9");
tx(function () {Decimal.config({rounding: '0'})}, "rounding: '0'");
tx(function () {Decimal.config({rounding: '1'})}, "rounding: '1'");
tx(function () {Decimal.config({rounding: '123456789'})}, "rounding: '123456789'");
tx(function () {Decimal.config({rounding: 1.1})}, "rounding : 1.1");
tx(function () {Decimal.config({rounding: -1.1})}, "rounding : -1.1");
tx(function () {Decimal.config({rounding: 11})}, "rounding : 11");
tx(function () {Decimal.config({rounding: []})}, "rounding : []");
tx(function () {Decimal.config({rounding: {}})}, "rounding : {}");
tx(function () {Decimal.config({rounding: ''})}, "rounding : ''");
tx(function () {Decimal.config({rounding: 'hi'})}, "rounding : 'hi'");
tx(function () {Decimal.config({rounding: null})}, "rounding : null");
tx(function () {Decimal.config({rounding: NaN})}, "rounding : NaN");
tx(function () {Decimal.config({rounding: Infinity})}, "rounding : Infinity");
t(8, {rounding: void 0});
// toExpNeg
t = function (expected, obj) {
Decimal.config(obj);
T.assertEqual(expected, Decimal.toExpNeg);
}
t(-7, {toExpNeg: void 0});
t(0, {toExpNeg: 0});
t(-1, {toExpNeg: -1});
t(-999, {toExpNeg: -999});
t(-5675367, {toExpNeg: -5675367});
t(-98770170790791, {toExpNeg: -98770170790791});
t(-EXP_LIMIT, {toExpNeg: -EXP_LIMIT});
tx(function () {Decimal.config({toExpNeg: -EXP_LIMIT - 1})}, "-EXP_LIMIT - 1");
tx(function () {Decimal.config({toExpNeg: '-7'})}, "toExpNeg: '-7'");
tx(function () {Decimal.config({toExpNeg: -0.1})}, "toExpNeg: -0.1");
tx(function () {Decimal.config({toExpNeg: 0.1})}, "toExpNeg: 0.1");
tx(function () {Decimal.config({toExpNeg: 1})}, "toExpNeg: 1");
tx(function () {Decimal.config({toExpNeg: -Infinity})}, "toExpNeg: -Infinity");
tx(function () {Decimal.config({toExpNeg: NaN})}, "toExpNeg: NaN");
tx(function () {Decimal.config({toExpNeg: null})}, "toExpNeg: null");
tx(function () {Decimal.config({toExpNeg: {}})}, "toExpNeg: {}");
t(-EXP_LIMIT, {toExpNeg: void 0});
// toExpPos
t = function (expected, obj) {
Decimal.config(obj);
T.assertEqual(expected, Decimal.toExpPos);
}
t(21, {toExpPos: void 0});
t(0, {toExpPos: 0});
t(1, {toExpPos: 1});
t(999, {toExpPos: 999});
t(5675367, {toExpPos: 5675367});
t(98770170790791, {toExpPos: 98770170790791});
t(EXP_LIMIT, {toExpPos: EXP_LIMIT});
tx(function () {Decimal.config({toExpPos: EXP_LIMIT + 1})}, "EXP_LIMIT + 1");
tx(function () {Decimal.config({toExpPos: '21'})}, "toExpPos: '21'");
tx(function () {Decimal.config({toExpPos: -0.1})}, "toExpPos: -0.1");
tx(function () {Decimal.config({toExpPos: 0.1})}, "toExpPos: 0.1");
tx(function () {Decimal.config({toExpPos: -1})}, "toExpPos: -1");
tx(function () {Decimal.config({toExpPos: Infinity})}, "toExpPos: Infinity");
tx(function () {Decimal.config({toExpPos: NaN})}, "toExpPos: NaN");
tx(function () {Decimal.config({toExpPos: null})}, "toExpPos: null");
tx(function () {Decimal.config({toExpPos: {}})}, "toExpPos: {}");
t(EXP_LIMIT, {toExpPos: void 0});
// maxE
t = function (expected, obj) {
Decimal.config(obj);
T.assertEqual(expected, Decimal.maxE);
}
t(308, {maxE: void 0});
t(0, {maxE: 0});
t(1, {maxE: 1});
t(999, {maxE: 999});
t(5675367, {maxE: 5675367});
t(98770170790791, {maxE: 98770170790791});
t(EXP_LIMIT, {maxE: EXP_LIMIT});
tx(function () {Decimal.config({maxE: EXP_LIMIT + 1})}, "EXP_LIMIT + 1");
tx(function () {Decimal.config({maxE: '308'})}, "maxE: '308'");
tx(function () {Decimal.config({maxE: -0.1})}, "maxE: -0.1");
tx(function () {Decimal.config({maxE: 0.1})}, "maxE: 0.1");
tx(function () {Decimal.config({maxE: -1})}, "maxE: -1");
tx(function () {Decimal.config({maxE: Infinity})}, "maxE: Infinity");
tx(function () {Decimal.config({maxE: NaN})}, "maxE: NaN");
tx(function () {Decimal.config({maxE: null})}, "maxE: null");
tx(function () {Decimal.config({maxE: {}})}, "maxE: {}");
t(EXP_LIMIT, {maxE: void 0});
// minE
t = function (expected, obj) {
Decimal.config(obj);
T.assertEqual(expected, Decimal.minE);
}
t(-324, {minE: void 0});
t(0, {minE: 0});
t(-1, {minE: -1});
t(-999, {minE: -999});
t(-5675367, {minE: -5675367});
t(-98770170790791, {minE: -98770170790791});
t(-EXP_LIMIT, {minE: -EXP_LIMIT});
tx(function () {Decimal.config({minE: -EXP_LIMIT - 1})}, "-EXP_LIMIT - 1");
tx(function () {Decimal.config({minE: '-324'})}, "minE: '-324'");
tx(function () {Decimal.config({minE: -0.1})}, "minE: -0.1");
tx(function () {Decimal.config({minE: 0.1})}, "minE: 0.1");
tx(function () {Decimal.config({minE: 1})}, "minE: 1");
tx(function () {Decimal.config({minE: -Infinity})}, "minE: -Infinity");
tx(function () {Decimal.config({minE: NaN})}, "minE: NaN");
tx(function () {Decimal.config({minE: null})}, "minE: null");
tx(function () {Decimal.config({minE: {}})}, "minE: {}");
t(-EXP_LIMIT, {minE: void 0});
// crypto
t = function (expected, obj) {
Decimal.config(obj);
T.assertEqual(expected, Decimal.crypto);
}
// crypto was set true above, but it will have remained false if
// there is no crypto.getRandomValues or crypto.randomBytes.
var cryptoVal = Decimal.crypto;
t(void 0, {crypto: void 0});
t(false, {crypto: 0});
t(cryptoVal, {crypto: 1});
t(false, {crypto: false});
t(cryptoVal, {crypto: true});
tx(function () {Decimal.config({crypto: 'hiya'})}, "crypto: 'hiya'");
tx(function () {Decimal.config({crypto: 'true'})}, "crypto: 'true'");
tx(function () {Decimal.config({crypto: 'false'})}, "crypto: 'false'");
tx(function () {Decimal.config({crypto: '0'})}, "crypto: '0'");
tx(function () {Decimal.config({crypto: '1'})}, "crypto: '1'");
tx(function () {Decimal.config({crypto: -1})}, "crypto: -1");
tx(function () {Decimal.config({crypto: 0.1})}, "crypto: 0.1");
tx(function () {Decimal.config({crypto: 1.1})}, "crypto: 1.1");
tx(function () {Decimal.config({crypto: []})}, "crypto: []");
tx(function () {Decimal.config({crypto: {}})}, "crypto: {}");
tx(function () {Decimal.config({crypto: ''})}, "crypto: ''");
tx(function () {Decimal.config({crypto: NaN})}, "crypto: NaN");
tx(function () {Decimal.config({crypto: Infinity})}, "crypto: Infinity");
t(void 0, {crypto: void 0});
// modulo
t = function (expected, obj) {
Decimal.config(obj);
T.assertEqual(expected, Decimal.modulo);
}
t(4, {modulo: void 0});
t(0, {modulo: 0});
t(1, {modulo: 1});
t(2, {modulo: 2});
t(3, {modulo: 3});
t(4, {modulo: 4});
t(5, {modulo: 5});
t(6, {modulo: 6});
t(7, {modulo: 7});
t(8, {modulo: 8});
t(9, {modulo: 9});
tx(function () {Decimal.config({modulo: -1})}, "modulo: -1");
tx(function () {Decimal.config({modulo: 0.1})}, "modulo: 0.1");
tx(function () {Decimal.config({modulo: 9.1})}, "modulo: 9.1");
tx(function () {Decimal.config({modulo: '0'})}, "modulo: '0'");
tx(function () {Decimal.config({modulo: '1'})}, "modulo: '1'");
tx(function () {Decimal.config({modulo: 1.1})}, "modulo: 1.1");
tx(function () {Decimal.config({modulo: -1.1})}, "modulo: -1.1");
tx(function () {Decimal.config({modulo: 10})}, "modulo: 10");
tx(function () {Decimal.config({modulo: -11})}, "modulo: -11");
tx(function () {Decimal.config({modulo: []})}, "modulo: []");
tx(function () {Decimal.config({modulo: {}})}, "modulo: {}");
tx(function () {Decimal.config({modulo: ''})}, "modulo: ''");
tx(function () {Decimal.config({modulo: ' '})}, "modulo: ' '");
tx(function () {Decimal.config({modulo: 'hi'})}, "modulo: 'hi'");
tx(function () {Decimal.config({modulo: null})}, "modulo: null");
tx(function () {Decimal.config({modulo: NaN})}, "modulo: NaN");
tx(function () {Decimal.config({modulo: Infinity})}, "modulo: Infinity");
t(9, {modulo: void 0});
T.stop();
})();