From 084cfc10f5bea02f6bd32856eb2c343692af25c9 Mon Sep 17 00:00:00 2001 From: gifnksm Date: Mon, 26 Aug 2013 00:26:03 +0900 Subject: [PATCH] bigint: Add benchmarks --- src/libextra/num/bigint.rs | 44 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/libextra/num/bigint.rs b/src/libextra/num/bigint.rs index 6e2a6fcbfeea9..6c8011f2b9e21 100644 --- a/src/libextra/num/bigint.rs +++ b/src/libextra/num/bigint.rs @@ -1983,3 +1983,47 @@ mod bigint_tests { assert_eq!(-Zero::zero::(), Zero::zero::()); } } + +#[cfg(test)] +mod bench { + use super::*; + use std::{iterator, util}; + use std::num::{Zero, One}; + use extra::test::BenchHarness; + + fn factorial(n: uint) -> BigUint { + let mut f = One::one::(); + for i in iterator::range_inclusive(1, n) { + f = f * BigUint::from_uint(i); + } + f + } + + fn fib(n: uint) -> BigUint { + let mut f0 = Zero::zero::(); + let mut f1 = One::one::(); + for _ in range(0, n) { + let f2 = f0 + f1; + f0 = util::replace(&mut f1, f2); + } + f0 + } + + #[bench] + fn factorial_100(bh: &mut BenchHarness) { + do bh.iter { factorial(100); } + } + + #[bench] + fn fib_500(bh: &mut BenchHarness) { + do bh.iter { fib(100); } + } + + #[bench] + fn to_str(bh: &mut BenchHarness) { + let fac = factorial(100); + let fib = fib(100); + do bh.iter { fac.to_str(); } + do bh.iter { fib.to_str(); } + } +}