Skip to content

Instantly share code, notes, and snippets.

@workingjubilee
Created September 5, 2020 23:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save workingjubilee/2d2e3a7fded1c2101aafb51dc79a7ec5 to your computer and use it in GitHub Desktop.
Save workingjubilee/2d2e3a7fded1c2101aafb51dc79a7ec5 to your computer and use it in GitHub Desktop.
Benching write!, write_fmt, fmt::Write::write_str, and io::Write::write
#![allow(unused_must_use)]
#![feature(test)]
extern crate test;
use std::fmt::Write as FmtWrite;
use std::io::Write as IoWrite;
use std::vec::Vec;
use test::Bencher;
#[bench]
fn vec_write_value(bh: &mut Bencher) {
bh.iter(|| {
let mut mem: Vec<u8> = Vec::new();
for _ in 0..1000 {
mem.write("abc".as_bytes());
}
});
}
#[bench]
fn vec_write_ref(bh: &mut Bencher) {
bh.iter(|| {
let mut mem: Vec<u8> = Vec::new();
let wr = &mut mem as &mut dyn IoWrite;
for _ in 0..1000 {
wr.write("abc".as_bytes());
}
});
}
#[bench]
fn vec_write_macro1(bh: &mut Bencher) {
bh.iter(|| {
let mut mem: Vec<u8> = Vec::new();
let wr = &mut mem as &mut dyn IoWrite;
for _ in 0..1000 {
write!(wr, "abc");
}
});
}
#[bench]
fn vec_write_macro2(bh: &mut Bencher) {
bh.iter(|| {
let mut mem: Vec<u8> = Vec::new();
let wr = &mut mem as &mut dyn IoWrite;
for _ in 0..1000 {
write!(wr, "{}", "abc");
}
});
}
#[bench]
fn vec_write_fmt(bh: &mut Bencher) {
bh.iter(|| {
let mut mem: Vec<u8> = Vec::new();
let wr = &mut mem as &mut dyn IoWrite;
for _ in 0..1000 {
wr.write_fmt(format_args!("abc"));
}
});
}
#[bench]
fn string_write_value(bh: &mut Bencher) {
bh.iter(|| {
let mut mem = String::new();
for _ in 0..1000 {
mem.write_str("abc");
}
});
}
#[bench]
fn string_write_ref(bh: &mut Bencher) {
bh.iter(|| {
let mut mem = String::new();
let wr = &mut mem as &mut dyn FmtWrite;
for _ in 0..1000 {
wr.write_str("abc");
}
});
}
#[bench]
fn string_write_macro1(bh: &mut Bencher) {
bh.iter(|| {
let mut mem = String::new();
let wr = &mut mem as &mut dyn FmtWrite;
for _ in 0..1000 {
write!(wr, "abc");
}
});
}
#[bench]
fn string_write_macro2(bh: &mut Bencher) {
bh.iter(|| {
let mut mem = String::new();
let wr = &mut mem as &mut dyn FmtWrite;
for _ in 0..1000 {
write!(wr, "{}", "abc");
}
});
}
#[bench]
fn string_write_fmt(bh: &mut Bencher) {
bh.iter(|| {
let mut mem = String::new();
let wr = &mut mem as &mut dyn FmtWrite;
for _ in 0..1000 {
wr.write_fmt(format_args!("abc"));
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment