File tree Expand file tree Collapse file tree 2 files changed +32
-0
lines changed Expand file tree Collapse file tree 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 {
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]
Original file line number Diff line number Diff 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]
You can’t perform that action at this time.
0 commit comments