Skip to content

Commit d1705bc

Browse files
committed
Optimize Date::to_calendar_date
1 parent 8e961af commit d1705bc

File tree

5 files changed

+165
-195
lines changed

5 files changed

+165
-195
lines changed

benchmarks/date.rs

Lines changed: 86 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,37 @@
1+
use std::hint::black_box;
2+
13
use criterion::Bencher;
24
use time::ext::{NumericalDuration, NumericalStdDuration};
35
use time::macros::date;
46
use time::{Date, Month, Time, Weekday};
57

8+
const DATES: [Date; 24] = [
9+
date!(2019-01-01),
10+
date!(2020-01-01),
11+
date!(2019-02-01),
12+
date!(2020-02-01),
13+
date!(2019-03-01),
14+
date!(2020-03-01),
15+
date!(2019-04-01),
16+
date!(2020-04-01),
17+
date!(2019-05-01),
18+
date!(2020-05-01),
19+
date!(2019-06-01),
20+
date!(2020-06-01),
21+
date!(2019-07-01),
22+
date!(2020-07-01),
23+
date!(2019-08-01),
24+
date!(2020-08-01),
25+
date!(2019-09-01),
26+
date!(2020-09-01),
27+
date!(2019-10-01),
28+
date!(2020-10-01),
29+
date!(2019-11-01),
30+
date!(2020-11-01),
31+
date!(2019-12-01),
32+
date!(2020-12-01),
33+
];
34+
635
setup_benchmark! {
736
"Date",
837

@@ -43,153 +72,83 @@ setup_benchmark! {
4372
}
4473

4574
fn month(ben: &mut Bencher<'_>) {
46-
ben.iter(|| date!(2019-01-01).month());
47-
ben.iter(|| date!(2019-02-01).month());
48-
ben.iter(|| date!(2019-03-01).month());
49-
ben.iter(|| date!(2019-04-01).month());
50-
ben.iter(|| date!(2019-05-01).month());
51-
ben.iter(|| date!(2019-06-01).month());
52-
ben.iter(|| date!(2019-07-01).month());
53-
ben.iter(|| date!(2019-08-01).month());
54-
ben.iter(|| date!(2019-09-01).month());
55-
ben.iter(|| date!(2019-10-01).month());
56-
ben.iter(|| date!(2019-11-01).month());
57-
ben.iter(|| date!(2019-12-01).month());
75+
ben.iter(|| {
76+
for date in DATES {
77+
black_box(date.month());
78+
}
79+
});
5880
}
5981

6082
fn day(ben: &mut Bencher<'_>) {
61-
ben.iter(|| date!(2019-01-01).day());
62-
ben.iter(|| date!(2019-02-01).day());
63-
ben.iter(|| date!(2019-03-01).day());
64-
ben.iter(|| date!(2019-04-01).day());
65-
ben.iter(|| date!(2019-05-01).day());
66-
ben.iter(|| date!(2019-06-01).day());
67-
ben.iter(|| date!(2019-07-01).day());
68-
ben.iter(|| date!(2019-08-01).day());
69-
ben.iter(|| date!(2019-09-01).day());
70-
ben.iter(|| date!(2019-10-01).day());
71-
ben.iter(|| date!(2019-11-01).day());
72-
ben.iter(|| date!(2019-12-01).day());
83+
ben.iter(|| {
84+
for date in DATES {
85+
black_box(date.day());
86+
}
87+
});
7388
}
7489

7590
fn ordinal(ben: &mut Bencher<'_>) {
76-
ben.iter(|| date!(2019-01-01).ordinal());
77-
ben.iter(|| date!(2019-02-01).ordinal());
78-
ben.iter(|| date!(2019-03-01).ordinal());
79-
ben.iter(|| date!(2019-04-01).ordinal());
80-
ben.iter(|| date!(2019-05-01).ordinal());
81-
ben.iter(|| date!(2019-06-01).ordinal());
82-
ben.iter(|| date!(2019-07-01).ordinal());
83-
ben.iter(|| date!(2019-08-01).ordinal());
84-
ben.iter(|| date!(2019-09-01).ordinal());
85-
ben.iter(|| date!(2019-10-01).ordinal());
86-
ben.iter(|| date!(2019-11-01).ordinal());
87-
ben.iter(|| date!(2019-12-01).ordinal());
91+
ben.iter(|| {
92+
for date in DATES {
93+
black_box(date.ordinal());
94+
}
95+
});
8896
}
8997

9098
fn iso_week(ben: &mut Bencher<'_>) {
91-
ben.iter(|| date!(2019-01-01).iso_week());
92-
ben.iter(|| date!(2019-02-01).iso_week());
93-
ben.iter(|| date!(2019-03-01).iso_week());
94-
ben.iter(|| date!(2019-04-01).iso_week());
95-
ben.iter(|| date!(2019-05-01).iso_week());
96-
ben.iter(|| date!(2019-06-01).iso_week());
97-
ben.iter(|| date!(2019-07-01).iso_week());
98-
ben.iter(|| date!(2019-08-01).iso_week());
99-
ben.iter(|| date!(2019-09-01).iso_week());
100-
ben.iter(|| date!(2019-10-01).iso_week());
101-
ben.iter(|| date!(2019-11-01).iso_week());
102-
ben.iter(|| date!(2019-12-01).iso_week());
99+
ben.iter(|| {
100+
for date in DATES {
101+
black_box(date.iso_week());
102+
}
103+
});
103104
}
104105

105106
fn sunday_based_week(ben: &mut Bencher<'_>) {
106-
ben.iter(|| date!(2019-01-01).sunday_based_week());
107-
ben.iter(|| date!(2019-02-01).sunday_based_week());
108-
ben.iter(|| date!(2019-03-01).sunday_based_week());
109-
ben.iter(|| date!(2019-04-01).sunday_based_week());
110-
ben.iter(|| date!(2019-05-01).sunday_based_week());
111-
ben.iter(|| date!(2019-06-01).sunday_based_week());
112-
ben.iter(|| date!(2019-07-01).sunday_based_week());
113-
ben.iter(|| date!(2019-08-01).sunday_based_week());
114-
ben.iter(|| date!(2019-09-01).sunday_based_week());
115-
ben.iter(|| date!(2019-10-01).sunday_based_week());
116-
ben.iter(|| date!(2019-11-01).sunday_based_week());
117-
ben.iter(|| date!(2019-12-01).sunday_based_week());
107+
ben.iter(|| {
108+
for date in DATES {
109+
black_box(date.sunday_based_week());
110+
}
111+
});
118112
}
119113

120114
fn monday_based_week(ben: &mut Bencher<'_>) {
121-
ben.iter(|| date!(2019-01-01).monday_based_week());
122-
ben.iter(|| date!(2019-02-01).monday_based_week());
123-
ben.iter(|| date!(2019-03-01).monday_based_week());
124-
ben.iter(|| date!(2019-04-01).monday_based_week());
125-
ben.iter(|| date!(2019-05-01).monday_based_week());
126-
ben.iter(|| date!(2019-06-01).monday_based_week());
127-
ben.iter(|| date!(2019-07-01).monday_based_week());
128-
ben.iter(|| date!(2019-08-01).monday_based_week());
129-
ben.iter(|| date!(2019-09-01).monday_based_week());
130-
ben.iter(|| date!(2019-10-01).monday_based_week());
131-
ben.iter(|| date!(2019-11-01).monday_based_week());
132-
ben.iter(|| date!(2019-12-01).monday_based_week());
115+
ben.iter(|| {
116+
for date in DATES {
117+
black_box(date.monday_based_week());
118+
}
119+
});
133120
}
134121

135122
fn to_calendar_date(ben: &mut Bencher<'_>) {
136-
ben.iter(|| date!(2019-01-01).to_calendar_date());
137-
ben.iter(|| date!(2019-02-01).to_calendar_date());
138-
ben.iter(|| date!(2019-03-01).to_calendar_date());
139-
ben.iter(|| date!(2019-04-01).to_calendar_date());
140-
ben.iter(|| date!(2019-05-01).to_calendar_date());
141-
ben.iter(|| date!(2019-06-01).to_calendar_date());
142-
ben.iter(|| date!(2019-07-01).to_calendar_date());
143-
ben.iter(|| date!(2019-08-01).to_calendar_date());
144-
ben.iter(|| date!(2019-09-01).to_calendar_date());
145-
ben.iter(|| date!(2019-10-01).to_calendar_date());
146-
ben.iter(|| date!(2019-11-01).to_calendar_date());
147-
ben.iter(|| date!(2019-12-01).to_calendar_date());
123+
ben.iter(|| {
124+
for date in DATES {
125+
black_box(date.to_calendar_date());
126+
}
127+
});
148128
}
149129

150130
fn to_ordinal_date(ben: &mut Bencher<'_>) {
151-
ben.iter(|| date!(2019-01-01).to_ordinal_date());
152-
ben.iter(|| date!(2019-02-01).to_ordinal_date());
153-
ben.iter(|| date!(2019-03-01).to_ordinal_date());
154-
ben.iter(|| date!(2019-04-01).to_ordinal_date());
155-
ben.iter(|| date!(2019-05-01).to_ordinal_date());
156-
ben.iter(|| date!(2019-06-01).to_ordinal_date());
157-
ben.iter(|| date!(2019-07-01).to_ordinal_date());
158-
ben.iter(|| date!(2019-08-01).to_ordinal_date());
159-
ben.iter(|| date!(2019-09-01).to_ordinal_date());
160-
ben.iter(|| date!(2019-10-01).to_ordinal_date());
161-
ben.iter(|| date!(2019-11-01).to_ordinal_date());
162-
ben.iter(|| date!(2019-12-01).to_ordinal_date());
131+
ben.iter(|| {
132+
for date in DATES {
133+
black_box(date.to_ordinal_date());
134+
}
135+
});
163136
}
164137

165138
fn to_iso_week_date(ben: &mut Bencher<'_>) {
166-
ben.iter(|| date!(2019-01-01).to_iso_week_date());
167-
ben.iter(|| date!(2019-02-01).to_iso_week_date());
168-
ben.iter(|| date!(2019-03-01).to_iso_week_date());
169-
ben.iter(|| date!(2019-04-01).to_iso_week_date());
170-
ben.iter(|| date!(2019-05-01).to_iso_week_date());
171-
ben.iter(|| date!(2019-06-01).to_iso_week_date());
172-
ben.iter(|| date!(2019-07-01).to_iso_week_date());
173-
ben.iter(|| date!(2019-08-01).to_iso_week_date());
174-
ben.iter(|| date!(2019-09-01).to_iso_week_date());
175-
ben.iter(|| date!(2019-10-01).to_iso_week_date());
176-
ben.iter(|| date!(2019-11-01).to_iso_week_date());
177-
ben.iter(|| date!(2019-12-01).to_iso_week_date());
139+
ben.iter(|| {
140+
for date in DATES {
141+
black_box(date.to_iso_week_date());
142+
}
143+
});
178144
}
179145

180146
fn weekday(ben: &mut Bencher<'_>) {
181-
ben.iter(|| date!(2019-01-01).weekday());
182-
ben.iter(|| date!(2019-02-01).weekday());
183-
ben.iter(|| date!(2019-03-01).weekday());
184-
ben.iter(|| date!(2019-04-01).weekday());
185-
ben.iter(|| date!(2019-05-01).weekday());
186-
ben.iter(|| date!(2019-06-01).weekday());
187-
ben.iter(|| date!(2019-07-01).weekday());
188-
ben.iter(|| date!(2019-08-01).weekday());
189-
ben.iter(|| date!(2019-09-01).weekday());
190-
ben.iter(|| date!(2019-10-01).weekday());
191-
ben.iter(|| date!(2019-11-01).weekday());
192-
ben.iter(|| date!(2019-12-01).weekday());
147+
ben.iter(|| {
148+
for date in DATES {
149+
black_box(date.weekday());
150+
}
151+
});
193152
}
194153

195154
fn next_day(ben: &mut Bencher<'_>) {
@@ -209,18 +168,13 @@ setup_benchmark! {
209168
}
210169

211170
fn to_julian_day(ben: &mut Bencher<'_>) {
212-
ben.iter(|| date!(2019-01-01).to_julian_day());
213-
ben.iter(|| date!(2019-02-01).to_julian_day());
214-
ben.iter(|| date!(2019-03-01).to_julian_day());
215-
ben.iter(|| date!(2019-04-01).to_julian_day());
216-
ben.iter(|| date!(2019-05-01).to_julian_day());
217-
ben.iter(|| date!(2019-06-01).to_julian_day());
218-
ben.iter(|| date!(2019-07-01).to_julian_day());
219-
ben.iter(|| date!(2019-08-01).to_julian_day());
220-
ben.iter(|| date!(2019-09-01).to_julian_day());
221-
ben.iter(|| date!(2019-10-01).to_julian_day());
222-
ben.iter(|| date!(2019-11-01).to_julian_day());
223-
ben.iter(|| date!(2019-12-01).to_julian_day());
171+
ben.iter(|| {
172+
for date in DATES {
173+
black_box(date.to_julian_day());
174+
175+
176+
}
177+
});
224178
}
225179
// endregion getters
226180

0 commit comments

Comments
 (0)