|  | // Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  | // | 
|  | // Measure performance of string comparison. | 
|  |  | 
|  | // Using string interpolation could change what this test is measuring. | 
|  | // ignore_for_file: prefer_interpolation_to_compose_strings | 
|  |  | 
|  | import 'package:benchmark_harness/benchmark_harness.dart'; | 
|  |  | 
|  | int equalCount = 0; | 
|  |  | 
|  | class LongStringCompare extends BenchmarkBase { | 
|  | final int reps; | 
|  | final List<String> s = []; | 
|  |  | 
|  | String generateLongString(int lengthPower) { | 
|  | return 'abc' * (1 << lengthPower) + 'def'; | 
|  | } | 
|  |  | 
|  | LongStringCompare(int lengthPower, this.reps) | 
|  | : super('LongStringCompare.${1 << lengthPower}.${reps}reps') { | 
|  | final single = generateLongString(lengthPower); | 
|  | s.add(single + '.' + single); | 
|  | s.add(single + '!' + single); | 
|  | } | 
|  |  | 
|  | @override | 
|  | void run() { | 
|  | for (int i = 0; i < reps; i++) { | 
|  | // Make string comparison code hoisting harder for the compiler to do. | 
|  | final bool comparison = s[i % 2] == s[(i + 1) % 2]; | 
|  | if (comparison) { | 
|  | equalCount++; | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | void main() { | 
|  | LongStringCompare(1, 3000).report(); | 
|  | LongStringCompare(5, 1000).report(); | 
|  | LongStringCompare(10, 30).report(); | 
|  | if (equalCount > 0) throw StateError('Unexpected equalCount: $equalCount'); | 
|  | } |