You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

240 lines
11 KiB

if (typeof Test === 'undefined') require('../tester');
Test('config', function () {
var MAX = 1e9;
function t(expected, value){
Test.areEqual(expected, value);
}
function tx(fn, msg){
Test.isException(fn, msg);
}
t(BigNumber.config, BigNumber.set);
var obj = BigNumber.config({
DECIMAL_PLACES: 100,
ROUNDING_MODE: 0,
EXPONENTIAL_AT: 50,
RANGE: 500
});
Test.isTrue(
obj.DECIMAL_PLACES === 100 &&
obj.ROUNDING_MODE === 0 &&
obj.EXPONENTIAL_AT[0] === -50 &&
obj.EXPONENTIAL_AT[1] === 50 &&
obj.RANGE[0] === -500 &&
obj.RANGE[1] === 500
);
obj = BigNumber.config({
DECIMAL_PLACES: 40,
ROUNDING_MODE: 4,
EXPONENTIAL_AT: 1E9,
RANGE: 1E9
});
t('object', typeof obj);
t(40, obj.DECIMAL_PLACES);
t(4, obj.ROUNDING_MODE);
t('object', typeof obj.EXPONENTIAL_AT);
t(2, obj.EXPONENTIAL_AT.length);
t(-1e9, obj.EXPONENTIAL_AT[0]);
t(1e9, obj.EXPONENTIAL_AT[1]);
t('object', typeof obj.RANGE);
t(2, obj.RANGE.length);
t(-1e9, obj.RANGE[0]);
t(1e9, obj.RANGE[1]);
obj = BigNumber.config({EXPONENTIAL_AT: [-7, 21], RANGE: [-324, 308]});
// DECIMAL_PLACES
t(0, BigNumber.config({DECIMAL_PLACES: 0}).DECIMAL_PLACES);
t(1, BigNumber.config({DECIMAL_PLACES: 1}).DECIMAL_PLACES);
t(20, BigNumber.config({DECIMAL_PLACES: 20}).DECIMAL_PLACES);
t(300000, BigNumber.config({DECIMAL_PLACES: 300000}).DECIMAL_PLACES);
t(4e+8, BigNumber.config({DECIMAL_PLACES: 4e8}).DECIMAL_PLACES);
t(123456789, BigNumber.config({DECIMAL_PLACES: 123456789}).DECIMAL_PLACES);
t(2000, BigNumber.config({DECIMAL_PLACES: 2e+3}).DECIMAL_PLACES);
t(MAX, BigNumber.config({DECIMAL_PLACES: MAX}).DECIMAL_PLACES);
tx(function () {BigNumber.config({DECIMAL_PLACES: -1})}, "DECIMAL_PLACES: -1");
tx(function () {BigNumber.config({DECIMAL_PLACES: 0.1})}, "DECIMAL_PLACES: 0.1");
tx(function () {BigNumber.config({DECIMAL_PLACES: 1.1})}, "DECIMAL_PLACES: 1.1");
tx(function () {BigNumber.config({DECIMAL_PLACES: -1.1})}, "DECIMAL_PLACES: -1.1");
tx(function () {BigNumber.config({DECIMAL_PLACES: 8.1})}, "DECIMAL_PLACES: 8.1");
tx(function () {BigNumber.config({DECIMAL_PLACES: MAX + 1})}, "DECIMAL_PLACES: MAX + 1");
tx(function () {BigNumber.config({DECIMAL_PLACES: []})}, "DECIMAL_PLACES: []");
tx(function () {BigNumber.config({DECIMAL_PLACES: {}})}, "DECIMAL_PLACES: {}");
tx(function () {BigNumber.config({DECIMAL_PLACES: ''})}, "DECIMAL_PLACES: ''");
tx(function () {BigNumber.config({DECIMAL_PLACES: ' '})}, "DECIMAL_PLACES: ' '");
tx(function () {BigNumber.config({DECIMAL_PLACES: 'hi'})}, "DECIMAL_PLACES: 'hi'");
tx(function () {BigNumber.config({DECIMAL_PLACES: '1e+999'})}, "DECIMAL_PLACES: '1e+999'");
tx(function () {BigNumber.config({DECIMAL_PLACES: NaN})}, "DECIMAL_PLACES: NaN");
tx(function () {BigNumber.config({DECIMAL_PLACES: Infinity})}, "DECIMAL_PLACES: Infinity");
tx(function () {BigNumber.config({DECIMAL_PLACES: null})}, "DECIMAL_PLACES: null");
tx(function () {BigNumber.config({DECIMAL_PLACES: undefined})}, "DECIMAL_PLACES: undefined");
BigNumber.config({DECIMAL_PLACES: 40});
// ROUNDING_MODE
t(0, BigNumber.config({ROUNDING_MODE: 0}).ROUNDING_MODE);
t(1, BigNumber.config({ROUNDING_MODE: 1}).ROUNDING_MODE);
t(2, BigNumber.config({ROUNDING_MODE: 2}).ROUNDING_MODE);
t(3, BigNumber.config({ROUNDING_MODE: 3}).ROUNDING_MODE);
t(4, BigNumber.config({ROUNDING_MODE: 4}).ROUNDING_MODE);
t(5, BigNumber.config({ROUNDING_MODE: 5}).ROUNDING_MODE);
t(6, BigNumber.config({ROUNDING_MODE: 6}).ROUNDING_MODE);
t(7, BigNumber.config({ROUNDING_MODE: 7}).ROUNDING_MODE);
t(8, BigNumber.config({ROUNDING_MODE: 8}).ROUNDING_MODE);
t(8, BigNumber.config(null).ROUNDING_MODE);
t(8, BigNumber.config(undefined).ROUNDING_MODE);
tx(function () {BigNumber.config({ROUNDING_MODE: -1})}, "ROUNDING_MODE: -1");
tx(function () {BigNumber.config({ROUNDING_MODE: 0.1})}, "ROUNDING_MODE: 0.1");
tx(function () {BigNumber.config({ROUNDING_MODE: 1.1})}, "ROUNDING_MODE: 1.1");
tx(function () {BigNumber.config({ROUNDING_MODE: -1.1})}, "ROUNDING_MODE: -1.1");
tx(function () {BigNumber.config({ROUNDING_MODE: 8.1})}, "ROUNDING_MODE: 8.1");
tx(function () {BigNumber.config({ROUNDING_MODE: 9})}, "ROUNDING_MODE: 9");
tx(function () {BigNumber.config({ROUNDING_MODE: 11})}, "ROUNDING_MODE: 11");
tx(function () {BigNumber.config({ROUNDING_MODE: []})}, "ROUNDING_MODE: []");
tx(function () {BigNumber.config({ROUNDING_MODE: {}})}, "ROUNDING_MODE: {}");
tx(function () {BigNumber.config({ROUNDING_MODE: ''})}, "ROUNDING_MODE: ''");
tx(function () {BigNumber.config({ROUNDING_MODE: ' '})}, "ROUNDING_MODE: ' '");
tx(function () {BigNumber.config({ROUNDING_MODE: 'hi'})}, "ROUNDING_MODE: 'hi'");
tx(function () {BigNumber.config({ROUNDING_MODE: NaN})}, "ROUNDING_MODE: NaN");
tx(function () {BigNumber.config({ROUNDING_MODE: Infinity})}, "ROUNDING_MODE: Infinity");
tx(function () {BigNumber.config({ROUNDING_MODE: null})}, "ROUNDING_MODE: null");
tx(function () {BigNumber.config({ROUNDING_MODE: undefined})}, "ROUNDING_MODE: undefined");
// EXPONENTIAL_AT
t(-7, obj.EXPONENTIAL_AT[0]);
t(21, obj.EXPONENTIAL_AT[1]);
tx(function () {BigNumber.config({EXPONENTIAL_AT: [0.1, 1]})}, "EXPONENTIAL_AT: [0.1, 1]");
tx(function () {BigNumber.config({EXPONENTIAL_AT: [-1, -0.1]})}, "EXPONENTIAL_AT: [-1, -0.1]");
tx(function () {BigNumber.config({EXPONENTIAL_AT: [1, 1]})}, "EXPONENTIAL_AT: [1, 1]");
tx(function () {BigNumber.config({EXPONENTIAL_AT: [-1, -1]})}, "EXPONENTIAL_AT: [-1, -1]");
tx(function () {BigNumber.config({EXPONENTIAL_AT: MAX + 1})}, "EXPONENTIAL_AT: MAX + 1");
tx(function () {BigNumber.config({EXPONENTIAL_AT: -MAX - 1})}, "EXPONENTIAL_AT: -MAX - 1");
tx(function () {BigNumber.config({EXPONENTIAL_AT: [-MAX - 1, MAX]})}, "EXPONENTIAL_AT: [-MAX - 1, MAX]");
tx(function () {BigNumber.config({EXPONENTIAL_AT: [-MAX, MAX + 1]})}, "EXPONENTIAL_AT: [-MAX, MAX + 1]");
tx(function () {BigNumber.config({EXPONENTIAL_AT: [MAX + 1, -MAX - 1]})}, "EXPONENTIAL_AT: [MAX + 1, -MAX - 1]");
tx(function () {BigNumber.config({EXPONENTIAL_AT: [-Infinity, Infinity]})}, "EXPONENTIAL_AT: [Infinity, -Infinity]");
tx(function () {BigNumber.config({EXPONENTIAL_AT: [Infinity, -Infinity]})}, "EXPONENTIAL_AT: [Infinity, -Infinity]");
obj = BigNumber.config();
t(-7, obj.EXPONENTIAL_AT[0]);
t(21, obj.EXPONENTIAL_AT[1]);
t(1, BigNumber.config({EXPONENTIAL_AT: 1}).EXPONENTIAL_AT[1]);
t(-1, BigNumber.config({EXPONENTIAL_AT: 1}).EXPONENTIAL_AT[0]);
obj = BigNumber.config({EXPONENTIAL_AT: 0});
Test.isTrue(obj.EXPONENTIAL_AT[0] === 0 && obj.EXPONENTIAL_AT[1] === 0);
obj = BigNumber.config({EXPONENTIAL_AT: -1});
Test.isTrue(obj.EXPONENTIAL_AT[0] === -1 && obj.EXPONENTIAL_AT[1] === 1);
// RANGE
BigNumber.config({EXPONENTIAL_AT: [-7, 21], RANGE: [-324, 308]});
t(-324, obj.RANGE[0]);
t(308, obj.RANGE[1]);
tx(function () {BigNumber.config({RANGE: [-0.9, 1]})}, "RANGE: [-0.9, 1]");
tx(function () {BigNumber.config({RANGE: [-1, 0.9]})}, "RANGE: [-1, 0.9]");
tx(function () {BigNumber.config({RANGE: [0, 1]})}, "RANGE: [0, 1]");
tx(function () {BigNumber.config({RANGE: [-1, 0]})}, "RANGE: [-1, 0]");
tx(function () {BigNumber.config({RANGE: 0})}, "RANGE: 0");
tx(function () {BigNumber.config({RANGE: MAX + 1})}, "RANGE: MAX + 1");
tx(function () {BigNumber.config({RANGE: -MAX - 1})}, "RANGE: -MAX - 1");
tx(function () {BigNumber.config({RANGE: [-MAX - 1, MAX + 1]})}, "RANGE: [-MAX - 1, MAX + 1]");
tx(function () {BigNumber.config({RANGE: [MAX + 1, -MAX - 1]})}, "RANGE: [MAX + 1, -MAX - 1]");
tx(function () {BigNumber.config({RANGE: Infinity})}, "RANGE: Infinity");
tx(function () {BigNumber.config({RANGE: "-Infinity"})}, "RANGE: '-Infinity'");
tx(function () {BigNumber.config({RANGE: [-Infinity, Infinity]})}, "RANGE: [-Infinity, Infinity]");
tx(function () {BigNumber.config({RANGE: [Infinity, -Infinity]})}, "RANGE: [Infinity, -Infinity]");
obj = BigNumber.config();
t(-324, obj.RANGE[0]);
t(308, obj.RANGE[1]);
var hundred = new BigNumber(100);
t('100', hundred.toString());
t('100', new BigNumber(hundred).toString());
t(1, BigNumber.config({RANGE: 1}).RANGE[1]);
t(-1, BigNumber.config({RANGE: 1}).RANGE[0]);
obj = BigNumber.config({RANGE: 1});
Test.isTrue(obj.RANGE[0] === -1 && obj.RANGE[1] === 1);
obj = BigNumber.config({RANGE: -1});
Test.isTrue(obj.RANGE[0] === -1 && obj.RANGE[1] === 1);
t('1', new BigNumber(1).toString());
t('99', new BigNumber(99).toString());
t('-99', new BigNumber(-99).toString());
t('Infinity', new BigNumber(100).toString());
t('-Infinity', new BigNumber(-100).toString());
t('0.99', new BigNumber(0.99).toString());
t('0.1', new BigNumber(0.1).toString());
t('0', new BigNumber(0.09).toString());
t('-0', new BigNumber(-0.09).valueOf());
t('100', hundred.toString());
t('Infinity', new BigNumber(hundred).toString());
t('-Infinity', hundred.negated().toString());
// FORMAT
tx(function () {BigNumber.config({FORMAT: ''})}, "FORMAT: ''");
tx(function () {BigNumber.config({FORMAT: 1})}, "FORMAT: 1");
obj = {
decimalSeparator: '.',
groupSeparator: ',',
groupSize: 3,
secondaryGroupSize: 0,
fractionGroupSeparator: '\xA0',
fractionGroupSize: 0
};
t(obj, BigNumber.config({FORMAT: obj}).FORMAT);
t('.', BigNumber.config().FORMAT.decimalSeparator);
obj.decimalSeparator = ',';
t(',', BigNumber.config().FORMAT.decimalSeparator);
// ALPHABET
BigNumber.config({ALPHABET: '0123456789abcdefghijklmnopqrstuvwxyz'});
tx(function () {BigNumber.config({ALPHABET: '1'})}, "ALPHABET: '1'");
tx(function () {BigNumber.config({ALPHABET: 2})}, "ALPHABET: 2");
tx(function () {BigNumber.config({ALPHABET: true})}, "ALPHABET: true");
tx(function () {BigNumber.config({ALPHABET: 'aba'})}, "ALPHABET: 'aba'");
tx(function () {BigNumber.config({ALPHABET: ',.'})}, "ALPHABET: ',.'");
tx(function () {BigNumber.config({ALPHABET: '0123456789.'})}, "ALPHABET: '0123456789.'");
BigNumber.config({ALPHABET: 'xy'});
t('xy', BigNumber.config().ALPHABET);
BigNumber.config({ALPHABET: '0123456789TE'});
t('0123456789TE', BigNumber.config().ALPHABET);
BigNumber.config({ALPHABET: '9876543210'});
t('9876543210', BigNumber.config().ALPHABET);
BigNumber.config({ALPHABET: '0123456789abcdefghijklmnopqrstuvwxyz'});
});