Skip to content

Commit 084cfc1

Browse files
committed
bigint: Add benchmarks
1 parent fc41ba1 commit 084cfc1

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

src/libextra/num/bigint.rs

+44
Original file line numberDiff line numberDiff line change
@@ -1983,3 +1983,47 @@ mod bigint_tests {
19831983
assert_eq!(-Zero::zero::<BigInt>(), Zero::zero::<BigInt>());
19841984
}
19851985
}
1986+
1987+
#[cfg(test)]
1988+
mod bench {
1989+
use super::*;
1990+
use std::{iterator, util};
1991+
use std::num::{Zero, One};
1992+
use extra::test::BenchHarness;
1993+
1994+
fn factorial(n: uint) -> BigUint {
1995+
let mut f = One::one::<BigUint>();
1996+
for i in iterator::range_inclusive(1, n) {
1997+
f = f * BigUint::from_uint(i);
1998+
}
1999+
f
2000+
}
2001+
2002+
fn fib(n: uint) -> BigUint {
2003+
let mut f0 = Zero::zero::<BigUint>();
2004+
let mut f1 = One::one::<BigUint>();
2005+
for _ in range(0, n) {
2006+
let f2 = f0 + f1;
2007+
f0 = util::replace(&mut f1, f2);
2008+
}
2009+
f0
2010+
}
2011+
2012+
#[bench]
2013+
fn factorial_100(bh: &mut BenchHarness) {
2014+
do bh.iter { factorial(100); }
2015+
}
2016+
2017+
#[bench]
2018+
fn fib_500(bh: &mut BenchHarness) {
2019+
do bh.iter { fib(100); }
2020+
}
2021+
2022+
#[bench]
2023+
fn to_str(bh: &mut BenchHarness) {
2024+
let fac = factorial(100);
2025+
let fib = fib(100);
2026+
do bh.iter { fac.to_str(); }
2027+
do bh.iter { fib.to_str(); }
2028+
}
2029+
}

0 commit comments

Comments
 (0)