@@ -542,14 +542,13 @@ impl BigUint {
542542 pub fn new ( digits : Vec < u32 > ) -> BigUint {
543543 let mut big = Self :: ZERO ;
544544
545- #[ cfg( not( u64_digit) ) ]
546- {
547- big. data = digits;
548- big. normalize ( ) ;
549- }
550-
551- #[ cfg( u64_digit) ]
552- big. assign_from_slice ( & digits) ;
545+ cfg_digit_expr ! (
546+ {
547+ big. data = digits;
548+ big. normalize( ) ;
549+ } ,
550+ big. assign_from_slice( & digits)
551+ ) ;
553552
554553 big
555554 }
@@ -571,11 +570,10 @@ impl BigUint {
571570 pub fn assign_from_slice ( & mut self , slice : & [ u32 ] ) {
572571 self . data . clear ( ) ;
573572
574- #[ cfg( not( u64_digit) ) ]
575- self . data . extend_from_slice ( slice) ;
576-
577- #[ cfg( u64_digit) ]
578- self . data . extend ( slice. chunks ( 2 ) . map ( u32_chunk_to_u64) ) ;
573+ cfg_digit_expr ! (
574+ self . data. extend_from_slice( slice) ,
575+ self . data. extend( slice. chunks( 2 ) . map( u32_chunk_to_u64) )
576+ ) ;
579577
580578 self . normalize ( ) ;
581579 }
@@ -1118,59 +1116,61 @@ fn u32_chunk_to_u64(chunk: &[u32]) -> u64 {
11181116 digit
11191117}
11201118
1121- /// Combine four `u32`s into a single `u128`.
1122- #[ cfg( any( test, not( u64_digit) ) ) ]
1123- #[ inline]
1124- fn u32_to_u128 ( a : u32 , b : u32 , c : u32 , d : u32 ) -> u128 {
1125- u128:: from ( d) | ( u128:: from ( c) << 32 ) | ( u128:: from ( b) << 64 ) | ( u128:: from ( a) << 96 )
1126- }
1127-
1128- /// Split a single `u128` into four `u32`.
1129- #[ cfg( any( test, not( u64_digit) ) ) ]
1130- #[ inline]
1131- fn u32_from_u128 ( n : u128 ) -> ( u32 , u32 , u32 , u32 ) {
1132- (
1133- ( n >> 96 ) as u32 ,
1134- ( n >> 64 ) as u32 ,
1135- ( n >> 32 ) as u32 ,
1136- n as u32 ,
1137- )
1138- }
1139-
1140- #[ cfg( not( u64_digit) ) ]
1141- #[ test]
1142- fn test_from_slice ( ) {
1143- fn check ( slice : & [ u32 ] , data : & [ BigDigit ] ) {
1144- assert_eq ! ( BigUint :: from_slice( slice) . data, data) ;
1145- }
1146- check ( & [ 1 ] , & [ 1 ] ) ;
1147- check ( & [ 0 , 0 , 0 ] , & [ ] ) ;
1148- check ( & [ 1 , 2 , 0 , 0 ] , & [ 1 , 2 ] ) ;
1149- check ( & [ 0 , 0 , 1 , 2 ] , & [ 0 , 0 , 1 , 2 ] ) ;
1150- check ( & [ 0 , 0 , 1 , 2 , 0 , 0 ] , & [ 0 , 0 , 1 , 2 ] ) ;
1151- check ( & [ -1i32 as u32 ] , & [ -1i32 as BigDigit ] ) ;
1152- }
1119+ cfg_32_or_test ! (
1120+ /// Combine four `u32`s into a single `u128`.
1121+ #[ inline]
1122+ fn u32_to_u128( a: u32 , b: u32 , c: u32 , d: u32 ) -> u128 {
1123+ u128 :: from( d) | ( u128 :: from( c) << 32 ) | ( u128 :: from( b) << 64 ) | ( u128 :: from( a) << 96 )
1124+ }
1125+ ) ;
11531126
1154- #[ cfg( u64_digit) ]
1155- #[ test]
1156- fn test_from_slice ( ) {
1157- fn check ( slice : & [ u32 ] , data : & [ BigDigit ] ) {
1158- assert_eq ! (
1159- BigUint :: from_slice( slice) . data,
1160- data,
1161- "from {:?}, to {:?}" ,
1162- slice,
1163- data
1164- ) ;
1127+ cfg_32_or_test ! (
1128+ /// Split a single `u128` into four `u32`.
1129+ #[ inline]
1130+ fn u32_from_u128( n: u128 ) -> ( u32 , u32 , u32 , u32 ) {
1131+ (
1132+ ( n >> 96 ) as u32 ,
1133+ ( n >> 64 ) as u32 ,
1134+ ( n >> 32 ) as u32 ,
1135+ n as u32 ,
1136+ )
11651137 }
1166- check ( & [ 1 ] , & [ 1 ] ) ;
1167- check ( & [ 0 , 0 , 0 ] , & [ ] ) ;
1168- check ( & [ 1 , 2 ] , & [ 8_589_934_593 ] ) ;
1169- check ( & [ 1 , 2 , 0 , 0 ] , & [ 8_589_934_593 ] ) ;
1170- check ( & [ 0 , 0 , 1 , 2 ] , & [ 0 , 8_589_934_593 ] ) ;
1171- check ( & [ 0 , 0 , 1 , 2 , 0 , 0 ] , & [ 0 , 8_589_934_593 ] ) ;
1172- check ( & [ -1i32 as u32 ] , & [ ( -1i32 as u32 ) as BigDigit ] ) ;
1173- }
1138+ ) ;
1139+
1140+ cfg_digit ! (
1141+ #[ test]
1142+ fn test_from_slice( ) {
1143+ fn check( slice: & [ u32 ] , data: & [ BigDigit ] ) {
1144+ assert_eq!( BigUint :: from_slice( slice) . data, data) ;
1145+ }
1146+ check( & [ 1 ] , & [ 1 ] ) ;
1147+ check( & [ 0 , 0 , 0 ] , & [ ] ) ;
1148+ check( & [ 1 , 2 , 0 , 0 ] , & [ 1 , 2 ] ) ;
1149+ check( & [ 0 , 0 , 1 , 2 ] , & [ 0 , 0 , 1 , 2 ] ) ;
1150+ check( & [ 0 , 0 , 1 , 2 , 0 , 0 ] , & [ 0 , 0 , 1 , 2 ] ) ;
1151+ check( & [ -1i32 as u32 ] , & [ -1i32 as BigDigit ] ) ;
1152+ }
1153+
1154+ #[ test]
1155+ fn test_from_slice( ) {
1156+ fn check( slice: & [ u32 ] , data: & [ BigDigit ] ) {
1157+ assert_eq!(
1158+ BigUint :: from_slice( slice) . data,
1159+ data,
1160+ "from {:?}, to {:?}" ,
1161+ slice,
1162+ data
1163+ ) ;
1164+ }
1165+ check( & [ 1 ] , & [ 1 ] ) ;
1166+ check( & [ 0 , 0 , 0 ] , & [ ] ) ;
1167+ check( & [ 1 , 2 ] , & [ 8_589_934_593 ] ) ;
1168+ check( & [ 1 , 2 , 0 , 0 ] , & [ 8_589_934_593 ] ) ;
1169+ check( & [ 0 , 0 , 1 , 2 ] , & [ 0 , 8_589_934_593 ] ) ;
1170+ check( & [ 0 , 0 , 1 , 2 , 0 , 0 ] , & [ 0 , 8_589_934_593 ] ) ;
1171+ check( & [ -1i32 as u32 ] , & [ ( -1i32 as u32 ) as BigDigit ] ) ;
1172+ }
1173+ ) ;
11741174
11751175#[ test]
11761176fn test_u32_u128 ( ) {
0 commit comments