@@ -3,10 +3,12 @@ use bitcoin_hashes::sha256d::Hash as Sha256dHash;
3
3
4
4
use std:: cmp:: Ordering ;
5
5
6
- pub fn sort_outputs < T > ( outputs : & mut Vec < ( TxOut , T ) > ) {
6
+ pub fn sort_outputs < T , C : Fn ( & T , & T ) -> Ordering > ( outputs : & mut Vec < ( TxOut , T ) > , tie_breaker : C ) {
7
7
outputs. sort_unstable_by ( |a, b| {
8
8
a. 0 . value . cmp ( & b. 0 . value ) . then (
9
- a. 0 . script_pubkey [ ..] . cmp ( & b. 0 . script_pubkey [ ..] )
9
+ a. 0 . script_pubkey [ ..] . cmp ( & b. 0 . script_pubkey [ ..] ) . then_with (
10
+ || { tie_breaker ( & a. 1 , & b. 1 ) }
11
+ )
10
12
)
11
13
} ) ;
12
14
}
@@ -58,7 +60,7 @@ mod tests {
58
60
let txout2_ = txout2. clone ( ) ;
59
61
60
62
let mut outputs = vec ! [ ( txout1, "ignore" ) , ( txout2, "ignore" ) ] ;
61
- sort_outputs ( & mut outputs) ;
63
+ sort_outputs ( & mut outputs, |_ , _| { unreachable ! ( ) ; } ) ;
62
64
63
65
assert_eq ! (
64
66
& outputs,
@@ -81,7 +83,7 @@ mod tests {
81
83
let txout2_ = txout2. clone ( ) ;
82
84
83
85
let mut outputs = vec ! [ ( txout1, "ignore" ) , ( txout2, "ignore" ) ] ;
84
- sort_outputs ( & mut outputs) ;
86
+ sort_outputs ( & mut outputs, |_ , _| { unreachable ! ( ) ; } ) ;
85
87
86
88
assert_eq ! (
87
89
& outputs,
@@ -105,7 +107,7 @@ mod tests {
105
107
let txout2_ = txout2. clone ( ) ;
106
108
107
109
let mut outputs = vec ! [ ( txout1, "ignore" ) , ( txout2, "ignore" ) ] ;
108
- sort_outputs ( & mut outputs) ;
110
+ sort_outputs ( & mut outputs, |_ , _| { unreachable ! ( ) ; } ) ;
109
111
110
112
assert_eq ! ( & outputs, & vec![ ( txout1_, "ignore" ) , ( txout2_, "ignore" ) ] ) ;
111
113
}
@@ -131,7 +133,7 @@ mod tests {
131
133
outputs. reverse( ) ; // prep it
132
134
133
135
// actually do the work!
134
- sort_outputs( & mut outputs) ;
136
+ sort_outputs( & mut outputs, |_ , _| { unreachable! ( ) ; } ) ;
135
137
136
138
assert_eq!( outputs, expected) ;
137
139
}
0 commit comments