Skip to content

Commit f3d476b

Browse files
authored
add extra tests
1 parent 8f58ce4 commit f3d476b

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

src/libcore/tests/num/int_macros.rs

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,15 +252,42 @@ macro_rules! int_module {
252252
assert_eq!($T::from_str_radix("-9", 2).ok(), None::<$T>);
253253
}
254254

255+
255256
#[test]
256257
fn test_pow() {
257258
let mut r = 2 as $T;
258-
259259
assert_eq!(r.pow(2), 4 as $T);
260260
assert_eq!(r.pow(0), 1 as $T);
261+
assert_eq!(r.wrapping_pow(2), 4 as $T);
262+
assert_eq!(r.wrapping_pow(0), 1 as $T);
263+
assert_eq!(r.checked_pow(2), Some(4 as $T));
264+
assert_eq!(r.checked_pow(0), Some(1 as $T));
265+
assert_eq!(r.overflowing_pow(2), (4 as $T,false));
266+
assert_eq!(r.overflowing_pow(0), (1 as $T,false));
267+
assert_eq!(r.saturating_pow(2), 4 as $T);
268+
assert_eq!(r.saturating_pow(0), 1 as $T);
269+
270+
r = MAX;
271+
// use `^` to represent .pow() with no overflow.
272+
// if itest::MAX == 2^j-1, then itest is a `j` bit int,
273+
// so that `itest::MAX*itest::MAX == 2^(2*j)-2^(j+1)+1`,
274+
// thussaturating_pow the overflowing result is exactly 1.
275+
assert_eq!(r.wrapping_pow(2), 1 as $T);
276+
assert_eq!(r.checked_pow(2), None);
277+
assert_eq!(r.overflowing_pow(2), (1 as $T,true));
278+
assert_eq!(r.saturating_pow(2), MAX);
279+
//test for negative exponent.
261280
r = -2 as $T;
262-
assert_eq!(r.pow(2), 4 as $T);
263281
assert_eq!(r.pow(3), -8 as $T);
282+
assert_eq!(r.pow(0), 1 as $T);
283+
assert_eq!(r.wrapping_pow(3), -8 as $T);
284+
assert_eq!(r.wrapping_pow(0), 1 as $T);
285+
assert_eq!(r.checked_pow(3), Some(-8) as $T);
286+
assert_eq!(r.checked_pow(0), Some(1) as $T);
287+
assert_eq!(r.overflowing_pow(3), (-8 as $T,false));
288+
assert_eq!(r.overflowing_pow(0), (1 as $T,false));
289+
assert_eq!(r.saturating_pow(3), -8 as $T);
290+
assert_eq!(r.saturating_pow(0), 1 as $T);
264291
}
265292
}
266293
};

0 commit comments

Comments
 (0)