| // 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'); |
| } |