File tree Expand file tree Collapse file tree 2 files changed +52
-6
lines changed
primitives/npos-elections/src Expand file tree Collapse file tree 2 files changed +52
-6
lines changed Original file line number Diff line number Diff line change @@ -629,7 +629,7 @@ pub(crate) fn setup_inputs<AccountId: IdentifierT>(
629629 } )
630630 . collect :: < Vec < CandidatePtr < AccountId > > > ( ) ;
631631
632- let voters = initial_voters. into_iter ( ) . map ( |( who, voter_stake, votes) | {
632+ let voters = initial_voters. into_iter ( ) . filter_map ( |( who, voter_stake, votes) | {
633633 let mut edges: Vec < Edge < AccountId > > = Vec :: with_capacity ( votes. len ( ) ) ;
634634 for v in votes {
635635 if edges. iter ( ) . any ( |e| e. who == v) {
@@ -650,12 +650,18 @@ pub(crate) fn setup_inputs<AccountId: IdentifierT>(
650650 ) ;
651651 } // else {} would be wrong votes. We don't really care about it.
652652 }
653- Voter {
654- who,
655- edges : edges,
656- budget : voter_stake. into ( ) ,
657- load : Rational128 :: zero ( ) ,
653+ if edges. is_empty ( ) {
654+ None
655+ }
656+ else {
657+ Some ( Voter {
658+ who,
659+ edges : edges,
660+ budget : voter_stake. into ( ) ,
661+ load : Rational128 :: zero ( ) ,
662+ } )
658663 }
664+
659665 } ) . collect :: < Vec < _ > > ( ) ;
660666
661667 ( candidates, voters, )
Original file line number Diff line number Diff line change @@ -72,6 +72,46 @@ fn float_phragmen_poc_works() {
7272 ) ;
7373}
7474
75+ #[ test]
76+ fn phragmen_core_test_without_edges ( ) {
77+ let candidates = vec ! [ 1 , 2 , 3 ] ;
78+ let voters = vec ! [
79+ ( 10 , 10 , vec![ ] ) ,
80+ ( 20 , 20 , vec![ ] ) ,
81+ ( 30 , 30 , vec![ ] ) ,
82+ ] ;
83+
84+ let ( candidates, voters) = setup_inputs ( candidates, voters) ;
85+
86+ assert_eq ! (
87+ voters
88+ . iter( )
89+ . map( |v| (
90+ v. who,
91+ v. budget,
92+ ( v. edges. iter( ) . map( |e| ( e. who, e. weight) ) . collect:: <Vec <_>>( ) ) ,
93+ ) )
94+ . collect:: <Vec <_>>( ) ,
95+ vec![ ]
96+ ) ;
97+
98+ assert_eq ! (
99+ candidates
100+ . iter( )
101+ . map( |c_ptr| (
102+ c_ptr. borrow( ) . who,
103+ c_ptr. borrow( ) . elected,
104+ c_ptr. borrow( ) . round,
105+ c_ptr. borrow( ) . backed_stake,
106+ ) ) . collect:: <Vec <_>>( ) ,
107+ vec![
108+ ( 1 , false , 0 , 0 ) ,
109+ ( 2 , false , 0 , 0 ) ,
110+ ( 3 , false , 0 , 0 ) ,
111+ ]
112+ ) ;
113+ }
114+
75115#[ test]
76116fn phragmen_core_poc_works ( ) {
77117 let candidates = vec ! [ 1 , 2 , 3 ] ;
You can’t perform that action at this time.
0 commit comments