File tree 2 files changed +32
-0
lines changed
2 files changed +32
-0
lines changed Original file line number Diff line number Diff line change @@ -299,6 +299,23 @@ macro_rules! int_module {
299
299
assert_eq!( ( 2 as $T) . isqrt( ) , 1 as $T) ;
300
300
assert_eq!( ( 99 as $T) . isqrt( ) , 9 as $T) ;
301
301
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
+ }
302
319
}
303
320
304
321
#[ test]
Original file line number Diff line number Diff line change @@ -214,6 +214,21 @@ macro_rules! uint_module {
214
214
assert_eq!( ( 99 as $T) . isqrt( ) , 9 as $T) ;
215
215
assert_eq!( ( 100 as $T) . isqrt( ) , 10 as $T) ;
216
216
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
+ }
217
232
}
218
233
219
234
#[ test]
You can’t perform that action at this time.
0 commit comments