@@ -92,7 +92,6 @@ mod tests {
92
92
use super :: * ;
93
93
use crate :: single_random_draw:: select_coins_srd;
94
94
use crate :: tests:: { assert_proptest_srd, Utxo , UtxoPool } ;
95
- use crate :: WeightedUtxo ;
96
95
97
96
const FEE_RATE : FeeRate = FeeRate :: from_sat_per_kwu ( 10 ) ;
98
97
const SATISFACTION_WEIGHT : Weight = Weight :: from_wu ( 204 ) ;
@@ -131,75 +130,44 @@ mod tests {
131
130
StepRng :: new ( 0 , 0 )
132
131
}
133
132
134
- fn format_utxo_list ( i : & [ & Utxo ] ) -> Vec < String > {
135
- i. iter ( ) . map ( |u| u. value ( ) . to_string ( ) ) . collect ( )
136
- }
137
-
138
- fn format_expected_str_list ( e : & [ & str ] ) -> Vec < String > {
139
- e. iter ( ) . map ( |s| Amount :: from_str ( s) . unwrap ( ) . to_string ( ) ) . collect ( )
140
- }
141
-
142
- fn assert_coin_select_params ( p : & ParamsStr , expected_inputs : Option < & [ & str ] > ) {
133
+ fn assert_coin_select_params ( p : & ParamsStr , expected_inputs_str : Option < & [ & str ] > ) {
143
134
let fee_rate = p. fee_rate . parse :: < u64 > ( ) . unwrap ( ) ; // would be nice if FeeRate had
144
135
// from_str like Amount::from_str()
145
136
let target = Amount :: from_str ( p. target ) . unwrap ( ) ;
146
137
let fee_rate = FeeRate :: from_sat_per_kwu ( fee_rate) ;
147
-
148
- let w_utxos: Vec < _ > = p
149
- . weighted_utxos
150
- . iter ( )
151
- . map ( |s| {
152
- let v: Vec < _ > = s. split ( "/" ) . collect ( ) ;
153
- match v. len ( ) {
154
- 2 => {
155
- let a = Amount :: from_str ( v[ 0 ] ) . unwrap ( ) ;
156
- let w = Weight :: from_wu ( v[ 1 ] . parse ( ) . unwrap ( ) ) ;
157
- ( a, w)
158
- }
159
- 1 => {
160
- let a = Amount :: from_str ( v[ 0 ] ) . unwrap ( ) ;
161
- ( a, Weight :: ZERO )
162
- }
163
- _ => panic ! ( ) ,
164
- }
165
- } )
166
- . map ( |( a, w) | Utxo :: new ( a, w) )
167
- . collect ( ) ;
168
-
138
+ let w_utxos: Vec < Utxo > =
139
+ p. weighted_utxos . iter ( ) . map ( |s| Utxo :: from_str ( s) . unwrap ( ) ) . collect ( ) ;
169
140
let result = select_coins_srd ( target, fee_rate, & w_utxos, & mut get_rng ( ) ) ;
170
141
171
- if expected_inputs. is_none ( ) {
172
- assert ! ( result. is_none( ) ) ;
173
- } else {
174
- let inputs: Vec < _ > = result. unwrap ( ) . collect ( ) ;
175
- let expected_str_list: Vec < String > = expected_inputs
176
- . unwrap ( )
177
- . iter ( )
178
- . map ( |s| Amount :: from_str ( s) . unwrap ( ) . to_string ( ) )
179
- . collect ( ) ;
180
- let input_str_list: Vec < String > = format_utxo_list ( & inputs) ;
181
- assert_eq ! ( input_str_list, expected_str_list) ;
142
+ if let Some ( inputs) = result {
143
+ let inputs: Vec < Utxo > = inputs. cloned ( ) . collect ( ) ;
144
+ let expected_inputs: Vec < Utxo > =
145
+ expected_inputs_str. unwrap ( ) . iter ( ) . map ( |s| Utxo :: from_str ( s) . unwrap ( ) ) . collect ( ) ;
146
+ assert_eq ! ( inputs, expected_inputs) ;
182
147
}
183
148
}
184
149
185
- fn assert_coin_select ( target_str : & str , expected_inputs : & [ & str ] ) {
150
+ fn assert_coin_select ( target_str : & str , expected_inputs_str : & [ & str ] ) {
186
151
let target = Amount :: from_str ( target_str) . unwrap ( ) ;
187
152
let pool = build_pool ( ) ;
188
153
189
- let inputs: Vec < & Utxo > = select_coins_srd ( target, FEE_RATE , & pool, & mut get_rng ( ) )
154
+ let inputs: Vec < Utxo > = select_coins_srd ( target, FEE_RATE , & pool, & mut get_rng ( ) )
190
155
. expect ( "unexpected error" )
156
+ . cloned ( )
191
157
. collect ( ) ;
192
158
193
- let input_str_list : Vec < _ > = format_utxo_list ( & inputs ) ;
194
- let expected_str_list : Vec < _ > = format_expected_str_list ( expected_inputs ) ;
195
- assert_eq ! ( input_str_list , expected_str_list ) ;
159
+ let expected_inputs : Vec < _ > =
160
+ expected_inputs_str . iter ( ) . map ( |s| Utxo :: from_str ( s ) . unwrap ( ) ) . collect ( ) ;
161
+ assert_eq ! ( expected_inputs , inputs ) ;
196
162
}
197
163
198
164
#[ test]
199
- fn select_coins_srd_with_solution ( ) { assert_coin_select ( "1.5 cBTC" , & [ "2 cBTC" ] ) ; }
165
+ fn select_coins_srd_with_solution ( ) { assert_coin_select ( "1.5 cBTC" , & [ "2 cBTC/204 wu " ] ) ; }
200
166
201
167
#[ test]
202
- fn select_coins_srd_all_solution ( ) { assert_coin_select ( "2.5 cBTC" , & [ "2 cBTC" , "1 cBTC" ] ) ; }
168
+ fn select_coins_srd_all_solution ( ) {
169
+ assert_coin_select ( "2.5 cBTC" , & [ "2 cBTC/204 wu" , "1 cBTC/204 wu" ] ) ;
170
+ }
203
171
204
172
#[ test]
205
173
fn select_coins_srd_no_solution ( ) {
@@ -214,7 +182,7 @@ mod tests {
214
182
let params = ParamsStr {
215
183
target : "1.95 cBTC" , // 2 cBTC - CHANGE_LOWER
216
184
fee_rate : "10" ,
217
- weighted_utxos : vec ! [ "1 cBTC" , "2 cBTC" , "1 sat/204" ] , // 1 sat @ 204 wu has negative effective_value
185
+ weighted_utxos : vec ! [ "1 cBTC" , "2 cBTC" , "1 sat/204 wu " ] , // 1 sat @ 204 has negative effective_value
218
186
} ;
219
187
220
188
assert_coin_select_params ( & params, Some ( & [ "2 cBTC" , "1 cBTC" ] ) ) ;
@@ -258,7 +226,7 @@ mod tests {
258
226
let params = ParamsStr {
259
227
target : "2 cBTC" ,
260
228
fee_rate : "10" ,
261
- weighted_utxos : vec ! [ "1 cBTC/18446744073709551615" ] , // weight= u64::MAX
229
+ weighted_utxos : vec ! [ "1 cBTC/18446744073709551615 wu " ] , // weight= u64::MAX
262
230
} ;
263
231
264
232
assert_coin_select_params ( & params, None ) ;
@@ -269,7 +237,7 @@ mod tests {
269
237
let params = ParamsStr {
270
238
target : "18446744073709551615 sat" , // u64::MAX
271
239
fee_rate : "10" ,
272
- weighted_utxos : vec ! [ "1 cBTC/18446744073709551615" ] ,
240
+ weighted_utxos : vec ! [ "1 cBTC/18446744073709551615 wu " ] ,
273
241
} ;
274
242
275
243
assert_coin_select_params ( & params, None ) ;
0 commit comments