<!DOCTYPE html>
<html>
<head>

<meta charset=utf8>

<!--
 Copyright (C) 2007 Apple Inc.  All rights reserved.

 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions
 are met:
 1. Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
 2. Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.

 THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
-->

<title>SunSpider 0.9.1 JavaScript Benchmark Results (@SUITE@ test suite)</title>
<link rel="stylesheet" href="../sunspider.css">
</head>

<body>
<h2><span id="logo">&#x2600;</span>SunSpider 0.9.1 JavaScript Benchmark Results</h2>

<h3>Content Version: @SUITE@</h3>

<p><a href="driver.html">Run Again</a></p>

<p><input style="width: 90%;" id="selfUrl" type="text" readonly="readonly"><br>
<small>(You can bookmark this results URL for later comparison.)</small></p>

<form onsubmit="event.preventDefault(); compare(other.value);">To compare to another run, paste a saved result URL in the text field below and press enter:<br>
<input style="width: 90%;" name="other" type="text"><br>
</form>

<pre id="console">
</pre>

<script src="../json2.js"></script>
<script>
var selfUrlInput = document.getElementById("selfUrl");
selfUrlInput.value = location;

var outputJSON = JSON.parse(decodeURI(location.search.substring(1)));
var version = outputJSON["v"];
delete outputJSON["v"];
var output = pivot(outputJSON);

function pivot(input) {
    var output = [];
    for (var test in input) {
        for (var i = 0; i < input[test].length; i++) {
             if (!output[i])
                 output[i] = {};
             output[i][test] =  input[test][i];
        }
    }
    return output;
}

function print(str) {
    var console = document.getElementById("console");
    console.appendChild(document.createTextNode(str));
    console.appendChild(document.createElement("br"));
}
</script>

<script src="sunspider-test-prefix.js"></script>
<script src="../sunspider-analyze-results.js"></script>
<script src="../sunspider-compare-results.js"></script>

<script>
var output2 = output;
var version2 = version;

function compare(other)
{
    document.getElementById("console").innerHTML = "";

    var output1JSON = JSON.parse(decodeURI(other.split("?")[1]));
    var version1 = output1JSON["v"];
    delete output1JSON["v"];
    if (version1 != version2) {
        print("ERROR: cannot compare version " + version1 + ' with version ' + version2);
    } else {
        var output1 = pivot(output1JSON);
        sunspiderCompareResults(output1, output2);
    }
}
</script>


</body>
</html>
