| // Copyright 2019 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 createSuite(name, count, fn) { |
| new BenchmarkSuite(name, [count], [new Benchmark(name, true, false, 0, fn)]); |
| } |
| |
| const inputs = [ |
| 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', |
| 'Integer eu augue suscipit, accumsan ipsum nec, sagittis sem.', |
| 'In vitae pellentesque dolor. Curabitur leo nunc, luctus vitae', |
| 'risus eget, fermentum hendrerit justo.', |
| 'hello'.repeat(1024), |
| 'h', |
| '' |
| ]; |
| const firsts = ['I', 'Integer', 'Lorem', 'risus', 'hello']; |
| |
| function simpleHelper() { |
| let sum = 0; |
| for (const input of inputs) { |
| for (const first of firsts) { |
| sum += input.startsWith(first); |
| } |
| } |
| return sum; |
| } |
| |
| function consInputHelper() { |
| let sum = 0; |
| for (const inputOne of inputs) { |
| for (const inputTwo of inputs) { |
| for (const first of firsts) { |
| // Skip if the length is too small for %ConstructConsString |
| if (inputOne.length + inputTwo.length < 13) break; |
| sum += %ConstructConsString(inputOne, inputTwo).startsWith(first); |
| } |
| } |
| } |
| return sum; |
| } |
| |
| function consFirstHelper() { |
| let sum = 0; |
| for (const input of inputs) { |
| for (const firstOne of firsts) { |
| for (const firstTwo of firsts) { |
| // Skip if the length is too small for %ConstructConsString |
| if (firstOne.length + firstTwo.length < 13) break; |
| sum += input.startsWith(%ConstructConsString(firstOne, firstTwo)); |
| } |
| } |
| } |
| return sum; |
| } |
| |
| function doubleConsHelper() { |
| let sum = 0; |
| for (const inputOne of inputs) { |
| for (const inputTwo of inputs) { |
| for (const firstOne of firsts) { |
| for (const firstTwo of firsts) { |
| // Skip if the length is too small for %ConstructConsString |
| if (inputOne.length + inputTwo.length < 13 || firstOne.length + firstTwo.length) break; |
| sum += % ConstructConsString(inputOne, inputTwo).startsWith( |
| % ConstructConsString(firstOne, firstTwo) |
| ); |
| } |
| } |
| } |
| } |
| } |
| |
| createSuite('DirectStringsDirectSearch', 1000, simpleHelper); |
| createSuite('ConsStringsDirectSearch', 1000, consInputHelper); |
| createSuite('DirectStringsConsSearch', 1000, consFirstHelper); |
| createSuite('ConsStringsConsSearch', 1000, doubleConsHelper); |