| // 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. |
| |
| function assert(expression, message) { |
| if (typeof expression === "string" && message === void 0) { |
| message = expression; |
| expression = eval(expression); |
| } |
| |
| if (!expression) { |
| var lines = ["Benchmark Error"]; |
| if (message !== void 0) { |
| lines = ["Benchmark Error:", String(message)]; |
| } |
| throw new Error(lines.join("\n")); |
| } |
| return true; |
| } |
| |
| assert.same = function(expected, actual, message) { |
| var isSame = |
| expected === actual || typeof expected !== expected && actual !== actual; |
| if (!isSame) { |
| var details = `Expected: ${String(expected)}\n` + |
| `But found: ${String(actual)}`; |
| var lines = ["Benchmark Error:", details]; |
| if (message !== void 0) { |
| lines = ["Benchmark Error:", details, "", String(message)]; |
| } |
| throw new Error(lines.join("\n")); |
| } |
| return true; |
| } |
| |
| new BenchmarkSuite('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-Soup"; |
| } |
| |
| function Spread_OneByteShort() { |
| result = [...string]; |
| } |
| |
| function Spread_OneByteShortTearDown() { |
| var expected = "A|l|p|h|a|b|e|t|-|S|o|u|p"; |
| return assert("Array.isArray(result)") |
| && assert.same(expected, result.join("|")); |
| } |
| |
| // ---------------------------------------------------------------------------- |
| |
| new BenchmarkSuite('Spread_TwoByteShort', [1000], [ |
| new Benchmark('test', false, false, 0, |
| Spread_TwoByteShort, Spread_TwoByteShortSetup, |
| Spread_TwoByteShortTearDown), |
| ]); |
| |
| 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"; |
| return assert("Array.isArray(result)") |
| && assert.same(expected, result.join("|")); |
| } |
| |
| // ---------------------------------------------------------------------------- |
| |
| new BenchmarkSuite('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"; |
| return assert("Array.isArray(result)") |
| && assert.same(expected, result.join("|")); |
| } |
| |
| // ---------------------------------------------------------------------------- |
| |
| new BenchmarkSuite('ForOf_OneByteShort', [1000], [ |
| new Benchmark('test', false, false, 0, |
| ForOf_OneByteShort, ForOf_OneByteShortSetup, |
| ForOf_OneByteShortTearDown), |
| ]); |
| |
| function ForOf_OneByteShortSetup() { |
| result = undefined; |
| string = "Alphabet-Soup"; |
| } |
| |
| function ForOf_OneByteShort() { |
| result = ""; |
| for (var c of string) result += c; |
| } |
| |
| function ForOf_OneByteShortTearDown() { |
| return assert.same(string, result); |
| } |
| |
| // ---------------------------------------------------------------------------- |
| |
| new BenchmarkSuite('ForOf_TwoByteShort', [1000], [ |
| new Benchmark('test', false, false, 0, |
| ForOf_TwoByteShort, ForOf_TwoByteShortSetup, |
| ForOf_TwoByteShortTearDown), |
| ]); |
| |
| function ForOf_TwoByteShortSetup() { |
| result = undefined; |
| string = "\u5FCD\u8005\u306E\u653B\u6483"; |
| } |
| |
| function ForOf_TwoByteShort() { |
| result = ""; |
| for (var c of string) result += c; |
| } |
| |
| function ForOf_TwoByteShortTearDown() { |
| return assert.same(string, result); |
| } |
| |
| // ---------------------------------------------------------------------------- |
| |
| new BenchmarkSuite('ForOf_WithSurrogatePairsShort', [1000], [ |
| new Benchmark('test', false, false, 0, |
| ForOf_WithSurrogatePairsShort, |
| ForOf_WithSurrogatePairsShortSetup, |
| ForOf_WithSurrogatePairsShortTearDown), |
| ]); |
| |
| function ForOf_WithSurrogatePairsShortSetup() { |
| result = undefined; |
| string = "\uD83C\uDF1F\u5FCD\u8005\u306E\u653B\u6483\uD83C\uDF1F"; |
| } |
| |
| function ForOf_WithSurrogatePairsShort() { |
| result = ""; |
| for (var c of string) result += c; |
| } |
| |
| function ForOf_WithSurrogatePairsShortTearDown() { |
| return assert.same(string, result); |
| } |
| |
| // ---------------------------------------------------------------------------- |
| |
| new BenchmarkSuite('ForOf_OneByteLong', [1000], [ |
| new Benchmark('test', false, false, 0, |
| ForOf_OneByteLong, ForOf_OneByteLongSetup, |
| ForOf_OneByteLongTearDown), |
| ]); |
| |
| function ForOf_OneByteLongSetup() { |
| result = undefined; |
| string = "Alphabet-Soup|".repeat(128); |
| } |
| |
| function ForOf_OneByteLong() { |
| result = ""; |
| for (var c of string) result += c; |
| } |
| |
| function ForOf_OneByteLongTearDown() { |
| return assert.same(string, result); |
| } |
| |
| // ---------------------------------------------------------------------------- |
| |
| new BenchmarkSuite('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() { |
| return assert.same(string, result); |
| } |
| |
| // ---------------------------------------------------------------------------- |
| |
| new BenchmarkSuite('ForOf_WithSurrogatePairsLong', [1000], [ |
| new Benchmark('test', false, false, 0, |
| ForOf_WithSurrogatePairsLong, ForOf_WithSurrogatePairsLongSetup, |
| ForOf_WithSurrogatePairsLongTearDown), |
| ]); |
| |
| 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() { |
| return assert.same(string, result); |
| } |