1 // `cargo test --benches` and `#[feature(test)]` work only in nightly 2 #![cfg(rustc_nightly)] 3 #![feature(test)] 4 5 extern crate protobuf; 6 extern crate test; 7 8 use protobuf::CodedOutputStream; 9 10 use self::test::Bencher; 11 12 #[inline] buffer_write_byte(os: &mut CodedOutputStream)13fn buffer_write_byte(os: &mut CodedOutputStream) { 14 for i in 0..10 { 15 os.write_raw_byte(test::black_box(i as u8)).unwrap(); 16 } 17 os.flush().unwrap(); 18 } 19 20 #[inline] buffer_write_bytes(os: &mut CodedOutputStream)21fn buffer_write_bytes(os: &mut CodedOutputStream) { 22 for _ in 0..10 { 23 os.write_raw_bytes(test::black_box(b"1234567890")).unwrap(); 24 } 25 os.flush().unwrap(); 26 } 27 28 #[bench] bench_buffer(b: &mut Bencher)29fn bench_buffer(b: &mut Bencher) { 30 b.iter(|| { 31 let mut v = Vec::new(); 32 { 33 let mut os = CodedOutputStream::new(&mut v); 34 buffer_write_byte(&mut os); 35 } 36 v 37 }); 38 } 39 40 #[bench] bench_buffer_bytes(b: &mut Bencher)41fn bench_buffer_bytes(b: &mut Bencher) { 42 b.iter(|| { 43 let mut v = Vec::new(); 44 { 45 let mut os = CodedOutputStream::new(&mut v); 46 buffer_write_bytes(&mut os); 47 } 48 v 49 }); 50 } 51 52 #[bench] bench_write_raw_varint_32(b: &mut Bencher)53fn bench_write_raw_varint_32(b: &mut Bencher) { 54 let mut v = Vec::with_capacity(10_000); 55 b.iter(|| { 56 v.clear(); 57 { 58 let mut os = CodedOutputStream::new(&mut v); 59 for i in 0..1000 { 60 os.write_raw_varint32(i * 139 % 1000).unwrap(); 61 } 62 } 63 v.len() 64 }) 65 } 66