1023dd3b8Sopenharmony_ciif (typeof T === 'undefined') require('../setup');
2023dd3b8Sopenharmony_ci
3023dd3b8Sopenharmony_ciT('exp', function () {
4023dd3b8Sopenharmony_ci
5023dd3b8Sopenharmony_ci  function t(n, expected, pr, rm) {
6023dd3b8Sopenharmony_ci    Decimal.precision = pr;
7023dd3b8Sopenharmony_ci    Decimal.rounding = rm;
8023dd3b8Sopenharmony_ci    T.assertEqual(expected, new Decimal(n).exp().valueOf());
9023dd3b8Sopenharmony_ci  }
10023dd3b8Sopenharmony_ci
11023dd3b8Sopenharmony_ci  Decimal.config({
12023dd3b8Sopenharmony_ci    precision: 40,
13023dd3b8Sopenharmony_ci    rounding: 4,
14023dd3b8Sopenharmony_ci    toExpNeg: -9e15,
15023dd3b8Sopenharmony_ci    toExpPos: 9e15,
16023dd3b8Sopenharmony_ci    minE: -9e15,
17023dd3b8Sopenharmony_ci    maxE: 9e15
18023dd3b8Sopenharmony_ci  });
19023dd3b8Sopenharmony_ci
20023dd3b8Sopenharmony_ci  t('0', '1', 40, 4);
21023dd3b8Sopenharmony_ci  t('0', String(Math.exp(0)), 40, 4);
22023dd3b8Sopenharmony_ci  t('-0', '1', 40, 4);
23023dd3b8Sopenharmony_ci  t('-0', String(Math.exp(-0)), 40, 4);
24023dd3b8Sopenharmony_ci  t('Infinity', 'Infinity', 40, 4);
25023dd3b8Sopenharmony_ci  t('Infinity', String(Math.exp(Infinity)), 40, 4);
26023dd3b8Sopenharmony_ci  t('-Infinity', '0', 40, 4);
27023dd3b8Sopenharmony_ci  t('-Infinity', String(Math.exp(-Infinity)), 40, 4);
28023dd3b8Sopenharmony_ci  t('NaN', 'NaN', 40, 4);
29023dd3b8Sopenharmony_ci  t('NaN', String(Math.exp(NaN)), 40, 4);
30023dd3b8Sopenharmony_ci  t('1', '2.718281828459045235360287471352662497757', 40, 4);
31023dd3b8Sopenharmony_ci
32023dd3b8Sopenharmony_ci  t('4.504575', '90.42990317191332252519829', 25, 5);
33023dd3b8Sopenharmony_ci  t('6.3936622751479561979', '598.04277120550571020949043340838952845520759628012', 50, 4);
34023dd3b8Sopenharmony_ci  t('0.000000000000000004', '1.000000000000000004000000000000000008001', 40, 2);
35023dd3b8Sopenharmony_ci  t('0.9', '2.45960311115694966380012656360247069542177230644', 48, 1);
36023dd3b8Sopenharmony_ci  t('-0.0000000000000005', '0.999999999999999500000000000000124', 33, 1);
37023dd3b8Sopenharmony_ci  t('-0.00000000000000000001', '0.99999999999999999999000000000000000000004999', 44, 3);
38023dd3b8Sopenharmony_ci  t('-0.000000000000004', '0.999999999999996000000000000008', 31, 0);
39023dd3b8Sopenharmony_ci  t('-0.0000000000000000006', '0.99999', 5, 3);
40023dd3b8Sopenharmony_ci  t('0.0000000000000000006', '1', 5, 3);
41023dd3b8Sopenharmony_ci  t('-0.0000003', '1', 1, 4);
42023dd3b8Sopenharmony_ci
43023dd3b8Sopenharmony_ci  // Initial exponent estimate incorrect by -1
44023dd3b8Sopenharmony_ci  t('20.72326583694641116', '1000000000.0000000038', 20, 1);
45023dd3b8Sopenharmony_ci
46023dd3b8Sopenharmony_ci  // Initial exponent estimate incorrect by +1
47023dd3b8Sopenharmony_ci  t('-27.6310211159285483', '0.000000000000999', 3, 1);
48023dd3b8Sopenharmony_ci
49023dd3b8Sopenharmony_ci  t('-0.9', '0.40656965974059911188345423964562', 32, 1);
50023dd3b8Sopenharmony_ci  t('-0.00000000000005', '0.999', 3, 3);
51023dd3b8Sopenharmony_ci  t('-0.9999999999999999', '0.367879441171442358383467887305694866395394004', 45, 4);
52023dd3b8Sopenharmony_ci  t('-0.99999', '0.36788311998424806939070532012638041', 35, 3);
53023dd3b8Sopenharmony_ci  t('-0.00000000001', '0.99999999999000000000004999999999983333333333375', 49, 2);
54023dd3b8Sopenharmony_ci  t('-0.9999999999999', '0.367879441171479109539640916233017625680100198337', 48, 0);
55023dd3b8Sopenharmony_ci  t('-0.999999999', '0.36787944153932176295090581241', 29, 0);
56023dd3b8Sopenharmony_ci  t('-0.0000000003', '0.9999999997000000001', 19, 2);
57023dd3b8Sopenharmony_ci  t('-0.0000001', '0.99999990000000499999983333333749999991667', 41, 2);
58023dd3b8Sopenharmony_ci  t('-0.0000000000000001', '0.9999999999999999', 26, 1);
59023dd3b8Sopenharmony_ci  t('-0.999999999999999', '0.36788', 5, 2);
60023dd3b8Sopenharmony_ci  t('-0.999999999', '0.367879441539321762951', 21, 4);
61023dd3b8Sopenharmony_ci  t('-0.000000000001', '0.9999999999990000000000005', 31, 0);
62023dd3b8Sopenharmony_ci  t('-0.1', '0.9048374180359595731642491', 25, 0);
63023dd3b8Sopenharmony_ci  t('-0.99999999', '0.36787944485', 12, 3);
64023dd3b8Sopenharmony_ci  t('-0.99999999', '0.36787944485023675170391910600205499737', 38, 0);
65023dd3b8Sopenharmony_ci  t('-0.1', '0.9048374180359595731642491', 25, 0);
66023dd3b8Sopenharmony_ci  t('-0.9', '0.4065696597', 10, 3);
67023dd3b8Sopenharmony_ci  t('-0.9999999999999', '0.367879441171479', 15, 3);
68023dd3b8Sopenharmony_ci  t('-0.99', '0.371576691022045690531524119908201386918028', 42, 3);
69023dd3b8Sopenharmony_ci  t('-0.999999999999999', '0.3678794411714426894749649417', 28, 0);
70023dd3b8Sopenharmony_ci  t('-0.9', '0.4', 2, 1);
71023dd3b8Sopenharmony_ci  t('-0.00000000009', '0.99999', 5, 1);
72023dd3b8Sopenharmony_ci  t('0.9', '2.45960311115694966380012656360247069542177230644', 48, 1);
73023dd3b8Sopenharmony_ci  t('40.95984262795251', '614658133673303019.41715', 23, 1);
74023dd3b8Sopenharmony_ci  t('50.57728', '9234930123395249855007.64784227728909958776637', 45, 0);
75023dd3b8Sopenharmony_ci  t('-9.295952106254287693', '0.00009179505707794839996147521992', 28, 3);
76023dd3b8Sopenharmony_ci
77023dd3b8Sopenharmony_ci  t('24.429', '40679902037.5', 12, 1);
78023dd3b8Sopenharmony_ci  t('3.085347', '21.875056169741656067', 20, 2);
79023dd3b8Sopenharmony_ci  t('6.079163', '436.663554324263441178', 21, 0);
80023dd3b8Sopenharmony_ci  t('0.89588138', '2.4494937731', 11, 5);
81023dd3b8Sopenharmony_ci  t('3.06', '21.3', 3, 4);
82023dd3b8Sopenharmony_ci  t('0.828620743', '2.2901578446832146', 17, 6);
83023dd3b8Sopenharmony_ci  t('0.8747', '2.39815573', 9, 1);
84023dd3b8Sopenharmony_ci  t('4', '54.5', 3, 3);
85023dd3b8Sopenharmony_ci  t('1.74023', '5.698653962365493026791', 22, 3);
86023dd3b8Sopenharmony_ci  t('0.3178134', '1.37411982654', 12, 5);
87023dd3b8Sopenharmony_ci  t('1.0212228', '2.77658790066265475', 18, 0);
88023dd3b8Sopenharmony_ci  t('2.8', '16.444646771097049871498016', 26, 6);
89023dd3b8Sopenharmony_ci  t('2', '7.389', 5, 1);
90023dd3b8Sopenharmony_ci  t('2.13349', '8.44428600324102919', 19, 1);
91023dd3b8Sopenharmony_ci  t('1.0306766', '2.8029617', 8, 4);
92023dd3b8Sopenharmony_ci  t('1.38629371', '3.99999739553', 12, 0);
93023dd3b8Sopenharmony_ci  t('2.140864956', '8.5', 2, 4);
94023dd3b8Sopenharmony_ci  t('1', '2.7182818284590452353602874713', 29, 1);
95023dd3b8Sopenharmony_ci  t('2.8', '16.4446467711', 13, 4);
96023dd3b8Sopenharmony_ci  t('1.7923271', '6.0034067514286690274238254973', 29, 0);
97023dd3b8Sopenharmony_ci  t('2', '7.38905609893065', 15, 4);
98023dd3b8Sopenharmony_ci  t('1.839758663', '6.2950188567239', 14, 1);
99023dd3b8Sopenharmony_ci  t('3.1541', '23.4319388536798', 15, 3);
100023dd3b8Sopenharmony_ci  t('6.23103', '508.27874', 8, 1);
101023dd3b8Sopenharmony_ci  t('0.15', '1.16183424272828312261663', 24, 0);
102023dd3b8Sopenharmony_ci  t('3.6454', '38.298089', 8, 4);
103023dd3b8Sopenharmony_ci  t('2.8086602', '16.5877', 6, 2);
104023dd3b8Sopenharmony_ci  t('1', '2.71828182845904523536', 22, 4);
105023dd3b8Sopenharmony_ci  t('3.712', '40.9355959021562903', 19, 2);
106023dd3b8Sopenharmony_ci  t('1.742336005', '5.71066800248', 12, 5);
107023dd3b8Sopenharmony_ci
108023dd3b8Sopenharmony_ci  t('67.0234090932359557332', '129000000000000000000000000000', 3, 2);
109023dd3b8Sopenharmony_ci  t('6.4350484439574', '623.3127778698531510658792212713024749828103299', 46, 3);
110023dd3b8Sopenharmony_ci  t('-90.6147801309103528', '0.0000000000000000000000000000000000000004430992452392223286671364132586', 31, 0);
111023dd3b8Sopenharmony_ci  t('52.6735295600', '75131702520984694212520.839', 26, 5);
112023dd3b8Sopenharmony_ci  t('4.91754742409', '136.667015585278752656929641054712859399847337855456678258883', 60, 0);
113023dd3b8Sopenharmony_ci  t('-8.291786018917236430647515856', '0.0002505', 4, 3);
114023dd3b8Sopenharmony_ci
115023dd3b8Sopenharmony_ci  Decimal.toExpNeg = Decimal.toExpPos = 0;
116023dd3b8Sopenharmony_ci
117023dd3b8Sopenharmony_ci  // Max integer argument
118023dd3b8Sopenharmony_ci  t('20723265836946413', '6.3207512951460243608e+9000000000000000', 20, 4);
119023dd3b8Sopenharmony_ci
120023dd3b8Sopenharmony_ci  // Min integer argument
121023dd3b8Sopenharmony_ci  t('-20723265836946411', '1.1690154783664756563e-9000000000000000', 20, 4);
122023dd3b8Sopenharmony_ci
123023dd3b8Sopenharmony_ci  t('2.08E+16', 'Infinity', 10, 1);
124023dd3b8Sopenharmony_ci  t('9.99999999e+9000000000000000', 'Infinity', 100, 4);
125023dd3b8Sopenharmony_ci
126023dd3b8Sopenharmony_ci  t('-2.08E+16', '0e+0', 10, 1);
127023dd3b8Sopenharmony_ci  t('1e-9000000000000000', '1e+0', 10, 1);
128023dd3b8Sopenharmony_ci
129023dd3b8Sopenharmony_ci  // Initial exponent estimate incorrect by +1
130023dd3b8Sopenharmony_ci  t('2302585095.29663062096', '9.999998439e+1000000000', 10, 1);
131023dd3b8Sopenharmony_ci
132023dd3b8Sopenharmony_ci  // Initial exponent estimate incorrect by -1
133023dd3b8Sopenharmony_ci  t('557.22559250455906', '1.0000000000000044e+242', 17, 1);
134023dd3b8Sopenharmony_ci
135023dd3b8Sopenharmony_ci  t('-7.2204571E-4550853476128405', '9.99999e-1', 6, 1);
136023dd3b8Sopenharmony_ci  t('-1.239848698043325450682384840', '2.894280056499551869832955260486309228756785711877e-1', 49, 2);
137023dd3b8Sopenharmony_ci  t('-358219354.0214584957674057041104824439823073474823', '1.7279578060422445345064581640966e-155572689', 32, 3);
138023dd3b8Sopenharmony_ci  t('8.82661445434039879925209590467500361019097244359748402', '6.813181388774733211e+3', 19, 6);
139023dd3b8Sopenharmony_ci  t('9.02366224E-9', '1.00000000902366228071324023326175156155718e+0', 43, 6);
140023dd3b8Sopenharmony_ci  t('-4.4768686752786086271180252E+574398129049502', '0e+0', 15, 3);
141023dd3b8Sopenharmony_ci});
142