Add Octet benchmarks

This commit is contained in:
Christopher Berner 2019-02-03 22:37:30 -08:00
parent aea5933a31
commit d951e7c00c
3 changed files with 41 additions and 0 deletions

@ -7,9 +7,38 @@ use criterion::Criterion;
use rand::Rng;
use raptorq::SourceBlockEncoder;
use raptorq::SourceBlockDecoder;
use raptorq::Octet;
fn criterion_benchmark(c: &mut Criterion) {
let octet1 = Octet::from(rand::thread_rng().gen_range(1, 255));
let octet2 = Octet::from(rand::thread_rng().gen_range(1, 255));
let octet1_add = octet1.clone();
let octet2_add = octet2.clone();
c.bench_function("Octet add", move |b| b.iter(|| {
octet1_add.clone() + octet2_add.clone()
}));
let octet1_add_ref = octet1.clone();
let octet2_add_ref = octet2.clone();
c.bench_function("Octet add by ref", move |b| b.iter(|| {
&octet1_add_ref + &octet2_add_ref
}));
let octet1_mul = octet1.clone();
let octet2_mul = octet2.clone();
c.bench_function("Octet mul", move |b| b.iter(|| {
octet1_mul.clone() * octet2_mul.clone()
}));
let octet1_mul_ref = octet1.clone();
let octet2_mul_ref = octet2.clone();
c.bench_function("Octet mul by ref", move |b| b.iter(|| {
&octet1_mul_ref * &octet2_mul_ref
}));
let elements = 10*1024;
let symbol_size = 512;
let mut data: Vec<u8> = vec![0; elements];

@ -12,5 +12,6 @@ mod encoder;
mod decoder;
pub use base::PayloadId;
pub use octet::Octet;
pub use encoder::SourceBlockEncoder;
pub use decoder::SourceBlockDecoder;

@ -125,6 +125,17 @@ impl Add for Octet {
}
}
impl<'a, 'b> Add<&'b Octet> for &'a Octet {
type Output = Octet;
fn add(self, other: &'b Octet) -> Octet {
Octet {
// As defined in section 5.7.2, addition on octets is implemented as bitxor
value: self.value ^ other.value
}
}
}
impl AddAssign for Octet {
fn add_assign(&mut self, other: Octet) {
self.value ^= other.value;