Skip to content

Commit 71ad03f

Browse files
devoncarewCommit Queue
authored andcommitted
[benchmarks] contribute a package:intl benchmark
Change-Id: I9ce75ad7ba1599e4bd6311e0ae0397005d46fe86 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/409762 Commit-Queue: Devon Carew <[email protected]> Reviewed-by: Stephen Adams <[email protected]>
1 parent 9d96cd9 commit 71ad03f

File tree

1 file changed

+103
-0
lines changed

1 file changed

+103
-0
lines changed

benchmarks/Intl/dart/format.dart

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
// Micro-benchmarks for formatting with Intl.
6+
7+
import 'package:benchmark_harness/benchmark_harness.dart';
8+
import 'package:intl/intl.dart';
9+
10+
var DATES = List.generate(
11+
100,
12+
(i) => DateTime.fromMillisecondsSinceEpoch(1417666640631 - i * 1649837618),
13+
);
14+
15+
const DATE_FORMATS = ['Hm', 'MMM yyyy', 'MMM dd, yyyy'];
16+
17+
var NUMBERS = [
18+
12.345,
19+
1.2345,
20+
-12.345,
21+
20000000.1,
22+
-200000001.2,
23+
...List.generate(90, (i) => (i - 45) * i * 0.716739 + 0.21),
24+
];
25+
26+
const NUMBER_FORMATS = ['\$#,##0.0', '#%', '#,##0', '#.##%'];
27+
28+
const LOCALE = 'en_US';
29+
30+
var g;
31+
32+
class Base extends BenchmarkBase {
33+
Base(name, variant) : super('Intl.$name.format.$variant');
34+
35+
var formatters;
36+
var data;
37+
38+
@override
39+
void run() {
40+
for (var datum in data) {
41+
for (var formatter in formatters) {
42+
g = formatter.format(datum);
43+
}
44+
}
45+
46+
// TODO(devoncarew): Duplicated for golem investigation.
47+
for (var datum in data) {
48+
for (var formatter in formatters) {
49+
g = formatter.format(datum);
50+
}
51+
}
52+
// TODO(devoncarew): Duplicated for golem investigation.
53+
}
54+
}
55+
56+
class DateBenchmark extends Base {
57+
DateBenchmark() : super('DateFormat', 'oneshot');
58+
59+
@override
60+
void setup() {
61+
formatters = DATE_FORMATS.map((s) => DateFormat(s, LOCALE));
62+
data = DATES;
63+
}
64+
}
65+
66+
class DateBenchmarkReused extends Base {
67+
DateBenchmarkReused() : super('DateFormat', 'reused');
68+
69+
@override
70+
void setup() {
71+
formatters = DATE_FORMATS.map((s) => DateFormat(s, LOCALE)).toList();
72+
data = DATES;
73+
}
74+
}
75+
76+
class NumberBenchmark extends Base {
77+
NumberBenchmark() : super('NumberFormat', 'oneshot');
78+
79+
@override
80+
void setup() {
81+
formatters = NUMBER_FORMATS.map((s) => NumberFormat(s, LOCALE));
82+
data = NUMBERS;
83+
}
84+
}
85+
86+
class NumberBenchmarkReused extends Base {
87+
NumberBenchmarkReused() : super('NumberFormat', 'reused');
88+
89+
@override
90+
void setup() {
91+
formatters = NUMBER_FORMATS.map((s) => NumberFormat(s, LOCALE)).toList();
92+
data = NUMBERS;
93+
}
94+
}
95+
96+
void main() {
97+
DateBenchmark().report();
98+
DateBenchmarkReused().report();
99+
NumberBenchmark().report();
100+
NumberBenchmarkReused().report();
101+
102+
if (g is! String) throw 'Error';
103+
}

0 commit comments

Comments
 (0)