haikuwebkit/PerformanceTests/LongSpider/string-base64.js

138 lines
5.1 KiB
JavaScript
Raw Permalink Normal View History

Introduce a version of SunSpider that runs for a really long time (about 1 sec on my machine) Rubber stamped by Mark Hahnenberg. This isn't meant for serious VM-to-VM performance comparisons, but it is useful to see how these benchmarks behave when they're completely warmed up. * LongSpider: Added. * LongSpider/3d-cube.js: Added. (DrawLine): (CalcCross): (CalcNormal): (CreateP): (MMulti): (VMulti): (VMulti2): (MAdd): (Translate): (RotateX): (RotateY): (RotateZ): (DrawQube): (Loop): (Init): * LongSpider/3d-morph.js: Added. (loops.3500.nx.120.nz.120.morph): * LongSpider/3d-raytrace.js: Added. (createVector): (sqrLengthVector): (lengthVector): (addVector): (subVector): (scaleVector): (normaliseVector): (add): (sub): (scalev): (dot): (scale): (cross): (normalise): (transformMatrix): (invertMatrix): (Triangle): (Triangle.prototype.intersect): (Scene): (Scene.prototype.intersect): (Scene.prototype.blocked): (Camera): (Camera.prototype.generateRayPair): (renderRows): (Camera.prototype.render): (raytraceScene.floorShader): (raytraceScene): (arrayToCanvasCommands): * LongSpider/access-binary-trees.js: Added. (TreeNode): (TreeNode.prototype.itemCheck): (bottomUpTree): * LongSpider/access-fannkuch.js: Added. (fannkuch): * LongSpider/access-nbody.js: Added. (Body): (Body.prototype.offsetMomentum): (Jupiter): (Saturn): (Uranus): (Neptune): (Sun): (NBodySystem): (NBodySystem.prototype.advance): (NBodySystem.prototype.energy): * LongSpider/access-nsieve.js: Added. (pad): (nsieve): (sieve): * LongSpider/bitops-3bit-bits-in-byte.js: Added. (fast3bitlookup): (TimeFunc): * LongSpider/bitops-bits-in-byte.js: Added. (bitsinbyte): (TimeFunc): * LongSpider/bitops-nsieve-bits.js: Added. (pad): (primes): (sieve): * LongSpider/controlflow-recursive.js: Added. (ack): (fib): (tak): * LongSpider/crypto-aes.js: Added. (Cipher): (SubBytes): (ShiftRows): (MixColumns): (AddRoundKey): (KeyExpansion): (SubWord): (RotWord): (AESEncryptCtr): (AESDecryptCtr): (escCtrlChars): * LongSpider/crypto-md5.js: Added. (hex_md5): (b64_md5): (str_md5): (hex_hmac_md5): (b64_hmac_md5): (str_hmac_md5): (md5_vm_test): (core_md5): (md5_cmn): (md5_ff): (md5_gg): (md5_hh): (md5_ii): (core_hmac_md5): (safe_add): (bit_rol): (str2binl): (binl2str): (binl2hex): (binl2b64): * LongSpider/crypto-sha1.js: Added. (hex_sha1): (b64_sha1): (str_sha1): (hex_hmac_sha1): (b64_hmac_sha1): (str_hmac_sha1): (sha1_vm_test): (core_sha1): (sha1_ft): (sha1_kt): (core_hmac_sha1): (safe_add): (rol): (str2binb): (binb2str): (binb2hex): (binb2b64): * LongSpider/date-format-tofte.js: Added. (arrayExists): (.a): (.A): (.B): (.d): (.D): (.F): (.g): (.G): (.h): (.H): (.i): (.j): (.l): (.L): (.m): (.M): (.n): (.O): (.r): (.S): (.s): (.t): (.U): (.W): (.w): (.Y): (.y): (.z): (Date.prototype.formatDate): * LongSpider/date-format-xparb.js: Added. (Date.prototype.dateFormat): (Date.createNewFormat): (Date.getFormatCode): (Date.parseDate): (Date.createParser): (Date.formatCodeToRegex): (Date.prototype.getTimezone): (Date.prototype.getGMTOffset): (Date.prototype.getDayOfYear): (Date.prototype.getWeekOfYear): (Date.prototype.isLeapYear): (Date.prototype.getFirstDayOfMonth): (Date.prototype.getLastDayOfMonth): (Date.prototype.getDaysInMonth): (Date.prototype.getSuffix): (String.escape): * LongSpider/math-cordic.js: Added. (FIXED): (FLOAT): (DEG2RAD): (cordicsincos): (cordic): * LongSpider/math-partial-sums.js: Added. (partial): * LongSpider/math-spectral-norm.js: Added. (A): (Au): (Atu): (AtAu): (spectralnorm): * LongSpider/string-base64.js: Added. (toBase64): (base64ToString): * LongSpider/string-fasta.js: Added. (rand): (makeCumulative): (fastaRepeat): (fastaRandom): * LongSpider/string-tagcloud.js: Added. (.Array.prototype.toJSONString): (.Boolean.prototype.toJSONString): (.Date.prototype.toJSONString): (.Number.prototype.toJSONString): (.Object.prototype.toJSONString): (.): Canonical link: https://commits.webkit.org/138700@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@155088 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-09-05 02:53:16 +00:00
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Mozilla XML-RPC Client component.
*
* The Initial Developer of the Original Code is
* Digital Creations 2, Inc.
* Portions created by the Initial Developer are Copyright (C) 2000
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Martijn Pieters <mj@digicool.com> (original author)
* Samuel Sieb <samuel@sieb.net>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
// From: http://lxr.mozilla.org/mozilla/source/extensions/xml-rpc/src/nsXmlRpcClient.js#956
/* Convert data (an array of integers) to a Base64 string. */
var toBase64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
var base64Pad = '=';
function toBase64(data) {
var result = '';
var length = data.length;
var i;
// Convert every three bytes to 4 ascii characters.
for (i = 0; i < (length - 2); i += 3) {
result += toBase64Table[data.charCodeAt(i) >> 2];
result += toBase64Table[((data.charCodeAt(i) & 0x03) << 4) + (data.charCodeAt(i+1) >> 4)];
result += toBase64Table[((data.charCodeAt(i+1) & 0x0f) << 2) + (data.charCodeAt(i+2) >> 6)];
result += toBase64Table[data.charCodeAt(i+2) & 0x3f];
}
// Convert the remaining 1 or 2 bytes, pad out to 4 characters.
if (length%3) {
i = length - (length%3);
result += toBase64Table[data.charCodeAt(i) >> 2];
if ((length%3) == 2) {
result += toBase64Table[((data.charCodeAt(i) & 0x03) << 4) + (data.charCodeAt(i+1) >> 4)];
result += toBase64Table[(data.charCodeAt(i+1) & 0x0f) << 2];
result += base64Pad;
} else {
result += toBase64Table[(data.charCodeAt(i) & 0x03) << 4];
result += base64Pad + base64Pad;
}
}
return result;
}
/* Convert Base64 data to a string */
var toBinaryTable = [
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1, 0,-1,-1,
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,
15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,
-1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1
];
function base64ToString(data) {
var result = '';
var leftbits = 0; // number of bits decoded, but yet to be appended
var leftdata = 0; // bits decoded, but yet to be appended
// Convert one by one.
for (var i = 0; i < data.length; i++) {
var c = toBinaryTable[data.charCodeAt(i) & 0x7f];
var padding = (data.charCodeAt(i) == base64Pad.charCodeAt(0));
// Skip illegal characters and whitespace
if (c == -1) continue;
// Collect data into leftdata, update bitcount
leftdata = (leftdata << 6) | c;
leftbits += 6;
// If we have 8 or more bits, append 8 bits to the result
if (leftbits >= 8) {
leftbits -= 8;
// Append if not padding.
if (!padding)
result += String.fromCharCode((leftdata >> leftbits) & 0xff);
leftdata &= (1 << leftbits) - 1;
}
}
// If there are any bits left, the base64 string was corrupted
if (leftbits)
throw Components.Exception('Corrupted base64 string');
return result;
}
var str = "";
for ( var i = 0; i < 8192; i++ )
str += String.fromCharCode( (25 * Math.random()) + 97 );
for ( var i = 8192; i <= 2097152; i *= 2 ) {
var base64;
base64 = toBase64(str);
var encoded = base64ToString(base64);
if (encoded != str)
throw "ERROR: bad result: expected " + str + " but got " + encoded;
// Double the string
str += str;
}
toBinaryTable = null;