Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 //-----------------------------------------------------------------------------
7 var BUGNUMBER = 363040;
8 var summary = 'Array.prototype.reduce application in continued fraction';
9 var actual = '';
10 var expect = '';
13 //-----------------------------------------------------------------------------
14 test();
15 //-----------------------------------------------------------------------------
17 function test()
18 {
19 enterFunc ('test');
20 printBugNumber(BUGNUMBER);
21 printStatus (summary);
24 // Print x as a continued fraction in compact abbreviated notation and return
25 // the convergent [n, d] such that x - (n / d) <= epsilon.
26 function contfrac(x, epsilon) {
27 let i = Math.floor(x);
28 let a = [i];
29 x = x - i;
30 let maxerr = x;
31 while (maxerr > epsilon) {
32 x = 1 / x;
33 i = Math.floor(x);
34 a.push(i);
35 x = x - i;
36 maxerr = x * maxerr / i;
37 }
38 print(uneval(a));
39 return a.reduceRight(function (x, y) {return [x[0] * y + x[1], x[0]];}, [1, 0]);
40 }
42 if (!Array.prototype.reduceRight)
43 {
44 print('Test skipped. Array.prototype.reduceRight not implemented');
45 }
46 else
47 {
48 // Show contfrac in action on some interesting numbers.
49 for each (num in [Math.PI, Math.sqrt(2), 1 / (Math.sqrt(Math.E) - 1)]) {
50 print('Continued fractions for', num);
51 for each (eps in [1e-2, 1e-3, 1e-5, 1e-7, 1e-10]) {
52 let frac = contfrac(num, eps);
53 let est = frac[0] / frac[1];
54 let err = num - est;
55 print(uneval(frac), est, err);
56 }
57 print();
58 }
59 }
61 reportCompare(expect, actual, summary);
63 exitFunc ('test');
64 }