2019-10-31  Caio Lima  <ticaiolima@gmail.com>

        Temporary skip broken tests on MIPS that is broken due to OSR exit to LLInt
        https://bugs.webkit.org/show_bug.cgi?id=203710

        Unreviewed gardening.

        * tests/v8-v6/v8-deltablue.js:

2016-03-21 Filip Pizlo <fpizlo@apple.com>

        JSC should use a shadow stack version of CHICKEN so that debuggers have the option of retrieving tail-deleted frames
        https://bugs.webkit.org/show_bug.cgi?id=155598

        Reviewed by Saam Barati.

        * shadow-chicken.yaml: Added.

2015-03-30  Michael Saboff  <msaboff@apple.com>

        Fix failing v8-deltablue.js for ARM
        https://bugs.webkit.org/show_bug.cgi?id=138392

        Rubber-stamped by Mark Lam.

        Re-enable this test for ARM32 on iOS as the tests now run without issues.

        * tests/v8-v6/v8-deltablue.js:

2015-02-25  Benjamin Poulain  <bpoulain@apple.com>

        CodeBlock crashes when dumping op_push_name_scope
        https://bugs.webkit.org/show_bug.cgi?id=141953

        Reviewed by Filip Pizlo.

        * profiler-test.yaml:

2015-01-27  Csaba Osztrogonác  <ossy@webkit.org>

        [Win] JSC profiler tests asserts in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=140931

        Unreviewed gardening, skip failing tests.

        * profiler-test.yaml:

2014-11-04  Michael Saboff  <msaboff@apple.com>

        Disable failing v8-deltablue.js for ARM
        https://bugs.webkit.org/show_bug.cgi?id=138382

        Reviewed by Geoffrey Garen.

        This test is failing on ARM 32 bit.

        * tests/v8-v6/v8-deltablue.js:

2014-07-08  Gergo Balogh  <gbalogh.u-szeged@partner.samsung.com>

        Add option to specify output file location in sunspider.
        https://bugs.webkit.org/show_bug.cgi?id=134339

        Reviewed by Darin Adler.

        * sunspider:

2014-06-03  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        REGRESSION(r169092 and r169102): Skip failing JSC tests poperly on non-x86 Darwin platforms
        https://bugs.webkit.org/show_bug.cgi?id=133149

        Reviewed by Csaba Osztrogonác.

        * profiler-test.yaml: Skip profiler tests only if the architecture isn't x86 and the host is Darwin.

2014-05-21  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out http://trac.webkit.org/changeset/169159.
        
        This was a unilateral change and wasn't properly reviewed.

        * profiler-test.yaml:

2014-05-19  Filip Pizlo  <fpizlo@apple.com>

        Take care of some ARM64 test failures
        https://bugs.webkit.org/show_bug.cgi?id=133090

        Reviewed by Geoffrey Garen.

        * profiler-test.yaml: Skip these on not-x86.

2014-03-14  Maciej Stachowiak  <mjs@apple.com>

        Replace "Apple Computer, Inc." with "Apple Inc." in copyright headers
        https://bugs.webkit.org/show_bug.cgi?id=130276
        <rdar://problem/16266927>

        Reviewed by Simon Fraser.

        * hosted/sunspider.html:
        * hosted/versions.html:
        * make-hosted:
        * resources/TEMPLATE.html:
        * resources/driver-TEMPLATE.html:
        * resources/results-TEMPLATE.html:
        * resources/sunspider-analyze-results.js:
        * resources/sunspider-compare-results.js:
        * resources/sunspider-standalone-compare.js:
        * resources/sunspider-standalone-driver.js:
        * sunspider:
        * sunspider-compare-results:
        * tests/sunspider-0.9.1/3d-morph.js:
        * tests/sunspider-0.9.1/3d-raytrace.js:
        * tests/sunspider-0.9.1/bitops-bitwise-and.js:
        * tests/sunspider-0.9.1/math-cordic.js:
        * tests/sunspider-0.9.1/string-tagcloud.js:
        * tests/sunspider-0.9/3d-morph.js:
        * tests/sunspider-0.9/3d-raytrace.js:
        * tests/sunspider-0.9/bitops-bitwise-and.js:
        * tests/sunspider-0.9/math-cordic.js:
        * tests/sunspider-0.9/string-tagcloud.js:
        * tests/sunspider-1.0.1/3d-morph.js:
        * tests/sunspider-1.0.1/3d-raytrace.js:
        * tests/sunspider-1.0.1/bitops-bitwise-and.js:
        * tests/sunspider-1.0.1/math-cordic.js:
        * tests/sunspider-1.0.1/string-tagcloud.js:
        * tests/sunspider-1.0.2/3d-morph.js:
        * tests/sunspider-1.0.2/3d-raytrace.js:
        * tests/sunspider-1.0.2/bitops-bitwise-and.js:
        * tests/sunspider-1.0.2/math-cordic.js:
        * tests/sunspider-1.0.2/string-tagcloud.js:
        * tests/sunspider-1.0/3d-morph.js:
        * tests/sunspider-1.0/3d-raytrace.js:
        * tests/sunspider-1.0/bitops-bitwise-and.js:
        * tests/sunspider-1.0/math-cordic.js:
        * tests/sunspider-1.0/string-tagcloud.js:

2014-02-10  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, revert the accidental change from r163789.

        * tests/v8-v6/v8-deltablue.js:

2013-12-10  Filip Pizlo  <fpizlo@apple.com>

        Get rid of forward exit on DoubleAsInt32
        https://bugs.webkit.org/show_bug.cgi?id=125552

        Reviewed by Oliver Hunt.
        
        Use SunSpider as a kind of spot-check for the
        no-architecture-specific-optimization paths in the compiler.

        * no-architecture-specific-optimizations.yaml: Added.

