Merge pull request #111 from reem/header-benchmarks
Add benchmarks for all implemented headers except set-cookie.
This commit is contained in:
		| @@ -65,3 +65,5 @@ impl HeaderFormat for Accept { | ||||
|     } | ||||
| } | ||||
|  | ||||
| bench_header!(bench, Accept, { vec![b"text/plain; q=0.5, text/html".to_vec()] }) | ||||
|  | ||||
|   | ||||
| @@ -178,3 +178,6 @@ mod tests { | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| bench_header!(raw, Authorization<String>, { vec![b"foo bar baz".to_vec()] }) | ||||
| bench_header!(basic, Authorization<Basic>, { vec![b"Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==".to_vec()] }) | ||||
|   | ||||
| @@ -62,3 +62,6 @@ impl HeaderFormat for Connection { | ||||
|     } | ||||
| } | ||||
|  | ||||
| bench_header!(close, Connection, { vec![b"close".to_vec()] }) | ||||
| bench_header!(keep_alive, Connection, { vec![b"keep-alive".to_vec()] }) | ||||
| bench_header!(header, Connection, { vec![b"authorization".to_vec()] }) | ||||
|   | ||||
| @@ -34,3 +34,5 @@ impl ContentLength { | ||||
|         len | ||||
|     } | ||||
| } | ||||
|  | ||||
| bench_header!(bench, ContentLength, { vec![b"42349984".to_vec()] }) | ||||
|   | ||||
| @@ -27,3 +27,4 @@ impl HeaderFormat for ContentType { | ||||
|     } | ||||
| } | ||||
|  | ||||
| bench_header!(bench, ContentType, { vec![b"application/json; charset=utf-8".to_vec()] }) | ||||
|   | ||||
| @@ -94,3 +94,5 @@ fn test_fmt() { | ||||
|  | ||||
|     assert_eq!(headers.to_string()[], "Cookie: foo=bar; baz=quux\r\n"); | ||||
| } | ||||
|  | ||||
| bench_header!(bench, Cookies, { vec![b"foo=bar; baz=quux".to_vec()] }) | ||||
|   | ||||
| @@ -69,3 +69,7 @@ impl FromStr for Date { | ||||
|     } | ||||
| } | ||||
|  | ||||
| bench_header!(imf_fixdate, Date, { vec![b"Sun, 07 Nov 1994 08:48:37 GMT".to_vec()] }) | ||||
| bench_header!(rfc_850, Date, { vec![b"Sunday, 06-Nov-94 08:49:37 GMT".to_vec()] }) | ||||
| bench_header!(asctime, Date, { vec![b"Sun Nov  6 08:49:37 1994".to_vec()] }) | ||||
|  | ||||
|   | ||||
| @@ -94,3 +94,6 @@ mod tests { | ||||
|         })); | ||||
|     } | ||||
| } | ||||
|  | ||||
| bench_header!(bench, Host, { vec![b"foo.com:3000".to_vec()] }) | ||||
|  | ||||
|   | ||||
| @@ -33,3 +33,5 @@ impl HeaderFormat for Location { | ||||
|     } | ||||
| } | ||||
|  | ||||
| bench_header!(bench, Location, { vec![b"http://foo.com/hello:3000".to_vec()] }) | ||||
|  | ||||
|   | ||||
| @@ -25,8 +25,47 @@ use std::fmt::{mod, Show}; | ||||
| use std::from_str::FromStr; | ||||
| use std::str::from_utf8; | ||||
|  | ||||
| macro_rules! bench_header( | ||||
|     ($name:ident, $ty:ty, $value:expr) => { | ||||
|         #[cfg(test)] | ||||
|         mod $name { | ||||
|             use test::Bencher; | ||||
|             use std::fmt::{mod, Show}; | ||||
|  | ||||
|             use super::*; | ||||
|  | ||||
|             use header::{Header, HeaderFormat}; | ||||
|  | ||||
|             struct HeaderFormatter($ty); | ||||
|  | ||||
|             impl Show for HeaderFormatter { | ||||
|                 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { | ||||
|                     self.0.fmt_header(f) | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             #[bench] | ||||
|             fn bench_parse(b: &mut Bencher) { | ||||
|                 let val = $value; | ||||
|                 b.iter(|| { | ||||
|                     let _: $ty= Header::parse_header(val[]).unwrap(); | ||||
|                 }); | ||||
|             } | ||||
|  | ||||
|             #[bench] | ||||
|             fn bench_format(b: &mut Bencher) { | ||||
|                 let val = HeaderFormatter(Header::parse_header($value[]).unwrap()); | ||||
|                 b.iter(|| { | ||||
|                     format!("{}", val); | ||||
|                 }); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| ) | ||||
|  | ||||
| /// Exposes the Accept header. | ||||
| pub mod accept; | ||||
|  | ||||
| /// Exposes the Authorization header. | ||||
| pub mod authorization; | ||||
|  | ||||
|   | ||||
| @@ -25,3 +25,5 @@ impl HeaderFormat for Server { | ||||
|     } | ||||
| } | ||||
|  | ||||
| bench_header!(bench, Server, { vec![b"Some String".to_vec()] }) | ||||
|  | ||||
|   | ||||
| @@ -84,3 +84,6 @@ impl HeaderFormat for TransferEncoding { | ||||
|     } | ||||
| } | ||||
|  | ||||
| bench_header!(normal, TransferEncoding, { vec![b"chunked, gzip".to_vec()] }) | ||||
| bench_header!(ext, TransferEncoding, { vec![b"ext".to_vec()] }) | ||||
|  | ||||
|   | ||||
| @@ -51,3 +51,5 @@ impl HeaderFormat for Upgrade { | ||||
|     } | ||||
| } | ||||
|  | ||||
| bench_header!(bench, Upgrade, { vec![b"HTTP/2.0, RTA/x11, websocket".to_vec()] }) | ||||
|  | ||||
|   | ||||
| @@ -25,3 +25,5 @@ impl HeaderFormat for UserAgent { | ||||
|     } | ||||
| } | ||||
|  | ||||
| bench_header!(bench, UserAgent, { vec![b"cargo bench".to_vec()] }) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user