Skip to content

Commit d49da0f

Browse files
committed
isqrt: add more tests
1 parent 68f0b47 commit d49da0f

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

library/core/tests/num/int_macros.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,23 @@ macro_rules! int_module {
299299
assert_eq!((2 as $T).isqrt(), 1 as $T);
300300
assert_eq!((99 as $T).isqrt(), 9 as $T);
301301
assert_eq!((100 as $T).isqrt(), 10 as $T);
302+
303+
let n_max: $T = (1024 * 1024).min($T::MAX as u128) as $T;
304+
for n in 0..=n_max {
305+
let isqrt: $T = n.isqrt();
306+
307+
assert!(isqrt.pow(2) <= n);
308+
let (square, overflow) = (isqrt + 1).overflowing_pow(2);
309+
assert!(overflow || square > n);
310+
}
311+
312+
for n in ($T::MAX - 127)..=$T::MAX {
313+
let isqrt: $T = n.isqrt();
314+
315+
assert!(isqrt.pow(2) <= n);
316+
let (square, overflow) = (isqrt + 1).overflowing_pow(2);
317+
assert!(overflow || square > n);
318+
}
302319
}
303320

304321
#[test]

library/core/tests/num/uint_macros.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,21 @@ macro_rules! uint_module {
214214
assert_eq!((99 as $T).isqrt(), 9 as $T);
215215
assert_eq!((100 as $T).isqrt(), 10 as $T);
216216
assert_eq!($T::MAX.isqrt(), (1 << ($T::BITS / 2)) - 1);
217+
218+
let n_max: $T = (1024 * 1024).min($T::MAX as u128) as $T;
219+
for n in 0..=n_max {
220+
let isqrt: $T = n.isqrt();
221+
222+
assert!(isqrt.pow(2) <= n);
223+
assert!(isqrt + 1 == (1 as $T) << ($T::BITS / 2) || (isqrt + 1).pow(2) > n);
224+
}
225+
226+
for n in ($T::MAX - 255)..=$T::MAX {
227+
let isqrt: $T = n.isqrt();
228+
229+
assert!(isqrt.pow(2) <= n);
230+
assert!(isqrt + 1 == (1 as $T) << ($T::BITS / 2) || (isqrt + 1).pow(2) > n);
231+
}
217232
}
218233

219234
#[test]

0 commit comments

Comments
 (0)