2013-10-08  Geoffrey Garen  <ggaren@apple.com>

        Refined power management in SunSpider 1.0.2
        https://bugs.webkit.org/show_bug.cgi?id=122525

        Reviewed by Gavin Barraclough.

        * hosted/sunspider.css:
        (#frameparent):
        (#countdown):
        * resources/TEMPLATE.html: Provide an explicit countdown element in the
        parent, instead of hacking it into each child frame.

        * resources/driver-TEMPLATE.html: Be more explicit about how we respond
        to power management. Just moving setTimeout(0) inside the loop is a
        little too subtle, and may not work across browsers.

        Also, leave a little extra time after changing the countdown graphic,
        to give the browser some time to paint.

2013-10-02  Geoffrey Garen  <ggaren@apple.com>

        Improved painting behavior in SunSpider 1.0.2
        https://bugs.webkit.org/show_bug.cgi?id=122257

        Reviewed by Oliver Hunt.

        Individual test names with times was a good painting strategy years
        back, when each benchmark took hundreds of milliseconds to run. Now,
        the whole suite can finish in a a few hundres milliseconds, and things
        look pretty flashy.

        Instead, display a countdown that indicates which iteration of the
        test we're on.

        * resources/TEMPLATE.html: Work around a bug in Firefox by specifying
        our style inside the .html file instead of in an external stylesheet.
        Under heavy JavaScript load, Firefox neglects to apply external
        stylesheets -- probably due to a starved timer.
        
        * resources/driver-TEMPLATE.html: Delay a little between runs to ensure
        that our countdown has enough time to paint.

2013-09-26  Geoffrey Garen  <ggaren@apple.com>

        Fixed a version number string in SunSpider 1.0.2
        https://bugs.webkit.org/show_bug.cgi?id=122004

        Reviewed by Gavin Barraclough.

        * resources/driver-TEMPLATE.html:
        * resources/results-TEMPLATE.html: 1.0.2!

2013-09-26  Geoffrey Garen  <ggaren@apple.com>

        Tentative SunSpider 1.0.2
        https://bugs.webkit.org/show_bug.cgi?id=122002

        Reviewed by Gavin Barraclough.

        Be even more aggressive about asking for zero delay between tests by
        setting a timeout at the beginning of a test instead of the end. This is
        another step toward reducing noise -- particularly noise caused by
        power management -- just like the step down from 10ms to 0ms.

        Browsers typically put a 4ms floor on timers. The sooner we set
        our timer, the sooner it will fire.

        * make-hosted:
        * resources/driver-TEMPLATE.html: Changed the driver to set the timeout
        earlier.
        * tests/sunspider-1.0.2: Added. These tests are unchanged from 1.0.1.

2013-09-09  Filip Pizlo  <fpizlo@apple.com>

        Stress tests should test the jsc profiler (-p)
        https://bugs.webkit.org/show_bug.cgi?id=121043

        Reviewed by Mark Hahnenberg.
        
        Add a jsc-stress-test that tries to profile SunSpider.

        * profiler-test.yaml: Added.

2013-08-08  Cosmin Truta  <ctruta@blackberry.com>

        SunSpider: Move the 3d-morph fix from version 1.0 to version 1.0.1
        https://bugs.webkit.org/show_bug.cgi?id=117993

        Reviewed by George Staikos.

        Bump the SunSpider version to 1.0.1.

        Unroll r149548 in order to restore version 1.0 to its original,
        and add the 3d-morph fix to version 1.0.1 instead.

        * hosted/sunspider.html: Updated to version 1.0.1.
        * hosted/versions.html: Updated to version 1.0.1.
        * make-hosted: Added support for version 1.0.1.
        * resources/driver-TEMPLATE.html: Updated to version 1.0.1.
        * resources/results-TEMPLATE.html: Updated to version 1.0.1.
        * sunspider: Updated to version 1.0.1.
        * sunspider-compare-results: Updated to version 1.0.1.
        * tests/sunspider-1.0/3d-morph.js: Rolled back to the original version.
        * tests/sunspider-1.0.1/LIST: Added.
        * tests/sunspider-1.0.1/3d-cube.js: Added.
        * tests/sunspider-1.0.1/3d-morph.js: Added.
        * tests/sunspider-1.0.1/3d-raytrace.js: Added.
        * tests/sunspider-1.0.1/access-binary-trees.js: Added.
        * tests/sunspider-1.0.1/access-fannkuch.js: Added.
        * tests/sunspider-1.0.1/access-nbody.js: Added.
        * tests/sunspider-1.0.1/access-nsieve.js: Added.
        * tests/sunspider-1.0.1/bitops-3bit-bits-in-byte.js: Added.
        * tests/sunspider-1.0.1/bitops-bits-in-byte.js: Added.
        * tests/sunspider-1.0.1/bitops-bitwise-and.js: Added.
        * tests/sunspider-1.0.1/bitops-nsieve-bits.js: Added.
        * tests/sunspider-1.0.1/controlflow-recursive.js: Added.
        * tests/sunspider-1.0.1/crypto-aes.js: Added.
        * tests/sunspider-1.0.1/crypto-md5.js: Added.
        * tests/sunspider-1.0.1/crypto-sha1.js: Added.
        * tests/sunspider-1.0.1/date-format-tofte.js: Added.
        * tests/sunspider-1.0.1/date-format-xparb.js: Added.
        * tests/sunspider-1.0.1/math-cordic.js: Added.
        * tests/sunspider-1.0.1/math-partial-sums.js: Added.
        * tests/sunspider-1.0.1/math-spectral-norm.js: Added.
        * tests/sunspider-1.0.1/regexp-dna.js: Added.
        * tests/sunspider-1.0.1/string-base64.js: Added.
        * tests/sunspider-1.0.1/string-fasta.js: Added.
        * tests/sunspider-1.0.1/string-tagcloud.js: Added.
        * tests/sunspider-1.0.1/string-unpack-code.js: Added.
        * tests/sunspider-1.0.1/string-validate-input.js: Added.

2013-05-03  Cosmin Truta  <ctruta@blackberry.com>

        SunSpider 1.0: 3d-morph: use epsilon to check result
        https://bugs.webkit.org/show_bug.cgi?id=115553

        Reviewed by George Staikos.

        SunSpider/3d-morph should be more lenient in validating its results, since they depend on Math.sin, which isn't formally specified.

        * tests/sunspider-1.0/3d-morph.js:

2013-04-19  Filip Pizlo  <fpizlo@apple.com>

        SunSpider/string-tagcloud should be more lenient in validating its results, since they depend on Math.log, which isn't formally specified
        https://bugs.webkit.org/show_bug.cgi?id=114895

        Reviewed by Michael Saboff.

        * tests/sunspider-1.0/string-tagcloud.js:

2013-04-18  Filip Pizlo  <fpizlo@apple.com>

        Whenever it is cheap and non-invasive, SunSpider tests should validate their results to ensure that the browser runs them correctly
        https://bugs.webkit.org/show_bug.cgi?id=114852

        Reviewed by Geoffrey Garen.
        
        This adds low-overhead checking of the results of each SunSpider tests. This is not
        meant to be an exhaustive test that everything was executed correctly, but rather a
        simple sanity check that will catch glaring mistakes. The philosophy here is that we're
        not trying to prevent all forms of cheating, or that we're trying to prove the
        browser's correctness. Moreover, these checks are meant to incur minimal overhead;
        they currently clock in at <2% slow-down in SunSpider 1.0.
        
        The test expectations were generated using the LLInt on command-line, and I've verified
        that Firefox 20, Chrome 26, IE 10, Safari 6, and ToT with all of the JITs agree. Note
        that some tests cannot be precisely validated because they use Math functions, which
        ECMAScript chooses to not formally specify - those functions like sin() and friends are
        allowed to return implementation-dependent results. Also some tests cannot be validated
        at all because their behavior is either intentionally random or is timezone-dependent.
        But 23 out of 26 tests now have some kind of validation.
        
        I've updated the harnesses to show erroneous runs when displaying results.

        * resources/TEMPLATE.html:
        * resources/driver-TEMPLATE.html:
        * resources/sunspider-analyze-results.js:
        (formatResult):
        (resultLine):
        (printOutput):
        * resources/sunspider-compare-results.js:
        (.formatMean):
        (.resultLine):
        (.printOutput):
        (sunspiderCompareResults):
        * resources/sunspider-standalone-driver.js:
        * tests/sunspider-1.0/3d-cube.js:
        (Init):
        * tests/sunspider-1.0/3d-morph.js:
        * tests/sunspider-1.0/3d-raytrace.js:
        * tests/sunspider-1.0/access-binary-trees.js:
        * tests/sunspider-1.0/access-fannkuch.js:
        * tests/sunspider-1.0/access-nbody.js:
        * tests/sunspider-1.0/access-nsieve.js:
        (sieve):
        * tests/sunspider-1.0/bitops-3bit-bits-in-byte.js:
        * tests/sunspider-1.0/bitops-bits-in-byte.js:
        * tests/sunspider-1.0/bitops-bitwise-and.js:
        * tests/sunspider-1.0/bitops-nsieve-bits.js:
        * tests/sunspider-1.0/controlflow-recursive.js:
        * tests/sunspider-1.0/crypto-aes.js:
        * tests/sunspider-1.0/crypto-md5.js:
        * tests/sunspider-1.0/crypto-sha1.js:
        * tests/sunspider-1.0/date-format-tofte.js:
        * tests/sunspider-1.0/date-format-xparb.js:
        * tests/sunspider-1.0/math-cordic.js:
        * tests/sunspider-1.0/math-partial-sums.js:
        (partial):
        * tests/sunspider-1.0/math-spectral-norm.js:
        * tests/sunspider-1.0/regexp-dna.js:
        * tests/sunspider-1.0/string-base64.js:
        * tests/sunspider-1.0/string-fasta.js:
        (fastaRepeat):
        (fastaRandom):
        * tests/sunspider-1.0/string-tagcloud.js:
        * tests/sunspider-1.0/string-unpack-code.js:
        * tests/sunspider-1.0/string-validate-input.js:

2013-04-11  Filip Pizlo  <fpizlo@apple.com>

        Get rid of the 10ms delay between test executions
        https://bugs.webkit.org/show_bug.cgi?id=114458
        <rdar://problem/13631112>

        Reviewed by Darin Adler and Geoffrey Garen.
        
        More details on this in the bug. Long story short, I don't know why the 10ms delay is
        there, and it appears to be the root of some noisyness and unreliability in the results.
        Removing it makes results more consistent, which is a good thing.

        * resources/driver-TEMPLATE.html:

2013-01-16  Eric Seidel  <eric@webkit.org>

        Remove --shark* support from sunspider/run-sunspider now that Shark is dead
        https://bugs.webkit.org/show_bug.cgi?id=99512

        Reviewed by Darin Adler.

        I tried to use --instruments, but that also seems broken (in the same way before/after this patch).

        * sunspider:
        (runTestsOnce):

2012-08-02  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, revert debugging stuff I landed in http://trac.webkit.org/changeset/124557
        by accident.

        * tests/v8-v6/v8-crypto.js:
        (am1):
        (am2):
        (am3):
        (am4):
        (bnpCopyTo):
        (bnpFromString):
        (bnpClamp):

2012-03-11  Maciej Stachowiak  <mjs@apple.com>

        Add --instruments option to sunspider to profile with Instruments
        https://bugs.webkit.org/show_bug.cgi?id=80783

        Reviewed by Filip Pizlo.

        * resources/TimeProfile20us.tracetemplate: Added.
        * sunspider:
        (runTestsOnce):

2011-11-15  Andy Wingo  <wingo@igalia.com>

        Extend sunspider driver to be able to run kraken
        https://bugs.webkit.org/show_bug.cgi?id=71799

        Reviewed by Filip Pizlo.

        * resources/sunspider-standalone-driver.js: Try to load a -data
        file.  If that succeeds, we have a kraken-like test, so we time
        the test using `load'.  Otherwise fall back to using `run'.

2011-08-11  Mark Rowe  <mrowe@apple.com>

        Fix sunspider-compare-results to default to the same suite version as the sunspider script.

        Rubber-stamped by Maciej Stachowiak.

        * sunspider-compare-results:

2011-07-02  Maciej Stachowiak  <mjs@apple.com>

        Update SunSpider versioning to 1.0
        https://bugs.webkit.org/show_bug.cgi?id=63870

        Reviewed by Dan Bernstein.

        * hosted/sunspider.html:
        * hosted/versions.html:
        * resources/driver-TEMPLATE.html:
        * resources/results-TEMPLATE.html:
        * sunspider:

2011-07-02  Maciej Stachowiak  <mjs@apple.com>

        Sunspider 0.9.1 harness doesn't actually close() its test documents
        https://bugs.webkit.org/show_bug.cgi?id=47045

        Reviewed by Daniel Bates.

        * hosted/versions.html:
        * resources/driver-TEMPLATE.html:

2011-07-02  Maciej Stachowiak  <mjs@apple.com>

        Not Reviewed. 
        
        Fix obviou typo in previous commit.

        * tests/sunspider-1.0/bitops-bitwise-and.js:

2011-07-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders Carlsson.

        SunSpider: all four bitops benchmarks can be replaced with NOP
        https://bugs.webkit.org/show_bug.cgi?id=38446

        * tests/sunspider-1.0/bitops-3bit-bits-in-byte.js:
        (TimeFunc): Save the result.
        * tests/sunspider-1.0/bitops-bits-in-byte.js:
        (TimeFunc): Save the result.
        * tests/sunspider-1.0/bitops-bitwise-and.js: More explicitly
        save the results.
        * tests/sunspider-1.0/bitops-nsieve-bits.js:
        (sieve): Save the result.

2011-07-02  Maciej Stachowiak  <mjs@apple.com>

        SunSpider: string-validate-input.js uses an undeclared variable named 'name', which is a DOM API
        https://bugs.webkit.org/show_bug.cgi?id=60937

        Reviewed by Dan Bernstein.

        * tests/sunspider-1.0/string-validate-input.js:
        (doTest): Rename the variable to username

2011-07-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        SunSpider: The main function of math-cordic is dead code
        https://bugs.webkit.org/show_bug.cgi?id=63863
        
        Try to prevent math-cordic from being eliminated as dead code or
        compiled down to a constant.

        * tests/sunspider-1.0/math-cordic.js:
        (cordicsincos):
        (cordic):

2011-06-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        Create sunspider-1.0 directory in preparation for fixing a bunch of bugs
        https://bugs.webkit.org/show_bug.cgi?id=63782

        * make-hosted: Learn about the new directory.
        * tests/sunspider-1.0: Copied from PerformanceTests/SunSpider/tests/sunspider-0.9.1.

2010-11-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Gavin Barraclough.

        Improved accuracy of command-line SunSpider.

        * resources/sunspider-standalone-driver.js: Use the returned number of
        elapsed milliseconds from "run" and "checkSyntax" instead of measuring
        ourselves, for slightly more accurate numbers.

2010-09-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Mark Rowe.
        https://bugs.webkit.org/show_bug.cgi?id=45924

        Modify the SunSpider harness to allow a path to be passed to the --suite
        argument, supress the normal prepend-"tests/" behaviour for suite names
        containing a '/'.

        Also wrap the code in an anonymous function to move variables out of global
        scope (currently the harness cannot handle running tests the overwrite the
        variable 'j').

        * resources/sunspider-standalone-driver.js:
        * sunspider:

2010-08-27  Michael Saboff  <msaboff@apple.com>

        Reviewed by Stephanie Lewis.

        Added version 5 and version 6 of V8 tests with modifications similar
        to the version 4 tests so they'll work with the SunSpider test harness.
        Note that these files are external source and therefore don't conform 
        to WebKit coding standards.
        https://bugs.webkit.org/show_bug.cgi?id=44638

        * tests/v8-v5: Added.
        * tests/v8-v5/LIST: Added.
        * tests/v8-v5/v8-crypto.js: Added.
        * tests/v8-v5/v8-deltablue.js: Added.
        * tests/v8-v5/v8-earley-boyer.js: Added.
        * tests/v8-v5/v8-raytrace.js: Added.
        * tests/v8-v5/v8-regexp.js: Added.
        * tests/v8-v5/v8-richards.js: Added.
        * tests/v8-v5/v8-splay.js: Added.
        * tests/v8-v6: Added.
        * tests/v8-v6/LIST: Added.
        * tests/v8-v6/v8-crypto.js: Added.
        * tests/v8-v6/v8-deltablue.js: Added.
        * tests/v8-v6/v8-earley-boyer.js: Added.
        * tests/v8-v6/v8-raytrace.js: Added.
        * tests/v8-v6/v8-regexp.js: Added.
        * tests/v8-v6/v8-richards.js: Added.
        * tests/v8-v6/v8-splay.js: Added.

2010-07-15  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        http://bugs.webkit.org/show_bug.cgi?id=42406
        Output location of results file.

        * sunspider:

2010-05-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark Rowe.

        Browser-hosted version of SunSpider runs tests twice as many times as advertised
        https://bugs.webkit.org/show_bug.cgi?id=39201

        * make-hosted: Make sure to reset test list after every test suite.

2010-05-07  Adam Roben  <aroben@apple.com>

        Fix typo in sunspider-compare-results.js that caused incorrect
        two-sample t statistics to be computed

        Fixes <http://webkit.org/b/38768> SunSpider computes incorrect
        two-sample t statistics

        Reviewed by Darin Adler.

        * resources/sunspider-compare-results.js:
        (sunspiderCompareResults.resultLine): Fixed the calculation of the t
        variable to match the definition of a two-sample t statistic. Looks
        like this was just a simple typo.

2010-04-05  Darin Adler  <darin@apple.com>

        Updated the ignore property for changes to the contents here.

        * .: Modified property svn:ignore.

2010-02-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        Add sunspider-0.9.1 to the site in preparation for announcing it.
        https://bugs.webkit.org/show_bug.cgi?id=35206

        * hosted/sunspider.css: Remove tabs, which I noticed where present while
        copying to the WebKitSite directory.

2010-01-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Sunspider parse-only tests don't run
        https://bugs.webkit.org/show_bug.cgi?id=33489

        Fix parse-only test list

        * tests/parse-only/LIST:

2009-12-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele Peterson.

        Make SunSpider version more prominent in the title
        https://bugs.webkit.org/show_bug.cgi?id=32574

        * hosted/sunspider.html:
        * hosted/versions.html:
        * resources/driver-TEMPLATE.html:
        * resources/results-TEMPLATE.html:

2009-12-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Make SunSpider refuse to compare results across content versions
        https://bugs.webkit.org/show_bug.cgi?id=32573
        
        The results URL now includes a version indicator, and compare mode
        will refuse to compare between versions.

        * resources/driver-TEMPLATE.html:
        * resources/results-TEMPLATE.html:

2009-12-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Some Browser-hosted SunSpider files are not valid HTML5
        https://bugs.webkit.org/show_bug.cgi?id=32536
        
        Made various fixes to validate as HTML5 with no warnings (mainly removing bogus
        close tags and adding a meta charset declaration).

        * hosted/sunspider.html:
        * hosted/versions.html:
        * resources/TEMPLATE.html:
        * resources/driver-TEMPLATE.html:
        * resources/results-TEMPLATE.html:

2009-12-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric Seidel.

        Make sunspider-0.9.1 the default content set (both command-line and hosted)
        https://bugs.webkit.org/show_bug.cgi?id=32537

        * hosted/sunspider.html: Change default suite link.
        * sunspider: Change default suite.
        * sunspider-compare-results: Likewise.

2009-12-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        in-browser SunSpider suffers excessive penalty under power management
        https://bugs.webkit.org/show_bug.cgi?id=32505
        
        I have made a few changes to address this:
        
        1) Change how browser-hosted SunSpider loads tests - preload the content and write it in with
        document.write to reduce triggering of progress UI.
        2) Reduce time between tests to 10ms from 500ms, so that power management doesn't keep the CPU
        stepped all the way down the whole time.
        3) Run the test cycle an extra time for warmup before the runs that count.

        * hosted/sunspider-record-result.js: Removed.
        * make-hosted:
        * resources/TEMPLATE.html:
        * resources/driver-TEMPLATE.html:

