haikuwebkit/PerformanceTests/RexBench/unipoker_benchmark.js

69 lines
2.5 KiB
JavaScript
Raw Permalink Normal View History

Add a Unicode test to RexBench that matches non-BMP characters https://bugs.webkit.org/show_bug.cgi?id=175697 Reviewed by JF Bastien. Added a new sub test that simulates 5 card stud poker. This test uses the Unicode playing cards code points, U+1F0A1..U+1F0DE, as the card representation. The scoring of hands is done using three regular expressions, one to check for a flush, one to check for straights and one to check for pairs, three of a kind and four of a kind. * RexBench/UniPoker: Added. * RexBench/UniPoker/benchmark.js: Added. (UniPokerBenchmark): (UniPokerBenchmark.prototype.setup.): (UniPokerBenchmark.prototype.setup.Math.random): (UniPokerBenchmark.prototype.setup): (UniPokerBenchmark.prototype.runOnce): (UniPokerBenchmark.prototype.validate): * RexBench/UniPoker/expected.js: Added. (PlayerExpectation): (PlayerExpectation.prototype.validate): * RexBench/UniPoker/poker.js: Added. (CardDeck): (CardDeck.prototype.newDeck): (CardDeck.prototype.shuffle): (CardDeck.prototype.dealOneCard): (CardDeck.cardRank): (CardDeck.cardName): (Hand): (Hand.prototype.clear): (Hand.prototype.takeCard): (Hand.prototype.score): (Hand.prototype.get rank): (Hand.prototype.toString): (Player): (Player.prototype.scoreHand): (Player.prototype.wonHand): (Player.prototype.get name): (Player.prototype.get hand): (Player.prototype.get wins): (Player.prototype.get handTypeCounts): (playHands): * RexBench/about.html: * RexBench/cli.js: * RexBench/glue.js: (driver.reportResult): * RexBench/index.html: * RexBench/unipoker_benchmark.js: Added. Canonical link: https://commits.webkit.org/192362@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@220893 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-08-18 00:56:59 +00:00
/*
* Copyright (C) 2017 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 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 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.
*/
"use strict";
const UniPokerBenchmarkCode = String.raw`
<script src="benchmark.js"></script>
<script src="UniPoker/poker.js"></script>
<script src="UniPoker/expected.js"></script>
<script src="UniPoker/benchmark.js"></script>
<script>
"use strict";
var results = [];
var benchmark = new UniPokerBenchmark();
var numIterations = 20;
benchmark.runIterations(numIterations, results);
reportResult(results);
</script>`;
let runUniPokerBenchmark = null;
if (!isInBrowser) {
let sources = [
"benchmark.js"
, "UniPoker/poker.js"
, "UniPoker/expected.js"
, "UniPoker/benchmark.js"
];
runUniPokerBenchmark = makeBenchmarkRunner(sources, "UniPokerBenchmark", 20);
}
const UniPokerBenchmarkRunner = {
name: "UniPoker",
code: UniPokerBenchmarkCode,
run: runUniPokerBenchmark,
cells: {}
};
if (isInBrowser) {
UniPokerBenchmarkRunner.cells = {
firstIteration: document.getElementById("UniPokerFirstIteration"),
averageWorstCase: document.getElementById("UniPokerAverageWorstCase"),
steadyState: document.getElementById("UniPokerSteadyState"),
message: document.getElementById("UniPokerMessage")
};
}