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