2009-12-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Gavin Barraclough.

        SunSpider/tests/string-base64.js does not compute a valid base64 encoded string
        https://bugs.webkit.org/show_bug.cgi?id=16806

        Based on a patch by Eric Seidel.
        
        Fix the base64 computation to actually compute correct results. The impact on runtime of
        the test is pretty small, but noticeable for some browsers. But at least it's not
        doing a wrong and meaningless computation any more.
        
        * tests/sunspider-0.9.1/string-base64.js:
        ():
        (base64ToString):

2009-12-13  Maciej Stachowiak  <mjs@apple.com>

        Fixing commit error...
        
        I accidentally committed my last patch in a form that broke Web-hosted SunSpider. Fixing.

        * resources/driver-TEMPLATE.html:

2009-12-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        Use JSON.parse instead of eval for Web-hosted SunSpider results processing
        https://bugs.webkit.org/show_bug.cgi?id=32490

        * hosted/json2.js: Added. Incorporated from json.org
        * resources/driver-TEMPLATE.html: Fix an HTML validation bug I noticed.
        * resources/results-TEMPLATE.html: Use JSON.parse instead of eval to process
        results.

2009-12-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        Enable Web-hosted version of SunSpider to handle multiple versions
        https://bugs.webkit.org/show_bug.cgi?id=32478

        * make-hosted: Now generate the hosted version to be able to run both the
        0.9 and the 0.9.1 test suites.
        * hosted: Modified property svn:ignore.
        * hosted/sunspider-driver.html: Removed.
        * hosted/sunspider-results.html: Removed.
        * hosted/sunspider.html:
        * hosted/versions.html: Added.
        * resources/TEMPLATE.html:
        * resources/driver-TEMPLATE.html: Copied from hosted/sunspider-driver.html.
        * resources/driver-TEMPLATE.html: Copied from hosted/sunspider-results.html.

