Skip to content

Commit 5122e32

Browse files
Refactor(benchmark): Pre-compute deterministic base lists
Move the generation of `sorted`, `reverse`, and `pathological` base data into top-level `final` variables. - **Efficiency:** Ensures these lists are computed only once at startup. `_generatePathological` now correctly reuses `_sortedBase` instead of re-calculating it. - **Clarity:** Distinguishes between the immutable data templates and the mutable copies used for testing. - **Consistency:** Simplifies the deterministic generator functions into concise one-liners.
1 parent 6546d0c commit 5122e32

File tree

1 file changed

+16
-20
lines changed

1 file changed

+16
-20
lines changed

pkgs/collection/benchmark/dataset_generator.dart

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@ import 'dart:math';
1212
const size = 50000;
1313
const count = 128; // Number of lists to cycle through.
1414

15+
final List<int> _sortedBase = List.generate(size, (i) => i, growable: false);
16+
final List<int> _reversedBase =
17+
List.generate(size, (i) => size - 1 - i, growable: false);
18+
final List<int> _pathologicalBase = [
19+
for (var i = 0; i < size; i++)
20+
if (i.isEven) _sortedBase[i],
21+
for (var i = size - 1; i > 0; i--)
22+
if (i.isOdd) _sortedBase[i],
23+
];
24+
1525
final List<List<int>> random = _generateRandom();
1626
final List<List<int>> sorted = _generateSorted();
1727
final List<List<int>> reverse = _generateReverse();
@@ -24,30 +34,16 @@ List<List<int>> _generateRandom() {
2434
count, (_) => List.generate(size, (_) => r.nextInt(size)));
2535
}
2636

27-
List<List<int>> _generateSorted() {
28-
final base = List.generate(size, (i) => i, growable: false);
29-
return List.generate(count, (_) => List.of(base, growable: true));
30-
}
37+
List<List<int>> _generateSorted() =>
38+
List.generate(count, (_) => List.of(_sortedBase, growable: true));
3139

32-
List<List<int>> _generateReverse() {
33-
final base = List.generate(size, (i) => size - 1 - i, growable: false);
34-
return List.generate(count, (_) => List.of(base, growable: true));
35-
}
40+
List<List<int>> _generateReverse() =>
41+
List.generate(count, (_) => List.of(_reversedBase, growable: true));
3642

3743
List<List<int>> _generateFewUnique() {
3844
final r = Random(67890);
3945
return List.generate(count, (_) => List.generate(size, (_) => r.nextInt(7)));
4046
}
4147

42-
List<List<int>> _generatePathological() {
43-
final sortedBase = List.generate(size, (i) => i, growable: false);
44-
// Creates a "V-shape" or "organ pipe" array that can be challenging
45-
// for quicksort implementations by promoting unbalanced partitions.
46-
final pathological = <int>[
47-
for (var i = 0; i < size; i++)
48-
if (i.isEven) sortedBase[i],
49-
for (var i = size - 1; i > 0; i--)
50-
if (i.isOdd) sortedBase[i],
51-
];
52-
return List.generate(count, (_) => List.of(pathological, growable: true));
53-
}
48+
List<List<int>> _generatePathological() =>
49+
List.generate(count, (_) => List.of(_pathologicalBase, growable: true));

0 commit comments

Comments
 (0)