11use crate :: core:: utils:: I256 ;
2+ use crate :: utils:: { U256_ONE , U256_VALUE_32 , U256_ZERO } ;
23use core:: convert:: TryInto ;
34use core:: ops:: Rem ;
45use primitive_types:: { U256 , U512 } ;
56
67#[ inline]
78pub fn div ( op1 : U256 , op2 : U256 ) -> U256 {
8- if op2 == U256 :: zero ( ) {
9- U256 :: zero ( )
9+ if op2 == U256_ZERO {
10+ U256_ZERO
1011 } else {
1112 op1 / op2
1213 }
@@ -22,17 +23,17 @@ pub fn sdiv(op1: U256, op2: U256) -> U256 {
2223
2324#[ inline]
2425pub fn rem ( op1 : U256 , op2 : U256 ) -> U256 {
25- if op2 == U256 :: zero ( ) {
26- U256 :: zero ( )
26+ if op2 == U256_ZERO {
27+ U256_ZERO
2728 } else {
2829 op1. rem ( op2)
2930 }
3031}
3132
3233#[ inline]
3334pub fn srem ( op1 : U256 , op2 : U256 ) -> U256 {
34- if op2 == U256 :: zero ( ) {
35- U256 :: zero ( )
35+ if op2 == U256_ZERO {
36+ U256_ZERO
3637 } else {
3738 let op1: I256 = op1. into ( ) ;
3839 let op2: I256 = op2. into ( ) ;
@@ -48,11 +49,10 @@ pub fn addmod(op1: U256, op2: U256, op3: U256) -> U256 {
4849 let op3: U512 = op3. into ( ) ;
4950
5051 if op3 == U512 :: zero ( ) {
51- U256 :: zero ( )
52+ U256_ZERO
5253 } else {
5354 let v = ( op1 + op2) % op3;
54- v. try_into ( )
55- . expect ( "op3 is less than U256::MAX, thus it never overflows; qed" )
55+ v. try_into ( ) . expect ( "ADDMOD_OP3_OVERFLOW" )
5656 }
5757}
5858
@@ -63,11 +63,10 @@ pub fn mulmod(op1: U256, op2: U256, op3: U256) -> U256 {
6363 let op3: U512 = op3. into ( ) ;
6464
6565 if op3 == U512 :: zero ( ) {
66- U256 :: zero ( )
66+ U256_ZERO
6767 } else {
6868 let v = ( op1 * op2) % op3;
69- v. try_into ( )
70- . expect ( "op3 is less than U256::MAX, thus it never overflows; qed" )
69+ v. try_into ( ) . expect ( "MULMOD_OP3_OVERFLOW" )
7170 }
7271}
7372
@@ -77,8 +76,8 @@ pub fn exp(op1: U256, op2: U256) -> U256 {
7776 let mut op2 = op2;
7877 let mut r: U256 = 1 . into ( ) ;
7978
80- while op2 != 0 . into ( ) {
81- if op2 & 1 . into ( ) != 0 . into ( ) {
79+ while op2 != U256_ZERO {
80+ if op2 & U256_ONE != U256_ZERO {
8281 r = r. overflowing_mul ( op1) . 0 ;
8382 }
8483 op2 >>= 1 ;
@@ -105,12 +104,12 @@ pub fn exp(op1: U256, op2: U256) -> U256 {
105104/// bits from `b`; this is equal to `y & mask` where `&` is bitwise `AND`.
106105#[ inline]
107106pub fn signextend ( op1 : U256 , op2 : U256 ) -> U256 {
108- if op1 < U256 :: from ( 32 ) {
107+ if op1 < U256_VALUE_32 {
109108 // `low_u32` works since op1 < 32
110109 #[ allow( clippy:: as_conversions) ]
111110 let bit_index = ( 8 * op1. low_u32 ( ) + 7 ) as usize ;
112111 let bit = op2. bit ( bit_index) ;
113- let mask = ( U256 :: one ( ) << bit_index) - U256 :: one ( ) ;
112+ let mask = ( U256_ONE << bit_index) - U256_ONE ;
114113 if bit {
115114 op2 | !mask
116115 } else {
@@ -124,21 +123,22 @@ pub fn signextend(op1: U256, op2: U256) -> U256 {
124123#[ cfg( test) ]
125124mod tests {
126125 use super :: { signextend, U256 } ;
126+ use crate :: utils:: { U256_ONE , U256_VALUE_32 , U256_ZERO } ;
127127
128128 /// Test to ensure new (optimized) `signextend` implementation is equivalent to the previous
129129 /// implementation.
130130 #[ test]
131131 fn test_signextend ( ) {
132132 let test_values = vec ! [
133- U256 :: zero ( ) ,
134- U256 :: one ( ) ,
133+ U256_ZERO ,
134+ U256_ONE ,
135135 U256 :: from( 8 ) ,
136136 U256 :: from( 10 ) ,
137137 U256 :: from( 65 ) ,
138138 U256 :: from( 100 ) ,
139139 U256 :: from( 128 ) ,
140- U256 :: from( 11 ) * ( U256 :: one ( ) << 65 ) ,
141- U256 :: from( 7 ) * ( U256 :: one ( ) << 123 ) ,
140+ U256 :: from( 11 ) * ( U256_ONE << 65 ) ,
141+ U256 :: from( 7 ) * ( U256_ONE << 123 ) ,
142142 U256 :: MAX / 167 ,
143143 U256 :: MAX ,
144144 ] ;
@@ -157,16 +157,16 @@ mod tests {
157157 }
158158
159159 fn old_signextend ( op1 : U256 , op2 : U256 ) -> U256 {
160- if op1 > U256 :: from ( 32 ) {
160+ if op1 > U256_VALUE_32 {
161161 op2
162162 } else {
163- let mut ret = U256 :: zero ( ) ;
163+ let mut ret = U256_ZERO ;
164164 let len: usize = op1. as_usize ( ) ;
165165 let t: usize = 8 * ( len + 1 ) - 1 ;
166- let t_bit_mask = U256 :: one ( ) << t;
166+ let t_bit_mask = U256_ONE << t;
167167 let t_value = ( op2 & t_bit_mask) >> t;
168168 for i in 0 ..256 {
169- let bit_mask = U256 :: one ( ) << i;
169+ let bit_mask = U256_ONE << i;
170170 let i_value = ( op2 & bit_mask) >> i;
171171 if i <= t {
172172 ret = ret. overflowing_add ( i_value << i) . 0 ;
0 commit comments