psychopath/sub_crates/trifloat/benches/bench.rs
Nathan Vegdahl 9fb3c95171 Added an unsigned 40-bit trifloat format.
It is identical to the 32-bit format, except with more precision
and range due to using more bits.  This format should comfortably
store any color information with precision easily exceeding the
limits of human vision.
2020-09-18 22:12:12 +09:00

85 lines
2.2 KiB
Rust

use bencher::{benchmark_group, benchmark_main, black_box, Bencher};
use rand::{rngs::SmallRng, FromEntropy, Rng};
use trifloat::{signed48, unsigned32, unsigned40};
//----
fn unsigned32_encode_100_values(bench: &mut Bencher) {
let mut rng = SmallRng::from_entropy();
bench.iter(|| {
let x = rng.gen::<f32>();
let y = rng.gen::<f32>();
let z = rng.gen::<f32>();
for _ in 0..100 {
black_box(unsigned32::encode(black_box((x, y, z))));
}
});
}
fn unsigned32_decode_100_values(bench: &mut Bencher) {
let mut rng = SmallRng::from_entropy();
bench.iter(|| {
let v = rng.gen::<u32>();
for _ in 0..100 {
black_box(unsigned32::decode(black_box(v)));
}
});
}
fn unsigned40_encode_100_values(bench: &mut Bencher) {
let mut rng = SmallRng::from_entropy();
bench.iter(|| {
let x = rng.gen::<f32>();
let y = rng.gen::<f32>();
let z = rng.gen::<f32>();
for _ in 0..100 {
black_box(unsigned40::encode(black_box((x, y, z))));
}
});
}
fn unsigned40_decode_100_values(bench: &mut Bencher) {
let mut rng = SmallRng::from_entropy();
bench.iter(|| {
let v = rng.gen::<u64>();
for _ in 0..100 {
black_box(unsigned40::decode(black_box(v)));
}
});
}
fn signed48_encode_100_values(bench: &mut Bencher) {
let mut rng = SmallRng::from_entropy();
bench.iter(|| {
let x = rng.gen::<f32>() - 0.5;
let y = rng.gen::<f32>() - 0.5;
let z = rng.gen::<f32>() - 0.5;
for _ in 0..100 {
black_box(signed48::encode(black_box((x, y, z))));
}
});
}
fn signed48_decode_100_values(bench: &mut Bencher) {
let mut rng = SmallRng::from_entropy();
bench.iter(|| {
let v = rng.gen::<u64>() & 0x0000_FFFF_FFFF_FFFF;
for _ in 0..100 {
black_box(signed48::decode(black_box(v)));
}
});
}
//----
benchmark_group!(
benches,
unsigned32_encode_100_values,
unsigned32_decode_100_values,
unsigned40_encode_100_values,
unsigned40_decode_100_values,
signed48_encode_100_values,
signed48_decode_100_values,
);
benchmark_main!(benches);