jscript: Run some SunSpider benchmarks in interactive mode.
This commit is contained in:
parent
8541f94e2c
commit
6d8359fcc5
|
@ -27,3 +27,12 @@ lang.js 40 "lang.js"
|
||||||
|
|
||||||
/* @makedep: regexp.js */
|
/* @makedep: regexp.js */
|
||||||
regexp.js 40 "regexp.js"
|
regexp.js 40 "regexp.js"
|
||||||
|
|
||||||
|
/* @makedep: sunspider-regexp-dna.js */
|
||||||
|
dna.js 40 "sunspider-regexp-dna.js"
|
||||||
|
|
||||||
|
/* @makedep: sunspider-string-base64.js */
|
||||||
|
base64.js 40 "sunspider-string-base64.js"
|
||||||
|
|
||||||
|
/* @makedep: sunspider-string-validate-input.js */
|
||||||
|
validateinput.js 40 "sunspider-string-validate-input.js"
|
||||||
|
|
|
@ -1777,13 +1777,12 @@ static void run_from_file(const char *filename)
|
||||||
ok(hres == S_OK, "parse_script failed: %08x\n", hres);
|
ok(hres == S_OK, "parse_script failed: %08x\n", hres);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void run_from_res(const char *name)
|
static BSTR load_res(const char *name)
|
||||||
{
|
{
|
||||||
const char *data;
|
const char *data;
|
||||||
DWORD size, len;
|
DWORD size, len;
|
||||||
BSTR str;
|
BSTR str;
|
||||||
HRSRC src;
|
HRSRC src;
|
||||||
HRESULT hres;
|
|
||||||
|
|
||||||
strict_dispid_check = FALSE;
|
strict_dispid_check = FALSE;
|
||||||
test_name = name;
|
test_name = name;
|
||||||
|
@ -1798,6 +1797,16 @@ static void run_from_res(const char *name)
|
||||||
str = SysAllocStringLen(NULL, len);
|
str = SysAllocStringLen(NULL, len);
|
||||||
MultiByteToWideChar(CP_ACP, 0, data, size, str, len);
|
MultiByteToWideChar(CP_ACP, 0, data, size, str, len);
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void run_from_res(const char *name)
|
||||||
|
{
|
||||||
|
BSTR str;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
str = load_res(name);
|
||||||
|
|
||||||
SET_EXPECT(global_success_d);
|
SET_EXPECT(global_success_d);
|
||||||
SET_EXPECT(global_success_i);
|
SET_EXPECT(global_success_i);
|
||||||
hres = parse_script(SCRIPTITEM_GLOBALMEMBERS, str);
|
hres = parse_script(SCRIPTITEM_GLOBALMEMBERS, str);
|
||||||
|
@ -2304,6 +2313,61 @@ static void run_encoded_tests(void)
|
||||||
ok(hres == JS_E_INVALID_CHAR, "parse_script failed %08x\n", hres);
|
ok(hres == JS_E_INVALID_CHAR, "parse_script failed %08x\n", hres);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void run_benchmark(const char *script_name)
|
||||||
|
{
|
||||||
|
IActiveScriptParse *parser;
|
||||||
|
IActiveScript *engine;
|
||||||
|
ULONG start, end;
|
||||||
|
BSTR src;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
engine = create_script();
|
||||||
|
if(!engine)
|
||||||
|
return;
|
||||||
|
|
||||||
|
hres = IActiveScript_QueryInterface(engine, &IID_IActiveScriptParse, (void**)&parser);
|
||||||
|
ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres);
|
||||||
|
if (FAILED(hres)) {
|
||||||
|
IActiveScript_Release(engine);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
hres = IActiveScriptParse_InitNew(parser);
|
||||||
|
ok(hres == S_OK, "InitNew failed: %08x\n", hres);
|
||||||
|
|
||||||
|
hres = IActiveScript_SetScriptSite(engine, &ActiveScriptSite);
|
||||||
|
ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres);
|
||||||
|
|
||||||
|
hres = IActiveScript_AddNamedItem(engine, testW,
|
||||||
|
SCRIPTITEM_ISVISIBLE|SCRIPTITEM_ISSOURCE);
|
||||||
|
ok(hres == S_OK, "AddNamedItem failed: %08x\n", hres);
|
||||||
|
|
||||||
|
hres = IActiveScript_SetScriptState(engine, SCRIPTSTATE_STARTED);
|
||||||
|
ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_STARTED) failed: %08x\n", hres);
|
||||||
|
|
||||||
|
src = load_res(script_name);
|
||||||
|
|
||||||
|
start = GetTickCount();
|
||||||
|
hres = IActiveScriptParse_ParseScriptText(parser, src, NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
|
||||||
|
end = GetTickCount();
|
||||||
|
ok(hres == S_OK, "%s: ParseScriptText failed: %08x\n", script_name, hres);
|
||||||
|
|
||||||
|
trace("%s ran in %u ms\n", script_name, end-start);
|
||||||
|
|
||||||
|
IActiveScript_Release(engine);
|
||||||
|
IActiveScriptParse_Release(parser);
|
||||||
|
SysFreeString(src);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void run_benchmarks(void)
|
||||||
|
{
|
||||||
|
trace("Running benchmarks...\n");
|
||||||
|
|
||||||
|
run_benchmark("dna.js");
|
||||||
|
run_benchmark("base64.js");
|
||||||
|
run_benchmark("validateinput.js");
|
||||||
|
}
|
||||||
|
|
||||||
static BOOL check_jscript(void)
|
static BOOL check_jscript(void)
|
||||||
{
|
{
|
||||||
IActiveScriptProperty *script_prop;
|
IActiveScriptProperty *script_prop;
|
||||||
|
@ -2350,6 +2414,9 @@ START_TEST(run)
|
||||||
trace("ParseProcedureText tests...\n");
|
trace("ParseProcedureText tests...\n");
|
||||||
test_parse_proc();
|
test_parse_proc();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(winetest_interactive)
|
||||||
|
run_benchmarks();
|
||||||
}
|
}
|
||||||
|
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,135 @@
|
||||||
|
/* ***** 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 <= 16384; i *= 2 ) {
|
||||||
|
|
||||||
|
var base64;
|
||||||
|
|
||||||
|
base64 = toBase64(str);
|
||||||
|
base64ToString(base64);
|
||||||
|
|
||||||
|
// Double the string
|
||||||
|
str += str;
|
||||||
|
}
|
||||||
|
|
||||||
|
toBinaryTable = null;
|
|
@ -0,0 +1,89 @@
|
||||||
|
letters = new Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
|
||||||
|
numbers = new Array(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,26);
|
||||||
|
colors = new Array("FF","CC","99","66","33","00");
|
||||||
|
|
||||||
|
var endResult;
|
||||||
|
|
||||||
|
function doTest()
|
||||||
|
{
|
||||||
|
endResult = "";
|
||||||
|
|
||||||
|
// make up email address
|
||||||
|
for (var k=0;k<4000;k++)
|
||||||
|
{
|
||||||
|
username = makeName(6);
|
||||||
|
(k%2)?email=username+"@mac.com":email=username+"(at)mac.com";
|
||||||
|
|
||||||
|
// validate the email address
|
||||||
|
var pattern = /^[a-zA-Z0-9\-\._]+@[a-zA-Z0-9\-_]+(\.?[a-zA-Z0-9\-_]*)\.[a-zA-Z]{2,3}$/;
|
||||||
|
|
||||||
|
if(pattern.test(email))
|
||||||
|
{
|
||||||
|
var r = email + " appears to be a valid email address.";
|
||||||
|
addResult(r);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
r = email + " does NOT appear to be a valid email address.";
|
||||||
|
addResult(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// make up ZIP codes
|
||||||
|
for (var s=0;s<4000;s++)
|
||||||
|
{
|
||||||
|
var zipGood = true;
|
||||||
|
var zip = makeNumber(4);
|
||||||
|
(s%2)?zip=zip+"xyz":zip=zip.concat("7");
|
||||||
|
|
||||||
|
// validate the zip code
|
||||||
|
for (var i = 0; i < zip.length; i++) {
|
||||||
|
var ch = zip.charAt(i);
|
||||||
|
if (ch < "0" || ch > "9") {
|
||||||
|
zipGood = false;
|
||||||
|
r = zip + " contains letters.";
|
||||||
|
addResult(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (zipGood && zip.length>5)
|
||||||
|
{
|
||||||
|
zipGood = false;
|
||||||
|
r = zip + " is longer than five characters.";
|
||||||
|
addResult(r);
|
||||||
|
}
|
||||||
|
if (zipGood)
|
||||||
|
{
|
||||||
|
r = zip + " appears to be a valid ZIP code.";
|
||||||
|
addResult(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeName(n)
|
||||||
|
{
|
||||||
|
var tmp = "";
|
||||||
|
for (var i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
var l = Math.floor(26*Math.random());
|
||||||
|
tmp += letters[l];
|
||||||
|
}
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeNumber(n)
|
||||||
|
{
|
||||||
|
var tmp = "";
|
||||||
|
for (var i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
var l = Math.floor(9*Math.random());
|
||||||
|
tmp = tmp.concat(l);
|
||||||
|
}
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
function addResult(r)
|
||||||
|
{
|
||||||
|
endResult += "\n" + r;
|
||||||
|
}
|
||||||
|
|
||||||
|
doTest();
|
Loading…
Reference in New Issue