1- use rug :: integer :: BorrowInteger ;
1+ use num :: { BigUint , Zero } ;
22
33use crate :: {
44 binder:: Eval ,
@@ -11,27 +11,27 @@ pub const UNIT_EX_MEM: i64 = 1;
1111pub const BOOL_EX_MEM : i64 = 1 ;
1212
1313pub fn integer_ex_mem ( i : & Integer ) -> i64 {
14- if * i == 0 {
14+ if i . is_zero ( ) {
1515 1
1616 } else {
17- ( integer_log2 ( i. as_abs ( ) ) / 64 ) + 1
17+ ( integer_log2 ( i. magnitude ( ) ) / 64 ) + 1
1818 }
1919}
2020
21- pub fn integer_log2 ( i : BorrowInteger < ' _ > ) -> i64 {
21+ pub fn integer_log2 ( i : & BigUint ) -> i64 {
2222 if i. is_zero ( ) {
2323 return 0 ;
2424 }
2525
26- ( i. significant_bits ( ) - 1 ) as i64
26+ ( i. bits ( ) - 1 ) as i64
2727}
2828
2929pub fn integer_log2_x ( i : & Integer ) -> i64 {
3030 if i. is_zero ( ) {
3131 return 0 ;
3232 }
3333
34- ( i. significant_bits ( ) - 1 ) as i64
34+ ( i. bits ( ) - 1 ) as i64
3535}
3636
3737pub fn byte_string_ex_mem ( b : & [ u8 ] ) -> i64 {
@@ -129,76 +129,78 @@ pub fn ml_result_ex_mem() -> i64 {
129129mod tests {
130130 use std:: str:: FromStr ;
131131
132+ use crate :: constant:: Integer ;
133+
132134 use super :: integer_log2;
133135
134136 #[ test]
135137 fn integer_log2_oracle ( ) {
136138 // Values come from the Haskell implementation
137- assert_eq ! ( integer_log2( rug :: Integer :: from ( 0 ) . as_abs ( ) ) , 0 ) ;
138- assert_eq ! ( integer_log2( rug :: Integer :: from( 1 ) . as_abs ( ) ) , 0 ) ;
139- assert_eq ! ( integer_log2( rug :: Integer :: from( 42 ) . as_abs ( ) ) , 5 ) ;
139+ assert_eq ! ( integer_log2( Integer :: ZERO . magnitude ( ) ) , 0 ) ;
140+ assert_eq ! ( integer_log2( Integer :: from( 1 ) . magnitude ( ) ) , 0 ) ;
141+ assert_eq ! ( integer_log2( Integer :: from( 42 ) . magnitude ( ) ) , 5 ) ;
140142
141143 assert_eq ! (
142144 integer_log2(
143- rug :: Integer :: from_str( "18446744073709551615" )
145+ Integer :: from_str( "18446744073709551615" )
144146 . unwrap( )
145- . as_abs ( )
147+ . magnitude ( )
146148 ) ,
147149 63
148150 ) ;
149151 assert_eq ! (
150152 integer_log2(
151- rug :: Integer :: from_str( "999999999999999999999999999999" )
153+ Integer :: from_str( "999999999999999999999999999999" )
152154 . unwrap( )
153- . as_abs ( )
155+ . magnitude ( )
154156 ) ,
155157 99
156158 ) ;
157159 assert_eq ! (
158160 integer_log2(
159- rug :: Integer :: from_str( "170141183460469231731687303715884105726" )
161+ Integer :: from_str( "170141183460469231731687303715884105726" )
160162 . unwrap( )
161- . as_abs ( )
163+ . magnitude ( )
162164 ) ,
163165 126
164166 ) ;
165167 assert_eq ! (
166168 integer_log2(
167- rug :: Integer :: from_str( "170141183460469231731687303715884105727" )
169+ Integer :: from_str( "170141183460469231731687303715884105727" )
168170 . unwrap( )
169- . as_abs ( )
171+ . magnitude ( )
170172 ) ,
171173 126
172174 ) ;
173175 assert_eq ! (
174176 integer_log2(
175- rug :: Integer :: from_str( "170141183460469231731687303715884105728" )
177+ Integer :: from_str( "170141183460469231731687303715884105728" )
176178 . unwrap( )
177- . as_abs ( )
179+ . magnitude ( )
178180 ) ,
179181 127
180182 ) ;
181183 assert_eq ! (
182184 integer_log2(
183- rug :: Integer :: from_str( "340282366920938463463374607431768211458" )
185+ Integer :: from_str( "340282366920938463463374607431768211458" )
184186 . unwrap( )
185- . as_abs ( )
187+ . magnitude ( )
186188 ) ,
187189 128
188190 ) ;
189191 assert_eq ! (
190192 integer_log2(
191- rug :: Integer :: from_str( "999999999999999999999999999999999999999999" )
193+ Integer :: from_str( "999999999999999999999999999999999999999999" )
192194 . unwrap( )
193- . as_abs ( )
195+ . magnitude ( )
194196 ) ,
195197 139
196198 ) ;
197199 assert_eq ! (
198200 integer_log2(
199- rug :: Integer :: from_str( "999999999999999999999999999999999999999999999999999999999999999999999999999999999999" )
201+ Integer :: from_str( "999999999999999999999999999999999999999999999999999999999999999999999999999999999999" )
200202 . unwrap( )
201- . as_abs ( )
203+ . magnitude ( )
202204 ) ,
203205 279
204206 ) ;
0 commit comments