/* * 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. */ /*--- { "slow": true } ---*/ /* 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; } /*=== 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); }