Add benchmarks for bigint to/from_str_radix
This commit is contained in:
parent
f8351af572
commit
84542e6e03
|
@ -6,14 +6,17 @@ extern crate rand;
|
||||||
|
|
||||||
use std::mem::replace;
|
use std::mem::replace;
|
||||||
use test::Bencher;
|
use test::Bencher;
|
||||||
use num::{BigUint, Zero, One, FromPrimitive};
|
use num::{BigInt, BigUint, Zero, One, FromPrimitive};
|
||||||
use num::bigint::RandBigInt;
|
use num::bigint::RandBigInt;
|
||||||
use rand::{SeedableRng, StdRng};
|
use rand::{SeedableRng, StdRng};
|
||||||
|
|
||||||
fn multiply_bench(b: &mut Bencher, xbits: usize, ybits: usize) {
|
fn get_rng() -> StdRng {
|
||||||
let seed: &[_] = &[1, 2, 3, 4];
|
let seed: &[_] = &[1, 2, 3, 4];
|
||||||
let mut rng: StdRng = SeedableRng::from_seed(seed);
|
SeedableRng::from_seed(seed)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn multiply_bench(b: &mut Bencher, xbits: usize, ybits: usize) {
|
||||||
|
let mut rng = get_rng();
|
||||||
let x = rng.gen_bigint(xbits);
|
let x = rng.gen_bigint(xbits);
|
||||||
let y = rng.gen_bigint(ybits);
|
let y = rng.gen_bigint(ybits);
|
||||||
|
|
||||||
|
@ -21,9 +24,7 @@ fn multiply_bench(b: &mut Bencher, xbits: usize, ybits: usize) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn divide_bench(b: &mut Bencher, xbits: usize, ybits: usize) {
|
fn divide_bench(b: &mut Bencher, xbits: usize, ybits: usize) {
|
||||||
let seed: &[_] = &[1, 2, 3, 4];
|
let mut rng = get_rng();
|
||||||
let mut rng: StdRng = SeedableRng::from_seed(seed);
|
|
||||||
|
|
||||||
let x = rng.gen_bigint(xbits);
|
let x = rng.gen_bigint(xbits);
|
||||||
let y = rng.gen_bigint(ybits);
|
let y = rng.gen_bigint(ybits);
|
||||||
|
|
||||||
|
@ -81,28 +82,89 @@ fn divide_2(b: &mut Bencher) {
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
fn factorial_100(b: &mut Bencher) {
|
fn factorial_100(b: &mut Bencher) {
|
||||||
b.iter(|| {
|
b.iter(|| factorial(100));
|
||||||
factorial(100);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
fn fib_100(b: &mut Bencher) {
|
fn fib_100(b: &mut Bencher) {
|
||||||
b.iter(|| {
|
b.iter(|| fib(100));
|
||||||
fib(100);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
fn to_string(b: &mut Bencher) {
|
fn fac_to_string(b: &mut Bencher) {
|
||||||
let fac = factorial(100);
|
let fac = factorial(100);
|
||||||
|
b.iter(|| fac.to_string());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn fib_to_string(b: &mut Bencher) {
|
||||||
let fib = fib(100);
|
let fib = fib(100);
|
||||||
b.iter(|| {
|
b.iter(|| fib.to_string());
|
||||||
fac.to_string();
|
}
|
||||||
});
|
|
||||||
b.iter(|| {
|
fn to_str_radix_bench(b: &mut Bencher, radix: u32) {
|
||||||
fib.to_string();
|
let mut rng = get_rng();
|
||||||
});
|
let x = rng.gen_bigint(1009);
|
||||||
|
b.iter(|| x.to_str_radix(radix));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn to_str_radix_02(b: &mut Bencher) {
|
||||||
|
to_str_radix_bench(b, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn to_str_radix_08(b: &mut Bencher) {
|
||||||
|
to_str_radix_bench(b, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn to_str_radix_10(b: &mut Bencher) {
|
||||||
|
to_str_radix_bench(b, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn to_str_radix_16(b: &mut Bencher) {
|
||||||
|
to_str_radix_bench(b, 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn to_str_radix_36(b: &mut Bencher) {
|
||||||
|
to_str_radix_bench(b, 36);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn from_str_radix_bench(b: &mut Bencher, radix: u32) {
|
||||||
|
use num::Num;
|
||||||
|
let mut rng = get_rng();
|
||||||
|
let x = rng.gen_bigint(1009);
|
||||||
|
let s = x.to_str_radix(radix);
|
||||||
|
assert_eq!(x, BigInt::from_str_radix(&s, radix).unwrap());
|
||||||
|
b.iter(|| BigInt::from_str_radix(&s, radix));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn from_str_radix_02(b: &mut Bencher) {
|
||||||
|
from_str_radix_bench(b, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn from_str_radix_08(b: &mut Bencher) {
|
||||||
|
from_str_radix_bench(b, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn from_str_radix_10(b: &mut Bencher) {
|
||||||
|
from_str_radix_bench(b, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn from_str_radix_16(b: &mut Bencher) {
|
||||||
|
from_str_radix_bench(b, 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn from_str_radix_36(b: &mut Bencher) {
|
||||||
|
from_str_radix_bench(b, 36);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
|
|
Loading…
Reference in New Issue