common_traits 0.13.0

Traits to write generic functions on different numeric types, with atomic support, and other features.
Documentation
#![feature(test)]
#![allow(deprecated)]
use rand::Rng;
use rand::SeedableRng;
use rand::rngs::SmallRng;

extern crate test;
use common_traits::*;
use test::{Bencher, black_box};

#[bench]
fn test_u8_div(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u8>::MAX);
    b.iter(|| {
        let a = rng.random_range(0..<u8>::MAX);
        black_box(a) / black_box(d)
    })
}
#[bench]
fn test_u8_mod(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u8>::MAX);
    b.iter(|| {
        let a = rng.random_range(0..<u8>::MAX);
        black_box(a) % black_box(d)
    })
}

#[bench]
fn test_u8_fast_div(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u8>::MAX);
    let mask = d.compute_mask_fast();
    b.iter(|| {
        let a = rng.random_range(0..<u8>::MAX);
        black_box(a).fast_div_mask(black_box(mask))
    })
}
#[bench]
fn test_u8_fast_mod(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u8>::MAX);
    let mask = d.compute_mask_fast();
    b.iter(|| {
        let a = rng.random_range(0..<u8>::MAX);
        black_box(a).fast_mod_mask(black_box(d), black_box(mask))
    })
}
#[bench]
fn test_u8_fast_range(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u8>::MAX);
    b.iter(|| {
        let a = rng.random_range(0..<u8>::MAX);
        black_box(a).fast_range(black_box(d))
    })
}

#[bench]
fn test_u16_div(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u16>::MAX);
    b.iter(|| {
        let a = rng.random_range(0..<u16>::MAX);
        black_box(a) / black_box(d)
    })
}
#[bench]
fn test_u16_mod(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u16>::MAX);
    b.iter(|| {
        let a = rng.random_range(0..<u16>::MAX);
        black_box(a) % black_box(d)
    })
}

#[bench]
fn test_u16_fast_div(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u16>::MAX);
    let mask = d.compute_mask_fast();
    b.iter(|| {
        let a = rng.random_range(0..<u16>::MAX);
        black_box(a).fast_div_mask(black_box(mask))
    })
}
#[bench]
fn test_u16_fast_mod(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u16>::MAX);
    let mask = d.compute_mask_fast();
    b.iter(|| {
        let a = rng.random_range(0..<u16>::MAX);
        black_box(a).fast_mod_mask(black_box(d), black_box(mask))
    })
}
#[bench]
fn test_u16_fast_range(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u16>::MAX);
    b.iter(|| {
        let a = rng.random_range(0..<u16>::MAX);
        black_box(a).fast_range(black_box(d))
    })
}

#[bench]
fn test_u32_div(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u32>::MAX);
    b.iter(|| {
        let a = rng.random_range(0..<u32>::MAX);
        black_box(a) / black_box(d)
    })
}
#[bench]
fn test_u32_mod(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u32>::MAX);
    b.iter(|| {
        let a = rng.random_range(0..<u32>::MAX);
        black_box(a) % black_box(d)
    })
}

#[bench]
fn test_u32_fast_div(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u32>::MAX);
    let mask = d.compute_mask_fast();
    b.iter(|| {
        let a = rng.random_range(0..<u32>::MAX);
        black_box(a).fast_div_mask(black_box(mask))
    })
}
#[bench]
fn test_u32_fast_mod(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u32>::MAX);
    let mask = d.compute_mask_fast();
    b.iter(|| {
        let a = rng.random_range(0..<u32>::MAX);
        black_box(a).fast_mod_mask(black_box(d), black_box(mask))
    })
}
#[bench]
fn test_u32_fast_range(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u32>::MAX);
    b.iter(|| {
        let a = rng.random_range(0..<u32>::MAX);
        black_box(a).fast_range(black_box(d))
    })
}

#[bench]
fn test_u64_div(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u64>::MAX);
    b.iter(|| {
        let a = rng.random_range(0..<u64>::MAX);
        black_box(a) / black_box(d)
    })
}
#[bench]
fn test_u64_mod(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u64>::MAX);
    b.iter(|| {
        let a = rng.random_range(0..<u64>::MAX);
        black_box(a) % black_box(d)
    })
}

#[bench]
fn test_u64_fast_div(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u64>::MAX);
    let mask = d.compute_mask_fast();
    b.iter(|| {
        let a = rng.random_range(0..<u64>::MAX);
        black_box(a).fast_div_mask(black_box(mask))
    })
}
#[bench]
fn test_u64_fast_mod(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u64>::MAX);
    let mask = d.compute_mask_fast();
    b.iter(|| {
        let a = rng.random_range(0..<u64>::MAX);
        black_box(a).fast_mod_mask(black_box(d), black_box(mask))
    })
}
#[bench]
fn test_u64_fast_range(b: &mut Bencher) {
    let mut rng = SmallRng::seed_from_u64(0);
    let d = rng.random_range(2..<u64>::MAX);
    b.iter(|| {
        let a = rng.random_range(0..<u64>::MAX);
        black_box(a).fast_range(black_box(d))
    })
}