Last active
September 23, 2016 14:04
-
-
Save caitp/db6eec57821fc0982709544b04b950bd to your computer and use it in GitHub Desktop.
v8 microbenchmarks for string iterators (https://codereview.chromium.org/2358263002)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Copyright 2016 the V8 project authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
new BenchmarkSuite('StringIterators-Spread_OneByteShort', [1000], [ | |
new Benchmark('test', false, false, 0, | |
Spread_OneByteShort, Spread_OneByteShortSetup, | |
Spread_OneByteShortTearDown), | |
]); | |
var result; | |
var string; | |
function Spread_OneByteShortSetup() { | |
result = undefined; | |
string = "Alphabet"; | |
string += "-"; | |
string += "Soup"; | |
} | |
function Spread_OneByteShort() { | |
result = [...string]; | |
} | |
function Spread_OneByteShortTearDown() { | |
var expected = "A|l|p|h|a|b|e|t|-|S|o|u|p"; | |
if (!Array.isArray(result) || result.join("|") !== expected) | |
throw new Error("Test is broken"); | |
return true; | |
} | |
// ---------------------------------------------------------------------------- | |
new BenchmarkSuite('StringIterators-Spread_TwoByteShort', [1000], [ | |
new Benchmark('test', false, false, 0, | |
Spread_TwoByteShort, Spread_TwoByteShortSetup, | |
Spread_TwoByteShortTearDown), | |
]); | |
var result; | |
var string; | |
function Spread_TwoByteShortSetup() { | |
result = undefined; | |
string = "\u5FCD\u8005\u306E\u653B\u6483"; | |
} | |
function Spread_TwoByteShort() { | |
result = [...string]; | |
} | |
function Spread_TwoByteShortTearDown() { | |
var expected = "\u5FCD|\u8005|\u306E|\u653B|\u6483"; | |
if (!Array.isArray(result) || result.join("|") !== expected) | |
throw new Error("Test is broken"); | |
return true; | |
} | |
// ---------------------------------------------------------------------------- | |
new BenchmarkSuite('StringIterators-Spread_WithSurrogatePairsShort', [1000], [ | |
new Benchmark('test', false, false, 0, | |
Spread_WithSurrogatePairsShort, | |
Spread_WithSurrogatePairsShortSetup, | |
Spread_WithSurrogatePairsShortTearDown), | |
]); | |
function Spread_WithSurrogatePairsShortSetup() { | |
result = undefined; | |
string = "\uD83C\uDF1F\u5FCD\u8005\u306E\u653B\u6483\uD83C\uDF1F"; | |
} | |
function Spread_WithSurrogatePairsShort() { | |
result = [...string]; | |
} | |
function Spread_WithSurrogatePairsShortTearDown() { | |
var expected = | |
"\uD83C\uDF1F|\u5FCD|\u8005|\u306E|\u653B|\u6483|\uD83C\uDF1F"; | |
if (!Array.isArray(result) || result.join("|") !== expected) | |
throw new Error("Test is broken"); | |
return true; | |
} | |
// ---------------------------------------------------------------------------- | |
new BenchmarkSuite('StringIterators-ForOf_OneByteLong', [1000], [ | |
new Benchmark('test', false, false, 0, | |
ForOf_OneByteLong, ForOf_OneByteLongSetup, | |
ForOf_OneByteLongTearDown), | |
]); | |
var result; | |
var string; | |
function ForOf_OneByteLongSetup() { | |
result = undefined; | |
string = "Alphabet-Soup|".repeat(128); | |
} | |
function ForOf_OneByteLong() { | |
result = ""; | |
for (var c of string) result += c; | |
} | |
function ForOf_OneByteLongTearDown() { | |
if (string != result) | |
throw new Error(`Test is broken: Expected "${string}" but got ` + | |
`"${result}"`); | |
return true; | |
} | |
// ---------------------------------------------------------------------------- | |
new BenchmarkSuite('StringIterators-ForOf_TwoByteLong', [1000], [ | |
new Benchmark('test', false, false, 0, | |
ForOf_OneByteLong, ForOf_OneByteLongSetup, | |
ForOf_OneByteLongTearDown), | |
]); | |
function ForOf_TwoByteLongSetup() { | |
result = undefined; | |
string = "\u5FCD\u8005\u306E\u653B\u6483".repeat(128); | |
} | |
function ForOf_TwoByteLong() { | |
result = ""; | |
for (var c of string) result += c; | |
} | |
function ForOf_TwoByteLongTearDown() { | |
if (string != result) | |
throw new Error(`Test is broken: Expected "${string}" but got ` + | |
`"${result}"`); | |
return true; | |
} | |
// ---------------------------------------------------------------------------- | |
new BenchmarkSuite('StringIterators-ForOf_WithSurrogatePairsLong', [1000], [ | |
new Benchmark('test', false, false, 0, | |
ForOf_WithSurrogatePairsLong, ForOf_WithSurrogatePairsLongSetup, | |
ForOf_WithSurrogatePairsLongTearDown), | |
]); | |
var result; | |
var string; | |
function ForOf_WithSurrogatePairsLongSetup() { | |
result = undefined; | |
string = "\uD83C\uDF1F\u5FCD\u8005\u306E\u653B\u6483\uD83C\uDF1F|" | |
.repeat(128); | |
} | |
function ForOf_WithSurrogatePairsLong() { | |
result = ""; | |
for (var c of string) result += c; | |
} | |
function ForOf_WithSurrogatePairsLongTearDown() { | |
if (string !== result) | |
throw new Error(`Test is broken: Expected "${string}" but got ` + | |
`"${result}"`); | |
return true; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment