Skip to content

Commit

Permalink
Make Int::pow() take exp as u32 instead usize
Browse files Browse the repository at this point in the history
  • Loading branch information
GuillaumeGomez committed Mar 1, 2015
1 parent 8902936 commit 1c4fb90
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 3 deletions.
3 changes: 2 additions & 1 deletion src/libcore/num/mod.rs
Expand Up @@ -372,9 +372,10 @@ pub trait Int
#[unstable(feature = "core",
reason = "pending integer conventions")]
#[inline]
fn pow(self, mut exp: uint) -> Self {
fn pow(self, mut exp: u32) -> Self {
let mut base = self;
let mut acc: Self = Int::one();

while exp > 0 {
if (exp & 1) == 1 {
acc = acc * base;
Expand Down
11 changes: 11 additions & 0 deletions src/libcoretest/num/int_macros.rs
Expand Up @@ -201,6 +201,17 @@ mod tests {
assert_eq!(FromStrRadix::from_str_radix("Z", 35).ok(), None::<$T>);
assert_eq!(FromStrRadix::from_str_radix("-9", 2).ok(), None::<$T>);
}

#[test]
fn test_pow() {
let mut r = 2 as $T;

assert_eq!(r.pow(2u32), 4 as $T);
assert_eq!(r.pow(0u32), 1 as $T);
r = -2 as $T;
assert_eq!(r.pow(2u32), 4 as $T);
assert_eq!(r.pow(3u32), -8 as $T);
}
}

)}
2 changes: 1 addition & 1 deletion src/libstd/num/mod.rs
Expand Up @@ -1830,6 +1830,6 @@ mod bench {
#[bench]
fn bench_pow_function(b: &mut Bencher) {
let v = (0..1024).collect::<Vec<_>>();
b.iter(|| {v.iter().fold(0, |old, new| old.pow(*new));});
b.iter(|| {v.iter().fold(0, |old, new| old.pow(*new as u32));});
}
}
2 changes: 1 addition & 1 deletion src/test/bench/shootout-binarytrees.rs
Expand Up @@ -109,7 +109,7 @@ fn main() {

let messages = range_step(min_depth, max_depth + 1, 2).map(|depth| {
use std::num::Int;
let iterations = 2.pow((max_depth - depth + min_depth) as usize);
let iterations = 2.pow((max_depth - depth + min_depth) as u32);
thread::scoped(move || inner(depth, iterations))
}).collect::<Vec<_>>();

Expand Down

0 comments on commit 1c4fb90

Please sign in to comment.