mirror of https://github.com/svaarala/duktape.git
Sami Vaarala
12 years ago
5 changed files with 412 additions and 8 deletions
@ -0,0 +1,398 @@ |
|||||
|
/* |
||||
|
* Test the 32-bit fast path which applies to integers in the |
||||
|
* range [-2**32-1,2**32-1], in any radix. |
||||
|
* |
||||
|
* The test is not exhaustive but has a pretty large (prime) |
||||
|
* skip; both endpoint values are always included though. |
||||
|
*/ |
||||
|
|
||||
|
/* FIXME: util */ |
||||
|
/* Trivial string checksum used to summarize brute force output lines |
||||
|
* (minimizes test case size). |
||||
|
*/ |
||||
|
function checkSumString(x) { |
||||
|
var i, n; |
||||
|
var res = 0; |
||||
|
var mult = [ 1, 3, 5, 7, 11, 13, 17, 19, 23 ]; |
||||
|
|
||||
|
n = x.length; |
||||
|
for (i = 0; i < n; i++) { |
||||
|
res += x.charCodeAt(i) * mult[i % mult.length]; |
||||
|
res = res >>> 0; // coerce to 32 bits
|
||||
|
} |
||||
|
|
||||
|
return res; |
||||
|
} |
||||
|
|
||||
|
/*--- |
||||
|
{ |
||||
|
"custom": true |
||||
|
} |
||||
|
---*/ |
||||
|
|
||||
|
/*=== |
||||
|
radix 2 |
||||
|
179306267 |
||||
|
178417689 |
||||
|
172469437 |
||||
|
158113487 |
||||
|
164522390 |
||||
|
171053804 |
||||
|
173839346 |
||||
|
73212146 |
||||
|
radix 3 |
||||
|
120001562 |
||||
|
116340620 |
||||
|
114838710 |
||||
|
104289556 |
||||
|
107366288 |
||||
|
110915012 |
||||
|
112538566 |
||||
|
49058085 |
||||
|
radix 4 |
||||
|
93996707 |
||||
|
93956672 |
||||
|
93119252 |
||||
|
85264205 |
||||
|
87138494 |
||||
|
90633905 |
||||
|
90749467 |
||||
|
38267839 |
||||
|
radix 5 |
||||
|
85524532 |
||||
|
85420528 |
||||
|
83386734 |
||||
|
75416390 |
||||
|
76399706 |
||||
|
79977948 |
||||
|
80054256 |
||||
|
33672687 |
||||
|
radix 6 |
||||
|
80375401 |
||||
|
79136945 |
||||
|
75214944 |
||||
|
69706448 |
||||
|
69994308 |
||||
|
72423839 |
||||
|
75586644 |
||||
|
31904527 |
||||
|
radix 7 |
||||
|
75660318 |
||||
|
75401474 |
||||
|
70356910 |
||||
|
65459640 |
||||
|
64698752 |
||||
|
68090646 |
||||
|
70718420 |
||||
|
29706955 |
||||
|
radix 8 |
||||
|
70760327 |
||||
|
70625152 |
||||
|
69485827 |
||||
|
61898015 |
||||
|
62283468 |
||||
|
65132380 |
||||
|
65228960 |
||||
|
27580869 |
||||
|
radix 9 |
||||
|
69419812 |
||||
|
65527610 |
||||
|
65200854 |
||||
|
59988264 |
||||
|
60261022 |
||||
|
60887826 |
||||
|
62388478 |
||||
|
27476559 |
||||
|
radix 10 |
||||
|
65687102 |
||||
|
65545878 |
||||
|
64772404 |
||||
|
57882489 |
||||
|
57783900 |
||||
|
60948995 |
||||
|
61112511 |
||||
|
25716773 |
||||
|
radix 11 |
||||
|
69166623 |
||||
|
68000038 |
||||
|
64211306 |
||||
|
59710995 |
||||
|
59000300 |
||||
|
61402648 |
||||
|
64314472 |
||||
|
27317298 |
||||
|
radix 12 |
||||
|
67632900 |
||||
|
67294827 |
||||
|
66690879 |
||||
|
60164747 |
||||
|
60799276 |
||||
|
62204906 |
||||
|
62065132 |
||||
|
26522442 |
||||
|
radix 13 |
||||
|
69740341 |
||||
|
69516644 |
||||
|
68895103 |
||||
|
62262756 |
||||
|
60104065 |
||||
|
64690764 |
||||
|
64292443 |
||||
|
27542684 |
||||
|
radix 14 |
||||
|
71598398 |
||||
|
72081748 |
||||
|
68929359 |
||||
|
62685443 |
||||
|
57389876 |
||||
|
65748807 |
||||
|
66567837 |
||||
|
28755782 |
||||
|
radix 15 |
||||
|
72430006 |
||||
|
71848282 |
||||
|
67985208 |
||||
|
62706717 |
||||
|
58859470 |
||||
|
59698249 |
||||
|
66875878 |
||||
|
28526129 |
||||
|
radix 16 |
||||
|
73769135 |
||||
|
70397366 |
||||
|
68140205 |
||||
|
62925422 |
||||
|
60428538 |
||||
|
60547551 |
||||
|
60928624 |
||||
|
25686087 |
||||
|
radix 17 |
||||
|
70912771 |
||||
|
69704402 |
||||
|
69358933 |
||||
|
64554822 |
||||
|
58820477 |
||||
|
61931012 |
||||
|
61985987 |
||||
|
26129087 |
||||
|
radix 18 |
||||
|
71231524 |
||||
|
71051252 |
||||
|
70966883 |
||||
|
62227667 |
||||
|
69575090 |
||||
|
63280736 |
||||
|
63297516 |
||||
|
26699407 |
||||
|
radix 19 |
||||
|
72743265 |
||||
|
71638726 |
||||
|
71595990 |
||||
|
62378229 |
||||
|
61170069 |
||||
|
64639168 |
||||
|
64361287 |
||||
|
27150427 |
||||
|
radix 20 |
||||
|
73544332 |
||||
|
73219218 |
||||
|
69908335 |
||||
|
62933335 |
||||
|
65249346 |
||||
|
65680945 |
||||
|
65650006 |
||||
|
27355150 |
||||
|
radix 21 |
||||
|
73704427 |
||||
|
73519719 |
||||
|
70395924 |
||||
|
63441542 |
||||
|
63940685 |
||||
|
72906696 |
||||
|
67058764 |
||||
|
27766841 |
||||
|
radix 22 |
||||
|
75433924 |
||||
|
74338906 |
||||
|
67871773 |
||||
|
64092473 |
||||
|
63565508 |
||||
|
66619708 |
||||
|
67094279 |
||||
|
28763924 |
||||
|
radix 23 |
||||
|
73850335 |
||||
|
69301782 |
||||
|
68368528 |
||||
|
64488785 |
||||
|
63024653 |
||||
|
68066056 |
||||
|
66847488 |
||||
|
28551783 |
||||
|
radix 24 |
||||
|
70204641 |
||||
|
70017694 |
||||
|
68737246 |
||||
|
64845718 |
||||
|
63541335 |
||||
|
66918926 |
||||
|
69254539 |
||||
|
29132129 |
||||
|
radix 25 |
||||
|
70855845 |
||||
|
70301783 |
||||
|
69537281 |
||||
|
64991486 |
||||
|
64441155 |
||||
|
65518746 |
||||
|
69378566 |
||||
|
29362760 |
||||
|
radix 26 |
||||
|
71640896 |
||||
|
70461614 |
||||
|
70154774 |
||||
|
65236955 |
||||
|
64792347 |
||||
|
65106858 |
||||
|
68281845 |
||||
|
29798072 |
||||
|
radix 27 |
||||
|
71552515 |
||||
|
71030799 |
||||
|
70959577 |
||||
|
65368358 |
||||
|
65244965 |
||||
|
65649571 |
||||
|
65944648 |
||||
|
29468067 |
||||
|
radix 28 |
||||
|
71962251 |
||||
|
71587113 |
||||
|
71715547 |
||||
|
65252620 |
||||
|
65591519 |
||||
|
66057948 |
||||
|
66957378 |
||||
|
28114849 |
||||
|
radix 29 |
||||
|
72491759 |
||||
|
72457349 |
||||
|
72335730 |
||||
|
64922366 |
||||
|
65489259 |
||||
|
66863734 |
||||
|
67087226 |
||||
|
28487426 |
||||
|
radix 30 |
||||
|
73411662 |
||||
|
72922686 |
||||
|
72917156 |
||||
|
64750239 |
||||
|
66035368 |
||||
|
67029068 |
||||
|
67666075 |
||||
|
28850587 |
||||
|
radix 31 |
||||
|
73970452 |
||||
|
73659060 |
||||
|
73152390 |
||||
|
64581272 |
||||
|
65701329 |
||||
|
68585956 |
||||
|
67311642 |
||||
|
29290105 |
||||
|
radix 32 |
||||
|
74485135 |
||||
|
74394511 |
||||
|
73420892 |
||||
|
64549058 |
||||
|
65141537 |
||||
|
68639239 |
||||
|
68711056 |
||||
|
29925749 |
||||
|
radix 33 |
||||
|
74926889 |
||||
|
74885711 |
||||
|
72847827 |
||||
|
64654882 |
||||
|
65104908 |
||||
|
69566120 |
||||
|
69322629 |
||||
|
27930453 |
||||
|
radix 34 |
||||
|
75281549 |
||||
|
76214857 |
||||
|
72254342 |
||||
|
64501263 |
||||
|
65445833 |
||||
|
68521664 |
||||
|
69218983 |
||||
|
30036608 |
||||
|
radix 35 |
||||
|
75808277 |
||||
|
75869094 |
||||
|
72102173 |
||||
|
64555847 |
||||
|
65319460 |
||||
|
67574813 |
||||
|
71497041 |
||||
|
28178381 |
||||
|
radix 36 |
||||
|
77635113 |
||||
|
75194087 |
||||
|
72176214 |
||||
|
64588163 |
||||
|
65418360 |
||||
|
67316650 |
||||
|
71241876 |
||||
|
30814244 |
||||
|
===*/ |
||||
|
|
||||
|
function fastPathTest() { |
||||
|
var start = -256*256*256*256 + 1; |
||||
|
var end = 256*256*256*256 - 1; |
||||
|
var step = 115757; // prime
|
||||
|
var i; |
||||
|
var radix; |
||||
|
var tmp = []; |
||||
|
|
||||
|
function flush() { |
||||
|
if (tmp.length > 0) { |
||||
|
// Note: here we're printing a checksum which is a small integer,
|
||||
|
// so the checksum will go through the same fast path.
|
||||
|
print(checkSumString(tmp.join(' '))); |
||||
|
tmp.length = 0; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function f(x) { |
||||
|
tmp.push(x); |
||||
|
if (tmp.length >= 10000) { |
||||
|
flush(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
for (radix = 2; radix <= 36; radix++) { |
||||
|
print('radix', radix); |
||||
|
i = start; |
||||
|
for (;;) { |
||||
|
f(new Number(i).toString(radix)); |
||||
|
|
||||
|
if (i >= end) { |
||||
|
break; |
||||
|
} |
||||
|
i += step; |
||||
|
if (i >= end) { |
||||
|
i = end; // always include end
|
||||
|
} |
||||
|
} |
||||
|
flush(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
fastPathTest(); |
||||
|
} catch (e) { |
||||
|
print(e); |
||||
|
} |
||||
|
|
Loading…
Reference in new issue