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