1136e7745Sopenharmony_ci#![feature(test)]
2136e7745Sopenharmony_ciextern crate test;
3136e7745Sopenharmony_ci
4136e7745Sopenharmony_ciuse std::io::Write;
5136e7745Sopenharmony_ciuse std::time::{Duration, UNIX_EPOCH};
6136e7745Sopenharmony_ci
7136e7745Sopenharmony_ciuse humantime::format_rfc3339;
8136e7745Sopenharmony_ci
9136e7745Sopenharmony_ci#[bench]
10136e7745Sopenharmony_cifn rfc3339_humantime_seconds(b: &mut test::Bencher) {
11136e7745Sopenharmony_ci    let time = UNIX_EPOCH + Duration::new(1_483_228_799, 0);
12136e7745Sopenharmony_ci    let mut buf = Vec::with_capacity(100);
13136e7745Sopenharmony_ci    b.iter(|| {
14136e7745Sopenharmony_ci        buf.truncate(0);
15136e7745Sopenharmony_ci        write!(&mut buf, "{}", format_rfc3339(time)).unwrap()
16136e7745Sopenharmony_ci    });
17136e7745Sopenharmony_ci}
18136e7745Sopenharmony_ci
19136e7745Sopenharmony_ci#[bench]
20136e7745Sopenharmony_cifn rfc3339_chrono(b: &mut test::Bencher) {
21136e7745Sopenharmony_ci    use chrono::{DateTime, NaiveDateTime, Utc};
22136e7745Sopenharmony_ci    use chrono::format::Item;
23136e7745Sopenharmony_ci    use chrono::format::Item::*;
24136e7745Sopenharmony_ci    use chrono::format::Numeric::*;
25136e7745Sopenharmony_ci    use chrono::format::Fixed::*;
26136e7745Sopenharmony_ci    use chrono::format::Pad::*;
27136e7745Sopenharmony_ci
28136e7745Sopenharmony_ci    let time = DateTime::<Utc>::from_utc(
29136e7745Sopenharmony_ci        NaiveDateTime::from_timestamp(1_483_228_799, 0), Utc);
30136e7745Sopenharmony_ci    let mut buf = Vec::with_capacity(100);
31136e7745Sopenharmony_ci
32136e7745Sopenharmony_ci    // formatting code from env_logger
33136e7745Sopenharmony_ci    const ITEMS: &[Item<'static>] = {
34136e7745Sopenharmony_ci        &[
35136e7745Sopenharmony_ci            Numeric(Year, Zero),
36136e7745Sopenharmony_ci            Literal("-"),
37136e7745Sopenharmony_ci            Numeric(Month, Zero),
38136e7745Sopenharmony_ci            Literal("-"),
39136e7745Sopenharmony_ci            Numeric(Day, Zero),
40136e7745Sopenharmony_ci            Literal("T"),
41136e7745Sopenharmony_ci            Numeric(Hour, Zero),
42136e7745Sopenharmony_ci            Literal(":"),
43136e7745Sopenharmony_ci            Numeric(Minute, Zero),
44136e7745Sopenharmony_ci            Literal(":"),
45136e7745Sopenharmony_ci            Numeric(Second, Zero),
46136e7745Sopenharmony_ci            Fixed(TimezoneOffsetZ),
47136e7745Sopenharmony_ci        ]
48136e7745Sopenharmony_ci    };
49136e7745Sopenharmony_ci
50136e7745Sopenharmony_ci
51136e7745Sopenharmony_ci    b.iter(|| {
52136e7745Sopenharmony_ci        buf.truncate(0);
53136e7745Sopenharmony_ci        write!(&mut buf, "{}", time.format_with_items(ITEMS.iter().cloned()))
54136e7745Sopenharmony_ci            .unwrap()
55136e7745Sopenharmony_ci    });
56136e7745Sopenharmony_ci}
57