• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #![feature(test)]
2 extern crate test;
3 
4 use std::io::Write;
5 use std::time::{Duration, UNIX_EPOCH};
6 
7 use humantime::format_rfc3339;
8 
9 #[bench]
rfc3339_humantime_seconds(b: &mut test::Bencher)10 fn rfc3339_humantime_seconds(b: &mut test::Bencher) {
11     let time = UNIX_EPOCH + Duration::new(1_483_228_799, 0);
12     let mut buf = Vec::with_capacity(100);
13     b.iter(|| {
14         buf.truncate(0);
15         write!(&mut buf, "{}", format_rfc3339(time)).unwrap()
16     });
17 }
18 
19 #[bench]
rfc3339_chrono(b: &mut test::Bencher)20 fn rfc3339_chrono(b: &mut test::Bencher) {
21     use chrono::{DateTime, NaiveDateTime, Utc};
22     use chrono::format::Item;
23     use chrono::format::Item::*;
24     use chrono::format::Numeric::*;
25     use chrono::format::Fixed::*;
26     use chrono::format::Pad::*;
27 
28     let time = DateTime::<Utc>::from_utc(
29         NaiveDateTime::from_timestamp(1_483_228_799, 0), Utc);
30     let mut buf = Vec::with_capacity(100);
31 
32     // formatting code from env_logger
33     const ITEMS: &[Item<'static>] = {
34         &[
35             Numeric(Year, Zero),
36             Literal("-"),
37             Numeric(Month, Zero),
38             Literal("-"),
39             Numeric(Day, Zero),
40             Literal("T"),
41             Numeric(Hour, Zero),
42             Literal(":"),
43             Numeric(Minute, Zero),
44             Literal(":"),
45             Numeric(Second, Zero),
46             Fixed(TimezoneOffsetZ),
47         ]
48     };
49 
50 
51     b.iter(|| {
52         buf.truncate(0);
53         write!(&mut buf, "{}", time.format_with_items(ITEMS.iter().cloned()))
54             .unwrap()
55     });
56 }
57