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.
MikeMcl_decimal.js/test/modules/toNearest.js

231 lines
7.3 KiB

if (typeof T === 'undefined') require('../setup');
T('toNearest', function () {
function isMinusZero(n) {
return n.isZero() && n.isNegative();
}
Decimal.config({
precision: 20,
rounding: 4,
toExpNeg: -9e15,
toExpPos: 9e15,
minE: -9e15,
maxE: 9e15
});
var t = function (actual) {
T.assert(actual);
}
t(!isMinusZero(new Decimal(0).toNearest(0)));
t( isMinusZero(new Decimal(-1).toNearest(0)));
t( isMinusZero(new Decimal(-0).toNearest(0)));
t(!isMinusZero(new Decimal(1).toNearest(0)));
t(!isMinusZero(new Decimal(1).toNearest(-0)));
t(!isMinusZero(new Decimal(1).toNearest(-3)));
t( isMinusZero(new Decimal(-1).toNearest(-3)));
t = function (expected, n, v, rm) {
T.assertEqual(expected, new Decimal(n).toNearest(v, rm).valueOf());
}
t('Infinity', Infinity);
t('-Infinity', -Infinity);
t('NaN', NaN);
t('NaN', NaN, NaN);
t('NaN', NaN, Infinity);
t('NaN', NaN, -Infinity);
t('NaN', NaN, 0);
t('NaN', NaN, -0);
t('Infinity', '9.999e+9000000000000000', '1e+9000000000000001');
t('Infinity', '9.999e+9000000000000000', '-1e+9000000000000001');
t('-Infinity', '-9.999e+9000000000000000', '1e+9000000000000001');
t('-Infinity', '-9.999e+9000000000000000', '-1e+9000000000000001');
t('9.999e+9000000000000000', '9.999e+9000000000000000');
t('-9.999e+9000000000000000', '-9.999e+9000000000000000');
t('NaN', 123.456, NaN);
t('Infinity', 123.456, Infinity);
t('Infinity', 123.456, -Infinity);
t('0', 123.456, 0);
t('0', 123.456, '-0');
t('NaN', -123.456, NaN);
t('-Infinity', -123.456, Infinity);
t('-Infinity', -123.456, -Infinity);
t('-0', -123.456, '-0');
t('0', 0, 0);
t('Infinity', 0, Infinity);
t('Infinity', 0, -Infinity);
t('-Infinity', -0, Infinity);
t('-Infinity', -0, -Infinity);
t('0', 1, -3);
t('-0', -1, -3);
t('3', 1.5, -3, 0);
t('-0', -1.5, -3, 1);
t('-3', -1.5, -3, 2);
t('123', 123.456);
t('123', 123.456, 1);
t('123.5', 123.456, 0.1);
t('123.46', 123.456, 0.01);
t('123.456', 123.456, 0.001);
t('123', 123.456, -1);
t('123.5', 123.456, -0.1);
t('123.46', 123.456, -0.01);
t('123.456', 123.456, -0.001);
t('124', 123.456, '-2');
t('123.4', 123.456, '-0.2');
t('123.46', 123.456, '-0.02');
t('123.456', 123.456, '-0.002');
t('83105511540', '83105511539.5', 1, 4);
t('83105511539', '83105511539.499999999999999999999999999999', 1, 4);
t('83105511539', '83105511539.5', '1', 5);
t('83105511540', '83105511539.5000000000000000000001', 1, 5);
Decimal.precision = 3;
t('83105511540', '83105511539.5', new Decimal(1), 4);
t('83105511539', '83105511539.499999999999999999999999999999', 1, 4);
t('83105511539', '83105511539.5', new Decimal('1'), 5);
t('83105511540', '83105511539.5000000000000000000001', 1, 5);
Decimal.precision = 20;
t('83105511540', '83105511539.5', -1, 4);
t('83105511539', '83105511539.499999999999999999999999999999', -1, 4);
t('83105511539', '83105511539.5', '-1', 5);
t('83105511540', '83105511539.5000000000000000000001', -1, 5);
t('-83105511540', '-83105511539.5', new Decimal(-1), 4);
t('-83105511539', '-83105511539.499999999999999999999999999999', 1, 4);
t('-83105511539', '-83105511539.5', new Decimal('-1'), 5);
t('-83105511540', '-83105511539.5000000000000000000001', -1, 5);
t('83105511540', '83105511539.5', 1, 0);
t('83105511539', '83105511539.5', 1, 1);
t('83105511540', '83105511539.5', 1, 2);
t('83105511539', '83105511539.5', 1, 3);
t('83105511540', '83105511539.5', 1, 4);
t('83105511539', '83105511539.5', 1, 5);
t('83105511540', '83105511539.5', 1, 6);
t('83105511540', '83105511539.5', 1, 7);
t('83105511539', '83105511539.5', 1, 8);
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 0);
t('83105511539', '83105511539.499999999999999999999999999999', 1, 1);
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 2);
t('83105511539', '83105511539.499999999999999999999999999999', 1, 3);
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 4);
t('83105511539', '83105511539.499999999999999999999999999999', 1, 5);
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 6);
t('83105511539', '83105511539.499999999999999999999999999999', 1, 7);
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 8);
t('83105511540', '83105511539.5000000000000000000001', void 0, 0);
t('83105511539', '83105511539.5000000000000000000001', 1, 1);
t('83105511540', '83105511539.5000000000000000000001', void 0, 2);
t('83105511539', '83105511539.5000000000000000000001', 1, 3);
t('83105511540', '83105511539.5000000000000000000001', void 0, 4);
t('83105511540', '83105511539.5000000000000000000001', 1, 5);
t('83105511540', '83105511539.5000000000000000000001', void 0, 6);
t('83105511540', '83105511539.5000000000000000000001', 1, 7);
t('83105511540', '83105511539.5000000000000000000001', void 0, 8);
Decimal.rounding = 0;
t('83105511540', '83105511539.5');
Decimal.rounding = 1;
t('83105511539', '83105511539.5');
t('3847570', '3847561.00000749', 10, 0);
t('42840000000000000', '42835000000000001', '1e+13', 0);
t('42830000000000000', '42835000000000001', '1e+13', 1);
t('42840000000000000', '42835000000000000.0002', '1e+13', 0);
t('42830000000000000', '42835000000000000.0002', '1e+13', 1);
t('500', '449.999', 100, 0);
t('400', '449.999', 100, 1);
t('500', '449.999', 100, 2);
t('400', '449.999', 100, 3);
t('400', '449.999', 100, 4);
t('400', '449.999', 100, 5);
t('400', '449.999', 100, 6);
t('400', '449.999', 100, 7);
t('400', '449.999', 100, 8);
t('-500', '-449.999', 100, 0);
t('-400', '-449.999', 100, 1);
t('-400', '-449.999', 100, 2);
t('-500', '-449.999', 100, 3);
t('-400', '-449.999', 100, 4);
t('-400', '-449.999', 100, 5);
t('-400', '-449.999', 100, 6);
t('-400', '-449.999', 100, 7);
t('-400', '-449.999', 100, 8);
t('500', '450', 100, 0);
t('400', '450', 100, 1);
t('500', '450', 100, 2);
t('400', '450', 100, 3);
t('500', '450', 100, 4);
t('400', '450', 100, 5);
t('400', '450', 100, 6);
t('500', '450', 100, 7);
t('400', '450', 100, 8);
t('-500', '-450', 100, 0);
t('-400', '-450', 100, 1);
t('-400', '-450', 100, 2);
t('-500', '-450', 100, 3);
t('-500', '-450', 100, 4);
t('-400', '-450', 100, 5);
t('-400', '-450', 100, 6);
t('-400', '-450', 100, 7);
t('-500', '-450', 100, 8);
Decimal.rounding = 0;
t('500', '450.001', 100);
Decimal.rounding = 1;
t('400', '450.001', 100);
Decimal.rounding = 2;
t('500', '450.001', 100);
Decimal.rounding = 3;
t('400', '450.001', 100);
Decimal.rounding = 4;
t('500', '450.001', 100);
Decimal.rounding = 5;
t('500', '450.001', 100);
Decimal.rounding = 6;
t('500', '450.001', 100);
Decimal.rounding = 7;
t('500', '450.001', 100);
Decimal.rounding = 8;
t('500', '450.001', 100);
Decimal.rounding = 0;
t('-500', '-450.001', 100);
Decimal.rounding = 1;
t('-400', '-450.001', 100);
Decimal.rounding = 2;
t('-400', '-450.001', 100);
Decimal.rounding = 3;
t('-500', '-450.001', 100);
Decimal.rounding = 4;
t('-500', '-450.001', 100);
Decimal.rounding = 5;
t('-500', '-450.001', 100);
Decimal.rounding = 6;
t('-500', '-450.001', 100);
Decimal.rounding = 7;
t('-500', '-450.001', 100);
Decimal.rounding = 8;
t('-500', '-450.001', 100);
});