|
6 | 6 |
|
7 | 7 | import 'package:benchmark_harness/benchmark_harness.dart';
|
8 | 8 |
|
| 9 | +int equalCount = 0; |
| 10 | + |
9 | 11 | class LongStringCompare extends BenchmarkBase {
|
10 |
| - late String s, t; |
| 12 | + final int reps; |
| 13 | + final List<String> s = []; |
11 | 14 |
|
12 |
| - String generateLongString() { |
13 |
| - var s = "abcdefgh"; |
14 |
| - for (int i = 0; i < 20; i++) { |
15 |
| - s = "$s ghijkl $s"; |
16 |
| - } |
17 |
| - return s; |
| 15 | + String generateLongString(int lengthPower) { |
| 16 | + return "abc" * (1 << lengthPower) + "def"; |
18 | 17 | }
|
19 | 18 |
|
20 |
| - LongStringCompare() : super('LongStringCompare') { |
21 |
| - s = generateLongString(); |
22 |
| - t = s; |
23 |
| - // Difference in two strings goes in the middle. |
24 |
| - s += "." + s; |
25 |
| - t += "!" + t; |
| 19 | + LongStringCompare(int lengthPower, this.reps) |
| 20 | + : super('LongStringCompare.${1 << lengthPower}.${reps}reps') { |
| 21 | + final single = generateLongString(lengthPower); |
| 22 | + s.add(single + "." + single); |
| 23 | + s.add(single + "!" + single); |
26 | 24 | }
|
27 | 25 |
|
28 | 26 | @override
|
29 | 27 | void warmup() {
|
30 |
| - for (int i = 0; i < 4; i++) { |
| 28 | + for (int i = 0; i < reps / 2; i++) { |
31 | 29 | run();
|
32 | 30 | }
|
33 | 31 | }
|
34 | 32 |
|
35 | 33 | @override
|
36 | 34 | void run() {
|
37 |
| - bool b = true; |
38 |
| - for (int i = 0; i < 5; i++) { |
39 |
| - b &= (s == t); |
| 35 | + for (int i = 0; i < reps; i++) { |
| 36 | + // Make string comparison code hoisiting harder for the compiler to do. |
| 37 | + bool comparison = s[i % 2] == s[(i + 1) % 2]; |
| 38 | + if (comparison) { |
| 39 | + equalCount++; |
| 40 | + } |
40 | 41 | }
|
41 | 42 | }
|
42 | 43 | }
|
43 | 44 |
|
44 | 45 | void main() {
|
45 |
| - LongStringCompare().report(); |
| 46 | + LongStringCompare(1, 3000).report(); |
| 47 | + LongStringCompare(5, 1000).report(); |
| 48 | + LongStringCompare(10, 30).report(); |
| 49 | + if (equalCount > 0) throw StateError("Unexpected equalCount: $equalCount"); |
46 | 50 | }
|
0 commit comments