1023dd3b8Sopenharmony_ciif (typeof T === 'undefined') require('../setup'); 2023dd3b8Sopenharmony_ci 3023dd3b8Sopenharmony_ciT('toNearest', function () { 4023dd3b8Sopenharmony_ci 5023dd3b8Sopenharmony_ci function isMinusZero(n) { 6023dd3b8Sopenharmony_ci return n.isZero() && n.isNegative(); 7023dd3b8Sopenharmony_ci } 8023dd3b8Sopenharmony_ci 9023dd3b8Sopenharmony_ci Decimal.config({ 10023dd3b8Sopenharmony_ci precision: 20, 11023dd3b8Sopenharmony_ci rounding: 4, 12023dd3b8Sopenharmony_ci toExpNeg: -9e15, 13023dd3b8Sopenharmony_ci toExpPos: 9e15, 14023dd3b8Sopenharmony_ci minE: -9e15, 15023dd3b8Sopenharmony_ci maxE: 9e15 16023dd3b8Sopenharmony_ci }); 17023dd3b8Sopenharmony_ci 18023dd3b8Sopenharmony_ci var t = function (actual) { 19023dd3b8Sopenharmony_ci T.assert(actual); 20023dd3b8Sopenharmony_ci } 21023dd3b8Sopenharmony_ci 22023dd3b8Sopenharmony_ci t(!isMinusZero(new Decimal(0).toNearest(0))); 23023dd3b8Sopenharmony_ci t( isMinusZero(new Decimal(-1).toNearest(0))); 24023dd3b8Sopenharmony_ci t( isMinusZero(new Decimal(-0).toNearest(0))); 25023dd3b8Sopenharmony_ci t(!isMinusZero(new Decimal(1).toNearest(0))); 26023dd3b8Sopenharmony_ci t(!isMinusZero(new Decimal(1).toNearest(-0))); 27023dd3b8Sopenharmony_ci t(!isMinusZero(new Decimal(1).toNearest(-3))); 28023dd3b8Sopenharmony_ci t( isMinusZero(new Decimal(-1).toNearest(-3))); 29023dd3b8Sopenharmony_ci 30023dd3b8Sopenharmony_ci t = function (expected, n, v, rm) { 31023dd3b8Sopenharmony_ci T.assertEqual(expected, new Decimal(n).toNearest(v, rm).valueOf()); 32023dd3b8Sopenharmony_ci } 33023dd3b8Sopenharmony_ci 34023dd3b8Sopenharmony_ci t('Infinity', Infinity); 35023dd3b8Sopenharmony_ci t('-Infinity', -Infinity); 36023dd3b8Sopenharmony_ci t('NaN', NaN); 37023dd3b8Sopenharmony_ci t('NaN', NaN, NaN); 38023dd3b8Sopenharmony_ci t('NaN', NaN, Infinity); 39023dd3b8Sopenharmony_ci t('NaN', NaN, -Infinity); 40023dd3b8Sopenharmony_ci t('NaN', NaN, 0); 41023dd3b8Sopenharmony_ci t('NaN', NaN, -0); 42023dd3b8Sopenharmony_ci 43023dd3b8Sopenharmony_ci t('Infinity', '9.999e+9000000000000000', '1e+9000000000000001'); 44023dd3b8Sopenharmony_ci t('Infinity', '9.999e+9000000000000000', '-1e+9000000000000001'); 45023dd3b8Sopenharmony_ci t('-Infinity', '-9.999e+9000000000000000', '1e+9000000000000001'); 46023dd3b8Sopenharmony_ci t('-Infinity', '-9.999e+9000000000000000', '-1e+9000000000000001'); 47023dd3b8Sopenharmony_ci t('9.999e+9000000000000000', '9.999e+9000000000000000'); 48023dd3b8Sopenharmony_ci t('-9.999e+9000000000000000', '-9.999e+9000000000000000'); 49023dd3b8Sopenharmony_ci 50023dd3b8Sopenharmony_ci t('NaN', 123.456, NaN); 51023dd3b8Sopenharmony_ci t('Infinity', 123.456, Infinity); 52023dd3b8Sopenharmony_ci t('Infinity', 123.456, -Infinity); 53023dd3b8Sopenharmony_ci t('0', 123.456, 0); 54023dd3b8Sopenharmony_ci t('0', 123.456, '-0'); 55023dd3b8Sopenharmony_ci 56023dd3b8Sopenharmony_ci t('NaN', -123.456, NaN); 57023dd3b8Sopenharmony_ci t('-Infinity', -123.456, Infinity); 58023dd3b8Sopenharmony_ci t('-Infinity', -123.456, -Infinity); 59023dd3b8Sopenharmony_ci t('-0', -123.456, '-0'); 60023dd3b8Sopenharmony_ci 61023dd3b8Sopenharmony_ci t('0', 0, 0); 62023dd3b8Sopenharmony_ci t('Infinity', 0, Infinity); 63023dd3b8Sopenharmony_ci t('Infinity', 0, -Infinity); 64023dd3b8Sopenharmony_ci t('-Infinity', -0, Infinity); 65023dd3b8Sopenharmony_ci t('-Infinity', -0, -Infinity); 66023dd3b8Sopenharmony_ci 67023dd3b8Sopenharmony_ci t('0', 1, -3); 68023dd3b8Sopenharmony_ci t('-0', -1, -3); 69023dd3b8Sopenharmony_ci t('3', 1.5, -3, 0); 70023dd3b8Sopenharmony_ci t('-0', -1.5, -3, 1); 71023dd3b8Sopenharmony_ci t('-3', -1.5, -3, 2); 72023dd3b8Sopenharmony_ci 73023dd3b8Sopenharmony_ci t('123', 123.456); 74023dd3b8Sopenharmony_ci t('123', 123.456, 1); 75023dd3b8Sopenharmony_ci t('123.5', 123.456, 0.1); 76023dd3b8Sopenharmony_ci t('123.46', 123.456, 0.01); 77023dd3b8Sopenharmony_ci t('123.456', 123.456, 0.001); 78023dd3b8Sopenharmony_ci 79023dd3b8Sopenharmony_ci t('123', 123.456, -1); 80023dd3b8Sopenharmony_ci t('123.5', 123.456, -0.1); 81023dd3b8Sopenharmony_ci t('123.46', 123.456, -0.01); 82023dd3b8Sopenharmony_ci t('123.456', 123.456, -0.001); 83023dd3b8Sopenharmony_ci 84023dd3b8Sopenharmony_ci t('124', 123.456, '-2'); 85023dd3b8Sopenharmony_ci t('123.4', 123.456, '-0.2'); 86023dd3b8Sopenharmony_ci t('123.46', 123.456, '-0.02'); 87023dd3b8Sopenharmony_ci t('123.456', 123.456, '-0.002'); 88023dd3b8Sopenharmony_ci 89023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5', 1, 4); 90023dd3b8Sopenharmony_ci t('83105511539', '83105511539.499999999999999999999999999999', 1, 4); 91023dd3b8Sopenharmony_ci t('83105511539', '83105511539.5', '1', 5); 92023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5000000000000000000001', 1, 5); 93023dd3b8Sopenharmony_ci 94023dd3b8Sopenharmony_ci Decimal.precision = 3; 95023dd3b8Sopenharmony_ci 96023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5', new Decimal(1), 4); 97023dd3b8Sopenharmony_ci t('83105511539', '83105511539.499999999999999999999999999999', 1, 4); 98023dd3b8Sopenharmony_ci t('83105511539', '83105511539.5', new Decimal('1'), 5); 99023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5000000000000000000001', 1, 5); 100023dd3b8Sopenharmony_ci 101023dd3b8Sopenharmony_ci Decimal.precision = 20; 102023dd3b8Sopenharmony_ci 103023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5', -1, 4); 104023dd3b8Sopenharmony_ci t('83105511539', '83105511539.499999999999999999999999999999', -1, 4); 105023dd3b8Sopenharmony_ci t('83105511539', '83105511539.5', '-1', 5); 106023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5000000000000000000001', -1, 5); 107023dd3b8Sopenharmony_ci 108023dd3b8Sopenharmony_ci t('-83105511540', '-83105511539.5', new Decimal(-1), 4); 109023dd3b8Sopenharmony_ci t('-83105511539', '-83105511539.499999999999999999999999999999', 1, 4); 110023dd3b8Sopenharmony_ci t('-83105511539', '-83105511539.5', new Decimal('-1'), 5); 111023dd3b8Sopenharmony_ci t('-83105511540', '-83105511539.5000000000000000000001', -1, 5); 112023dd3b8Sopenharmony_ci 113023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5', 1, 0); 114023dd3b8Sopenharmony_ci t('83105511539', '83105511539.5', 1, 1); 115023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5', 1, 2); 116023dd3b8Sopenharmony_ci t('83105511539', '83105511539.5', 1, 3); 117023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5', 1, 4); 118023dd3b8Sopenharmony_ci t('83105511539', '83105511539.5', 1, 5); 119023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5', 1, 6); 120023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5', 1, 7); 121023dd3b8Sopenharmony_ci t('83105511539', '83105511539.5', 1, 8); 122023dd3b8Sopenharmony_ci t('83105511539', '83105511539.499999999999999999999999999999', void 0, 0); 123023dd3b8Sopenharmony_ci t('83105511539', '83105511539.499999999999999999999999999999', 1, 1); 124023dd3b8Sopenharmony_ci t('83105511539', '83105511539.499999999999999999999999999999', void 0, 2); 125023dd3b8Sopenharmony_ci t('83105511539', '83105511539.499999999999999999999999999999', 1, 3); 126023dd3b8Sopenharmony_ci t('83105511539', '83105511539.499999999999999999999999999999', void 0, 4); 127023dd3b8Sopenharmony_ci t('83105511539', '83105511539.499999999999999999999999999999', 1, 5); 128023dd3b8Sopenharmony_ci t('83105511539', '83105511539.499999999999999999999999999999', void 0, 6); 129023dd3b8Sopenharmony_ci t('83105511539', '83105511539.499999999999999999999999999999', 1, 7); 130023dd3b8Sopenharmony_ci t('83105511539', '83105511539.499999999999999999999999999999', void 0, 8); 131023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5000000000000000000001', void 0, 0); 132023dd3b8Sopenharmony_ci t('83105511539', '83105511539.5000000000000000000001', 1, 1); 133023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5000000000000000000001', void 0, 2); 134023dd3b8Sopenharmony_ci t('83105511539', '83105511539.5000000000000000000001', 1, 3); 135023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5000000000000000000001', void 0, 4); 136023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5000000000000000000001', 1, 5); 137023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5000000000000000000001', void 0, 6); 138023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5000000000000000000001', 1, 7); 139023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5000000000000000000001', void 0, 8); 140023dd3b8Sopenharmony_ci 141023dd3b8Sopenharmony_ci Decimal.rounding = 0; 142023dd3b8Sopenharmony_ci t('83105511540', '83105511539.5'); 143023dd3b8Sopenharmony_ci 144023dd3b8Sopenharmony_ci Decimal.rounding = 1; 145023dd3b8Sopenharmony_ci t('83105511539', '83105511539.5'); 146023dd3b8Sopenharmony_ci 147023dd3b8Sopenharmony_ci t('3847570', '3847561.00000749', 10, 0); 148023dd3b8Sopenharmony_ci t('42840000000000000', '42835000000000001', '1e+13', 0); 149023dd3b8Sopenharmony_ci t('42830000000000000', '42835000000000001', '1e+13', 1); 150023dd3b8Sopenharmony_ci t('42840000000000000', '42835000000000000.0002', '1e+13', 0); 151023dd3b8Sopenharmony_ci t('42830000000000000', '42835000000000000.0002', '1e+13', 1); 152023dd3b8Sopenharmony_ci 153023dd3b8Sopenharmony_ci t('500', '449.999', 100, 0); 154023dd3b8Sopenharmony_ci t('400', '449.999', 100, 1); 155023dd3b8Sopenharmony_ci t('500', '449.999', 100, 2); 156023dd3b8Sopenharmony_ci t('400', '449.999', 100, 3); 157023dd3b8Sopenharmony_ci t('400', '449.999', 100, 4); 158023dd3b8Sopenharmony_ci t('400', '449.999', 100, 5); 159023dd3b8Sopenharmony_ci t('400', '449.999', 100, 6); 160023dd3b8Sopenharmony_ci t('400', '449.999', 100, 7); 161023dd3b8Sopenharmony_ci t('400', '449.999', 100, 8); 162023dd3b8Sopenharmony_ci 163023dd3b8Sopenharmony_ci t('-500', '-449.999', 100, 0); 164023dd3b8Sopenharmony_ci t('-400', '-449.999', 100, 1); 165023dd3b8Sopenharmony_ci t('-400', '-449.999', 100, 2); 166023dd3b8Sopenharmony_ci t('-500', '-449.999', 100, 3); 167023dd3b8Sopenharmony_ci t('-400', '-449.999', 100, 4); 168023dd3b8Sopenharmony_ci t('-400', '-449.999', 100, 5); 169023dd3b8Sopenharmony_ci t('-400', '-449.999', 100, 6); 170023dd3b8Sopenharmony_ci t('-400', '-449.999', 100, 7); 171023dd3b8Sopenharmony_ci t('-400', '-449.999', 100, 8); 172023dd3b8Sopenharmony_ci 173023dd3b8Sopenharmony_ci t('500', '450', 100, 0); 174023dd3b8Sopenharmony_ci t('400', '450', 100, 1); 175023dd3b8Sopenharmony_ci t('500', '450', 100, 2); 176023dd3b8Sopenharmony_ci t('400', '450', 100, 3); 177023dd3b8Sopenharmony_ci t('500', '450', 100, 4); 178023dd3b8Sopenharmony_ci t('400', '450', 100, 5); 179023dd3b8Sopenharmony_ci t('400', '450', 100, 6); 180023dd3b8Sopenharmony_ci t('500', '450', 100, 7); 181023dd3b8Sopenharmony_ci t('400', '450', 100, 8); 182023dd3b8Sopenharmony_ci 183023dd3b8Sopenharmony_ci t('-500', '-450', 100, 0); 184023dd3b8Sopenharmony_ci t('-400', '-450', 100, 1); 185023dd3b8Sopenharmony_ci t('-400', '-450', 100, 2); 186023dd3b8Sopenharmony_ci t('-500', '-450', 100, 3); 187023dd3b8Sopenharmony_ci t('-500', '-450', 100, 4); 188023dd3b8Sopenharmony_ci t('-400', '-450', 100, 5); 189023dd3b8Sopenharmony_ci t('-400', '-450', 100, 6); 190023dd3b8Sopenharmony_ci t('-400', '-450', 100, 7); 191023dd3b8Sopenharmony_ci t('-500', '-450', 100, 8); 192023dd3b8Sopenharmony_ci 193023dd3b8Sopenharmony_ci Decimal.rounding = 0; 194023dd3b8Sopenharmony_ci t('500', '450.001', 100); 195023dd3b8Sopenharmony_ci Decimal.rounding = 1; 196023dd3b8Sopenharmony_ci t('400', '450.001', 100); 197023dd3b8Sopenharmony_ci Decimal.rounding = 2; 198023dd3b8Sopenharmony_ci t('500', '450.001', 100); 199023dd3b8Sopenharmony_ci Decimal.rounding = 3; 200023dd3b8Sopenharmony_ci t('400', '450.001', 100); 201023dd3b8Sopenharmony_ci Decimal.rounding = 4; 202023dd3b8Sopenharmony_ci t('500', '450.001', 100); 203023dd3b8Sopenharmony_ci Decimal.rounding = 5; 204023dd3b8Sopenharmony_ci t('500', '450.001', 100); 205023dd3b8Sopenharmony_ci Decimal.rounding = 6; 206023dd3b8Sopenharmony_ci t('500', '450.001', 100); 207023dd3b8Sopenharmony_ci Decimal.rounding = 7; 208023dd3b8Sopenharmony_ci t('500', '450.001', 100); 209023dd3b8Sopenharmony_ci Decimal.rounding = 8; 210023dd3b8Sopenharmony_ci t('500', '450.001', 100); 211023dd3b8Sopenharmony_ci 212023dd3b8Sopenharmony_ci Decimal.rounding = 0; 213023dd3b8Sopenharmony_ci t('-500', '-450.001', 100); 214023dd3b8Sopenharmony_ci Decimal.rounding = 1; 215023dd3b8Sopenharmony_ci t('-400', '-450.001', 100); 216023dd3b8Sopenharmony_ci Decimal.rounding = 2; 217023dd3b8Sopenharmony_ci t('-400', '-450.001', 100); 218023dd3b8Sopenharmony_ci Decimal.rounding = 3; 219023dd3b8Sopenharmony_ci t('-500', '-450.001', 100); 220023dd3b8Sopenharmony_ci Decimal.rounding = 4; 221023dd3b8Sopenharmony_ci t('-500', '-450.001', 100); 222023dd3b8Sopenharmony_ci Decimal.rounding = 5; 223023dd3b8Sopenharmony_ci t('-500', '-450.001', 100); 224023dd3b8Sopenharmony_ci Decimal.rounding = 6; 225023dd3b8Sopenharmony_ci t('-500', '-450.001', 100); 226023dd3b8Sopenharmony_ci Decimal.rounding = 7; 227023dd3b8Sopenharmony_ci t('-500', '-450.001', 100); 228023dd3b8Sopenharmony_ci Decimal.rounding = 8; 229023dd3b8Sopenharmony_ci t('-500', '-450.001', 100); 230023dd3b8Sopenharmony_ci}); 231