• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)13 fn 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)21 fn 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)29 fn 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)41 fn 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