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