2009-12-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        Give command-line sunspider the ability to handle multiple suites and versions
        https://bugs.webkit.org/show_bug.cgi?id=32477
        
        Each suite/version's set of tests are now in a separate subdirectory of tests/, with a file named LIST
        enumerating the tests. Current suites are:
        
        sunspider-0.9 - riginal SunSpider content 
        sunspider-0.9.1 - SunSpider suite with a few tests fixed (and a few more to come)
        ubench - "ubench" microbenchmark suite
        v8-v4 - version 4 of the v8 benchmark
        parse-only - some parser tests
        
        Sunspider can now be run with the --suite= parameter to select a
        suite. The default is --suite=sunspider-0.9.

        * .: Modified property svn:ignore to ignore new results directories.
        * make-hosted: Generate based on sunspider-0.9 suite.
        * resources/TEMPLATE.html: Fix an HTML compliance problem.
        * resources/sunspider-standalone-driver.js: Become aware of suite names.
        * sunspider: Modified to handle multiple suites as described above.
        * sunspider-compare-results: ditto
        * tests/LIST: Moved to tests/sunspider-0.9/ and tests/sunspider-0.9.1/
        * tests/LIST-PARSE-ONLY: Moved to parse-only/LIST
        * tests/LIST-UBENCH: Removed.
        * tests/LIST-V8: Removed.
        * tests/3d-cube.js: Moved to tests/sunspider-0.9 and tests/sunspider-0.9.1
        * tests/3d-morph.js: ditto
        * tests/3d-raytrace.js: ditto
        * tests/access-binary-trees.js: ditto
        * tests/access-fannkuch.js: ditto
        * tests/access-nbody.js: ditto
        * tests/access-nsieve.js: ditto
        * tests/bitops-3bit-bits-in-byte.js: ditto
        * tests/bitops-bits-in-byte.js: ditto
        * tests/bitops-bitwise-and.js: ditto
        * tests/bitops-nsieve-bits.js: ditto
        * tests/controlflow-recursive.js: ditto
        * tests/crypto-aes.js: ditto
        * tests/crypto-md5.js: ditto
        * tests/crypto-sha1.js: ditto
        * tests/date-format-tofte.js: ditto
        * tests/date-format-xparb.js: ditto
        * tests/math-cordic.js: ditto
        * tests/math-partial-sums.js: ditto
        * tests/math-spectral-norm.js: ditto
        * tests/regexp-dna.js: ditto
        * tests/string-base64.js: ditto
        * tests/string-fasta.js: ditto
        * tests/string-tagcloud.js: ditto
        * tests/string-unpack-code.js: ditto
        * tests/string-validate-input.js: ditto
        * tests/sunspider-0.9/: Added
        * tests/sunspider-0.9/*.js: Moved from one level up
        * tests/sunspider-0.9.1: Added.
        * tests/sunspider-0.9.1/*.js: Moved from one level up.
        * tests/v8-crypto.js: Moved to v8-v4/ directory.
        * tests/v8-deltablue.js: ditto
        * tests/v8-earley-boyer.js: ditto
        * tests/v8-raytrace.js: ditto
        * tests/v8-regexp.js: ditto
        * tests/v8-richards.js: ditto
        * tests/v8-splay.js: ditto
        * tests/v8-v4: Added.

2009-09-30  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Platform specific null device replaced with a platform independent.
        https://bugs.webkit.org/show_bug.cgi?id=29544

        * sunspider: Using File::Spec->devnull() instead of /dev/null and NUL.

2009-09-21  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Maciej Stachowiak.

        [Qt] Make sunspider script work on Windows platform.
        https://bugs.webkit.org/show_bug.cgi?id=29544

        * sunspider:
        Using platform specific null device instead of /dev/null.

2009-06-19  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=26540
        Currently the SunSpider test driver lacks an option to run a test suite that
        will test JavaScriptCore parsing performance only.  This patch adds just such
        a test suite and option to SunSpider as well as the jsc test shell.  I've included
        three large javascript source files found in the wild: jquery, mootools and prototype.
        Combined with the concatenation of all three, these form a new testsuite to measure
        and test pure JavaScriptCore parsing performance.

        * resources/sunspider-standalone-driver.js:
          Load the js with parse-only flag if it is part of the parse-only suite.
        * sunspider:
          Add the parse-only suite to the list of options.
        * sunspider-compare-results:
          Add the parse-only suite to the list of options.
        * tests/LIST-PARSE-ONLY: Added.
        * tests/parse-only/concat-jquery-mootools-prototype.js: Added.
          A very large concatenation of the scripts found below.  This js takes ~30ms to parse on my machine.
        * tests/parse-only/jquery-1.3.2.js: Added.
          Latest version from jquery.com.
        * tests/parse-only/mootools-1.2.2-core-nc.js: Added.
          Latest version from mootools.net.
        * tests/parse-only/prototype-1.6.0.3.js: Added.
          Latest version from prototypejs.org.

2009-06-13  Steve Falkenburg  <sfalken@apple.com>

        Update V8 benchmark to version 4.
        
        Reviewed by Cameron Zwarich.

        * tests/LIST-V8:
        * tests/v8-crypto.js:
        * tests/v8-deltablue.js:
        * tests/v8-earley-boyer.js:
        * tests/v8-raytrace.js:
        * tests/v8-regexp.js: Added.
        * tests/v8-richards.js:
        * tests/v8-splay.js: Added.

2009-05-26  Olivier DOLE  <odole@pleyo.com>

        Reviewed by Maciej.

        Store sunspider test suite results in a specific directory for each
        different type of benchmark (sunspider, V8 or ubench).

        * sunspider:
        * sunspider-compare-results:

2009-05-12  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * SunSpider.make:

2009-05-11  Steve Falkenburg  <sfalken@apple.com>

        Include SunSpider tests in production builds.
        
        Reviewed by Adam Roben.

        * SunSpider.make: Added.
        * xcopy.excludes: Added.

2009-03-04  Oliver Hunt  <oliver@apple.com>

        Added a few more tests to ubench

        RS=Gavin Barraclough

        Adding a couple of test to cover too few and too many arguments.  This
        is needed to prevent regressions in all call paths from my current refactoring.

        * tests/LIST-UBENCH:
        * tests/ubench/function-correct-args.js: Added.
        (f):
        * tests/ubench/function-excess-args.js: Added.
        (f):

2008-10-30  Zoltan Horvath  <Horvath.Zoltan.6@stud.u-szeged.hu>

        Fix a bug where when V8's or UBENCH's test suite list file is missing
        the error message is suggesting that SunSpider's list file is missing.

        Reviewed by Sam Weinig.

        * sunspider:
        (loadTestsList): Fix the error message to use the right list name.

2008-10-07  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=18989

        Remove global substitution from SunSpider regexp test, since only Firefox was honoring it and
        we want all browsers to be doing the same thing on the test.

        Reviewed by Maciej

        * tests/regexp-dna.js:

2008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Rubber-stamped by Maciej Stachowiak.

        The bleeding edge branch of V8 now supports passing fileanmes after
        '-f', so the SunSpider script should be changed to do this again.
        This allows all 3 major JavaScript engines to be used with the
        unmodified SunSpider script.

        * sunspider:

2008-09-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Add a '--args' option to SunSpider, so that we can pass '-j' to TraceMonkey
        and '--expose-gc' to V8. Also, rename the '--v8' option to '--v8-suite' and
        correct the punctuation in its documentation.

        * sunspider:

2008-09-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Bug 20616: Incorporate V8 benchmarks in testing
        <https://bugs.webkit.org/show_bug.cgi?id=20616>

        This is a first attempt at running the V8 benchmarks within SunSpider,
        with the --v8 option. The number of iterations is fixed for each
        benchmark, and was chosen to make each of the benchmarks run between
        500 ms and 600 ms in V8 on my machine, a 2.16 GHz MacBook Pro.

        * sunspider:
        * tests/LIST-V8: Added.
        * tests/v8-crypto.js: Added.
        * tests/v8-deltablue.js: Added.
        * tests/v8-earley-boyer.js: Added.
        * tests/v8-raytrace.js: Added.
        * tests/v8-richards.js: Added.

2008-09-02  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Not reviewed.

        Remove a local change that was accidentally committed in r36034.

        * resources/sunspider-standalone-driver.js:

2008-09-02  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Rubber-stamped by Oliver Hunt.

        Make SunSpider work with JavaScript shells that don't take filenames
        after a '-f' argument.

        * sunspider:

2008-06-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Timothy.

        Remove the --squirrelfish option from SunSpider, as it is no longer needed.

        * sunspider:
        * tests/LIST-SQUIRRELFISH: Removed.

2008-06-03  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Mark Rowe.

        Roll out r31215 - with Mac OS X 10.5.3, there is no need to pause update daemon any more.

        * sunspider:

2008-04-15  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Oliver.
        
        - add newly working tests to squirrelfish list

        * tests/LIST-SQUIRRELFISH: Add 3d-raytrace and string-unpack-code

2008-04-14  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Oliver.
        
        - move ubench tests properly.

        * tests/ubench: Added.
        * tests/ubench/function-closure.js: Added.
        * tests/ubench/function-empty.js: Added.
        * tests/ubench/function-missing-args.js: Added.
        * tests/ubench/function-sum.js: Added.
        * tests/ubench/loop-empty-resolve.js: Added.
        * tests/ubench/loop-empty.js: Added.
        * tests/ubench/loop-sum.js: Added.

2008-04-14  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Oliver.

        * sunspider: Don't force --runs=1 in squirrelfish mode any more.

2008-04-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - make --squirrelfish mode use the real harness, but a reduced set of tests

        Also add a new ubench mode which runs the older squirrelfish microbenchmarks.

        * sunspider:
        * tests/LIST-SQUIRRELFISH:
        * tests/LIST-UBENCH: Added.
        * tests/squirrelfish: Moved to tests/ubench

2008-04-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Removed an unused test.

        * tests/squirrelfish/loop-resolve.js: Removed.

2008-04-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        Add newly runnable tests to --squirrelfish mode.

        * tests/LIST-SQUIRRELFISH:

2008-04-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        A little more love for --squirrelfish mode:
        
        Fixed a misplaced sort. Results properly sort now.
        
        Added a test list just for squirrelfish, and updated it to include
        all currently passing SunSpider tests.
        
        Fixed the pruning regexp to match 3d-morph.js.

        * sunspider:

2008-03-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        --squirrelfish mode: pared down tests for squirrelfish to chew on.

        * sunspider:
        * tests/LIST:
        * tests/squirrelfish: Added.
        * tests/squirrelfish/function-closure.js: Added.
        * tests/squirrelfish/function-empty.js: Added.
        * tests/squirrelfish/function-missing-args.js: Added.
        * tests/squirrelfish/function-sum.js: Added.
        * tests/squirrelfish/loop-empty-resolve.js: Added.
        * tests/squirrelfish/loop-empty.js: Added.
        * tests/squirrelfish/loop-resolve.js: Added.
        * tests/squirrelfish/loop-sum.js: Added.

2008-03-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff.

        * sunspider: Pause update daemon on Darwin to make results reliable
        again (workaround for <rdar://problem/5811127>).

2008-02-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        * sunspider: add an error message when ./tests/LIST is not found

2007-12-29  Alp Toker  <alp@atoker.com>

        Fix typo.

        * hosted/sunspider.html:

2007-12-29  Alp Toker  <alp@atoker.com>

        Reviewed by Maciej.

        Provide the current URL in the SunSpider results page. Useful for
        copying benchmark results out of browsers without a location bar or
        where the location bar can't handle long URLs.

        * hosted/sunspider-results.html:

2007-12-20  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        * sunspider: increase default number of runs for more accurate numbers

2007-12-18  Mark Rowe  <mrowe@apple.com>

        Fix typo.

        * hosted/sunspider.html:

2007-12-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        - give an extra digit of precision for small differences.

        * resources/sunspider-compare-results.js:

2007-12-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        - work around IE layout bugs

        * hosted/sunspider.css:

2007-12-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.
        
        - fix compare feature

        * hosted/sunspider-results.html:

2007-12-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.
        
        - Change the format of the output URL to be shorter, to meet IE constraints

        * hosted/sunspider-driver.html:
        * hosted/sunspider-results.html:

2007-12-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - Add some explanatory test and a dumb logo to SunSpider web hosted version

        * hosted/sunspider-driver.html:
        * hosted/sunspider-results.html:
        * hosted/sunspider.css:
        * hosted/sunspider.html:

2007-12-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - Make the web-hosted version of SunSpider look a little bit less drab.

        * hosted/sunspider-driver.html:
        * hosted/sunspider-results.html:
        * hosted/sunspider.css: Added.
        * hosted/sunspider.html:
        * resources/TEMPLATE.html:

2007-12-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam.
        
        - Change sunspider-compare-results output from showing "% faster" values to "x as fast" values.
        
        A sample of what new-style results would look like:
        
        TEST                   COMPARISON            FROM                 TO             DETAILS
        ...
        ** TOTAL **:           1.41x as fast     6613.6ms +/- 0.1%   4703.0ms +/- 0.1%     significant
        ...
            3bit-bits-in-byte: *1.36x as slow*     88.8ms +/- 0.6%    121.1ms +/- 0.6%     significant
        
        * resources/sunspider-compare-results.js:

2007-11-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        * sunspider: add --shark-cache for L2 Cache Miss profiling

2007-11-09  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=15925
        SunSpider should check for Shark being installed

        * sunspider: Explicitly test that shark command line tool is installed.

2007-11-04  Darin Adler  <darin@apple.com>

        * hosted/sunspider.html: Tweaked formatting a bit.

2007-11-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - Add compare mode and a description of the benchmark to the hosted version.

        * hosted/sunspider-results.html: Add compare mode - you can just paste in another results URL.
        * hosted/sunspider.html: Added intro text.
        * make-hosted: Copy new file.
        * resources/sunspider-compare-results.js: Made more reusable by putting the implementation in
        a function.
        * resources/sunspider-standalone-compare.js: Added. Calls the function in the way standalone mode
        expects.
        * sunspider-compare-results: Use sunspider-standalone-compare.js.

2007-11-02  Darin Adler  <darin@apple.com>

        * sunspider: Changed "--base" to "--set-baseline".

2007-11-02  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * sunspider: Added a "--base" option that records the current test as a baseline.
        Moved the code to find the newest .mshark file into a function (since I needed to use
        it in the other script and I prefer to copy/paste a function).

        * sunspider-compare-results: Added logic to compare the baseline with the last
        run when you don't pass any parameters.

2007-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        - Added list of ECMAScript3 features that SunSpider does not cover currently.

        * UNCOVERED: Added.

2007-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - Give better error messages when sunspider-compare-results fails

        * sunspider-compare-results:

2007-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.
        
        - fix Date tests to work in command-line SpiderMonkey

        * tests/date-format-tofte.js:
        * tests/date-format-xparb.js:

2007-10-29  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * sunspider: Added --shark20 option, to run Shark at its highest sample
        resolution instead of its default.

2007-10-28  Adam Roben  <aroben@apple.com>

        Fix SunSpider on Windows

        Reviewed by Eric.

        * sunspider: Don't use colons in filenames.

2007-10-28  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * resources/sunspider-analyze-results.js: Tweak the output format a little.
        Change so that when there's only one run we don't write out confidence
        intervals at all rather than writing "NaN" over and over again.

        * sunspider: Use the time and date as a suffix on the results file, that way
        all the results are left behind in the tmp directory. This will make it easy
        for us to add features that compare past results in the future. Also rename
        the .mshark files using the same scheme.

        * sunspider-compare-results: Relax the parsing rules so we can parse the
        results file exactly as it's emitted from sunspider.

2007-10-25  Adam Roben  <aroben@apple.com>

        Strip carriage returns from results

        Carriage returns were screwing up sunspider-compare-results on
        Windows.

        Rubberstamped by Oliver.

        * sunspider:

2007-10-24  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        * sunspider: Open the profile in shark after completing a run.
        * sunspider-compare-results: Tiny perl tweaks.

2007-10-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - Don't hardcode my path to testkjs
        
        * sunspider-compare-results:

2007-10-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.
        
        - Add a compare script to compare results, and improve formatting of standard results a bit.

        * resources/sunspider-analyze-results.js:
        * resources/sunspider-compare-results.js: Added.
        * sunspider-compare-results: Added.

2007-10-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        * resources/sunspider-analyze-results.js: Do the error range
        properly, using the t-distribution instead of 1.96 (which was
        based on the normal distribution).
        
        * sunspider: Print results in a way that will be friendlier to the
        soon-to-come compare mode.

2007-10-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Review.
        
        - add more tests (probably the final set for now)
        
        Already balanced. Added date, regexp, control flow, and a few
        more string and object/array access tests.
        
        * tests/LIST:
        * tests/access-fannkuch.js: Added.
        * tests/access-nbody.js: Added.
        * tests/controlflow-recursive.js: Added.
        * tests/date-format-tofte.js: Added.
        * tests/date-format-xparb.js: Added.
        * tests/regexp-dna.js: Added.
        * tests/string-validate-input.js: Added.

2007-10-21  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        * sunspider: make --shark only sample from testkjs

2007-10-21  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.
        
        - added crypto tests (already balanced)

        * tests/LIST:
        * tests/crypto-aes.js: Added.
        * tests/crypto-md5.js: Added.
        * tests/crypto-sha1.js: Added.

2007-10-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.
        
        - rebalance new tests
        
        Scaled the new tests so they take 400-600ms on a reasonably normal user setup:
        
        Internet Explorer 7, Window XP, Dell Latitude D810 with a 2.13GHz Pentium M

        This balances them with the existing tests.

        * tests/access-binary-trees.js:
        * tests/access-nsieve.js:
        * tests/bitops-nsieve-bits.js:
        * tests/math-partial-sums.js:
        * tests/math-spectral-norm.js:
        * tests/string-fasta.js:

2007-10-20  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.
        
        Add improved argument handling to sunspider, including
        --runs=<number>, --tests=<pattern, --shark, and --help
        Also re-factor code into subroutines

        * sunspider: improved argument handling

2007-10-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        - Add more new tests, mostly from the computer language shootout. Not normalized yet.
        
        * TODO:
        * tests/LIST:
        * tests/access-binary-trees.js: Added.
        * tests/access-nsieve.js: Added.
        * tests/bitops-nsieve-bits.js: Added.
        * tests/math-partial-sums.js: Added.
        * tests/math-spectral-norm.js: Added.
        * tests/string-fasta.js: Added.

2007-10-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        * TODO: Updated to note areas that are now well-covered.
        
        - Change the tests and the driver to avoid leaving large object
        graphs hanging around, since that throws off the subsequent tests.
        
        * resources/sunspider-standalone-driver.js:
        * tests/3d-cube.js:
        * tests/3d-morph.js:
        * tests/3d-raytrace.js:
        * tests/bitops-bitwise-and.js:
        * tests/string-base64.js:
        * tests/string-tagcloud.js:

2007-10-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Nikolas.
        
        - Rebalance test complexity.
        
        Scaled all the tests so they take 400-600ms on a reasonably normal user setup:
        
        Internet Explorer 7, Window XP, Dell Latitude D810 with a 2.13GHz Pentium M

        However, for some tests, IE7 was a huge outlier compared to other
        major browsers. For those tests, I used Firefox 2.0.0.8 on the
        same OS and hardware as a normalization basis.
        
        * tests/3d-morph.js:
        * tests/3d-raytrace.js:
        * tests/bitops-3bit-bits-in-byte.js:
        * tests/bitops-bits-in-byte.js:
        * tests/bitops-bitwise-and.js:
        * tests/math-cordic.js:
        * tests/string-base64.js:
        * tests/string-tagcloud.js:
        * tests/string-unpack-code.js:

2007-10-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - Fix the browser-hosted driver to be compatible with Safari 2

        * hosted/sunspider-driver.html:

2007-10-20  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Hyatt.
        
        - Add BSD license notice to cordic test, the original author said to do so.

        * tests/math-cordic.js:

2007-10-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        - Support Windows and Windows browsers.

        * hosted/sunspider-results.html: Display results correctly in IE.
        * sunspider: tweaks to work on Windows, and with spaces in the path.

2007-10-18  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Oliver.

        * tests/string-tagcloud.js: Remove stray print()

2007-10-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        Add some string test cases.

        * tests/string-base64.js: Added. Does base64 encoding and decoding.
        * tests/string-tagcloud.js: Added. Parses a JSON string and
        generates tagcloud HTML markup based on the data.        
        * tests/string-unpack-code.js: Added. Unpack compressed versions of
        four of the most popular JavaScript libraries.
        * tests/LIST: Added the new tests.

2007-10-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        * TODO: Updated with info on how to do the stats properly.

        * hosted/sunspider-driver.html: Reduce timeout from 500 to 200 to
        avoid overly slowing down the benchmark.

        Added some 3D-related test cases.
        
        * tests/3d-cube.js: Added.
        * tests/3d-morph.js: Added.
        * tests/3d-raytrace.js: Added.
        * tests/LIST:

2007-10-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - New JavaScript benchmark
        http://bugs.webkit.org/show_bug.cgi?id=15515
        
        A start on a new JavaScript benchmark, with standalone and
        browser-hosted drivers.
        
        The test content is still incomplete and the drivers could use
        some more features but there is enough here to make a good start.
        
        The drivers compute a 95% confidence interval on the mean for the
        whole test, each category, and each individual test to make it
        easier to tell whether differences are statistically
        significant. The confidence interval can be narrowed by running
        the test more times.
        
        * TODO: Added. Remaining things that need to be done.
        * sunspider: Added. Perl script that acts as the standalone test driver.
        * resources/sunspider-standalone-driver.js: Added. JavaScript part
        of standalone test driver.
        * resources/sunspider-analyze-results.js: Added. JavaScript statistical
        analysis code.
        * resources/TEMPLATE.html: Added. Template for browser-hosted tests.
        * make-hosted: Added. Script to generate browser-hosted tests.
        * hosted/sunspider.html: Added. Start page for browser-hosted test.
        * hosted/sunspider-driver.html: Added. Driver for browser-hosted tests.
        * hosted/sunspider-results.html: Added. Results page for browser-hosted
        tests.
        * hosted/sunspider-record-result.js: Added. Helper file for browser-hosted
        tests.
        * tests/LIST: Added. List of tests to use.
        * tests/bitops-3bit-bits-in-byte.js: Added. Some initial test content.
        * tests/bitops-bits-in-byte.js: Added. Ditto.
        * tests/bitops-bitwise-and.js: Added. Ditto.
        * tests/math-cordic.js: Added. Ditto.

