Skip to content

Commit 5754276

Browse files
committed
printer - automatic duration formatting
1 parent e239016 commit 5754276

File tree

2 files changed

+29
-27
lines changed

2 files changed

+29
-27
lines changed

lib/src/benchmark.dart

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,26 +41,25 @@ class BenchmarkResult {
4141
Duration.microsecondsPerSecond / averageRunTime.inMicroseconds;
4242

4343
void report({int? units, Printer output = const Printer()}) {
44-
final msFractional = (Duration d) => Printer.format(
45-
d.inMicroseconds / Duration.microsecondsPerMillisecond,
46-
suffix: ' ms');
4744
output
4845
..blank()
4946
..colored(Color.blue, _benchmark._name)
5047
..labeled('total runs', runs)
51-
..labeled('total time', msFractional(totalRunTime),
48+
..labeled(
49+
'total time', Printer.formatMicroseconds(totalRunTime.inMicroseconds),
5250
color: (totalRunTime.inMilliseconds >
5351
settings.minimumRunTime.inMilliseconds * 1.25)
5452
? Color.yellow
5553
: Color.none)
56-
..labeled('average run', msFractional(averageRunTime))
54+
..labeled('average run',
55+
Printer.formatMicroseconds(averageRunTime.inMicroseconds))
5756
..labeled('runs/second', runsPerSecond);
5857
if (units != null) {
5958
output
6059
..labeled('units', units)
6160
..labeled('units/second', runsPerSecond)
6261
..labeled('time per unit',
63-
Printer.format(microsecondsPerUnit(units), suffix: ' μs'));
62+
Printer.formatMicroseconds(microsecondsPerUnit(units)));
6463
}
6564
}
6665

lib/src/printer.dart

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,35 +33,38 @@ class Printer {
3333
{String thousandsSeparator = ' ',
3434
int? decimalPoints,
3535
String suffix = ' ',
36-
int lPadLength = 10}) {
36+
int lPadLength = 8}) {
3737
late String str;
3838

3939
if (number.isInfinite) {
40-
str = number.toString();
41-
} else {
42-
assert(number >= 0);
43-
decimalPoints ??=
44-
number is int ? 0 : max(0, 5 - number.toStringAsFixed(0).length);
45-
str = number.toStringAsFixed(decimalPoints);
46-
47-
if (number >= 1000 && thousandsSeparator.isNotEmpty) {
48-
// add thousands separators, efficiency doesn't matter here...
49-
final parts = str.split('.');
50-
final digitsReversed =
51-
parts[0].split('').reversed.toList(growable: false);
52-
str = parts.length == 1 ? '' : '.${parts[1]}';
53-
for (var i = 0; i < digitsReversed.length; i++) {
54-
if (i > 0 && i % 3 == 0) str = '$thousandsSeparator$str';
55-
str = '${digitsReversed[i]}$str';
56-
}
40+
return lpad(number.toString(), lPadLength);
41+
}
42+
assert(number >= 0);
43+
decimalPoints ??=
44+
number is int ? 0 : max(0, 5 - number.toStringAsFixed(0).length);
45+
str = number.toStringAsFixed(decimalPoints);
46+
47+
if (number >= 1000 && thousandsSeparator.isNotEmpty) {
48+
// add thousands separators, efficiency doesn't matter here...
49+
final parts = str.split('.');
50+
final digitsReversed =
51+
parts[0].split('').reversed.toList(growable: false);
52+
str = parts.length == 1 ? '' : '.${parts[1]}';
53+
for (var i = 0; i < digitsReversed.length; i++) {
54+
if (i > 0 && i % 3 == 0) str = '$thousandsSeparator$str';
55+
str = '${digitsReversed[i]}$str';
5756
}
58-
59-
str += suffix;
6057
}
6158

62-
return lpad(str, lPadLength);
59+
return lpad(str, lPadLength) + suffix;
6360
}
6461

62+
static String formatMicroseconds(num number) => number < 1000
63+
? format(number, suffix: ' μs')
64+
: number < 1000000
65+
? format(number / 1000, suffix: ' ms')
66+
: format(number / 1000000, suffix: ' s');
67+
6568
static String lpad(String text, int length) {
6669
while (text.length < length) {
6770
text = ' $text';

0 commit comments

Comments
 (0)