#![feature(test)] extern crate test; use std::collections::HashMap; use test::Bencher; extern crate inferium; use inferium::h1::{SyncClient, Response, ResponseHead, ProtocolVariant}; use inferium::{Status, HeaderValue}; use inferium::TestSyncStream; fn parse_response_sync_inner() { let src = "HTTP/1.1 200 OK\r\nserver: inferium\r\n\r\n".as_bytes().to_vec(); let stream = TestSyncStream::<4>::new(&src); let mut client = SyncClient::>::new(stream); let target = Response::HeadersOnly(ResponseHead::new( Status::Ok, ProtocolVariant::HTTP1_1, HashMap::from([ ("server".into(), HeaderValue::new(vec!["inferium".to_string()])) ]) )); assert_eq!(client.receive_response().unwrap(), target); } fn parse_response_sync_inner_body() { let mut src = "HTTP/1.1 200 OK\r\ncontent-length: 50\r\n\r\n".as_bytes().to_vec(); src.extend_from_slice(b"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); let stream = TestSyncStream::<4>::new(&src); let mut client = SyncClient::>::new(stream); let target_head = ResponseHead::new( Status::Ok, ProtocolVariant::HTTP1_1, HashMap::from([ ("content-length".into(), HeaderValue::new(vec!["50".to_string()])) ]) ); let Response::WithSizedBody((h, mut b)) = client.receive_response().unwrap() else { panic!(); }; let b = b.recv_all().unwrap(); assert_eq!(h, target_head); assert_eq!(b, b"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); } #[bench] fn parse_response_sync(b: &mut Bencher) { b.bytes = 37; b.iter(|| { parse_response_sync_inner(); }); } #[bench] fn parse_response_sync_with_body(b: &mut Bencher) { b.bytes = 39 + 13; b.iter(|| { parse_response_sync_inner_body(); }); }