1023dd3b8Sopenharmony_ciif (typeof T === 'undefined') require('../setup');
2023dd3b8Sopenharmony_ci
3023dd3b8Sopenharmony_ciT('pow against sqrt', function () {
4023dd3b8Sopenharmony_ci
5023dd3b8Sopenharmony_ci  Decimal.config({
6023dd3b8Sopenharmony_ci    toExpNeg: -7,
7023dd3b8Sopenharmony_ci    toExpPos: 21,
8023dd3b8Sopenharmony_ci    minE: -9e15,
9023dd3b8Sopenharmony_ci    maxE: 9e15
10023dd3b8Sopenharmony_ci  });
11023dd3b8Sopenharmony_ci
12023dd3b8Sopenharmony_ci  for (var e, n, p, r, s; total < 10000; ) {
13023dd3b8Sopenharmony_ci
14023dd3b8Sopenharmony_ci    // Get a random value in the range [0,1) with a random number of significant digits
15023dd3b8Sopenharmony_ci    // in the range [1, 40], as a string in exponential format.
16023dd3b8Sopenharmony_ci    e = Decimal.random( Math.random() * 40 + 1 | 0 ).toExponential();
17023dd3b8Sopenharmony_ci
18023dd3b8Sopenharmony_ci    // Change exponent to a non-zero value of random length in the range (-9e15, 9e15).
19023dd3b8Sopenharmony_ci    r = new Decimal(e.slice(0, e.indexOf('e') + 1) + ( Math.random() < 0.5 ? '-' : '' ) +
20023dd3b8Sopenharmony_ci      ( n = Math.floor( Math.random() * 9e15 ) + '' ).slice( Math.random() * n.length | 0 ));
21023dd3b8Sopenharmony_ci    //console.log(' r:          ' + r);
22023dd3b8Sopenharmony_ci
23023dd3b8Sopenharmony_ci    // Random rounding mode.
24023dd3b8Sopenharmony_ci    Decimal.rounding = Math.random() * 9 | 0;
25023dd3b8Sopenharmony_ci
26023dd3b8Sopenharmony_ci    // Random precision in the range [1, 40].
27023dd3b8Sopenharmony_ci    Decimal.precision = Math.random() * 40 + 1 | 0;
28023dd3b8Sopenharmony_ci
29023dd3b8Sopenharmony_ci    p = r.pow(0.5);
30023dd3b8Sopenharmony_ci    //console.log(' r.pow(0.5): ' + p);
31023dd3b8Sopenharmony_ci
32023dd3b8Sopenharmony_ci    // sqrt is much faster than pow(0.5)
33023dd3b8Sopenharmony_ci    s = r.sqrt();
34023dd3b8Sopenharmony_ci    //console.log(' r.sqrt():   ' + s);
35023dd3b8Sopenharmony_ci
36023dd3b8Sopenharmony_ci    T.assertEqual(p.valueOf(), s.valueOf());
37023dd3b8Sopenharmony_ci  }
38023dd3b8Sopenharmony_ci});
39023dd3b8Sopenharmony_ci
40